定点定时抛物效果实现

要实现物体的移动效果,可以通过公式简单得出。我们定义一个概念叫速度,在游戏步进的一段时间里,会改变自身的位置。假设由A点移动到B点,则为:

其中P为物体当前的位置,一开始为A点。当随着时间流逝,P的值是在更新的。这意味着我在说:“我会一步一步的前往目的的,最终就会按预期的时间达到B点。但若是速度发生了变化,则可能到不了B点,或者没有按期望的时间到达”,所以要其中的V是一个定值。假设我们期望t秒到达B点,那么很简单得出V值:

不过,我们也可以换一个思路来计算物体的位置,不使用速度的概念。若是t秒从A移动到B,那么0.5t时间则走了一半路程,所以物体的位置是出发点位置加上已走路程。公式表示如下:

其中代表从A点出发已花费的时间,当等于时候,则说明进行了一半的路程,即是,其中B-A即是AB之间的路程。简单验证一下没有问题,很好理解。

这种做法的一个好处是,即便AB点的位置发生变化,最终物体还是会按时移动到B点,虽然路径是不是直线了,但总比打歪了好。这正好符合了我们标题所说的定点定时,代码和效果如下:

//线性位置变换
Vector2 pos = p[0] + (p[1] - p[0]) * (_tCount / _tMax);

丢咖啡

接下来,我们就来实现更高级一点的抛物线轨迹。但是抛物线方程有很多种,又如何和游戏的步进时间关联起来呢? 首先我们的起点与终点已经确定了,然后确定了运行需要花费的时间。我们隐约可以还感觉到需要确定的是这个抛物线的“弯度”,但是“弯度”不太好描述,所以我们再确定一个P点,或者Q点,来决定抛物线的方程。

y轴向下

确定P点的情况

首先变换B点坐标系到A为原点的坐标系:

然后假设P点在AB的x距离的m倍处(P点可以随便调整,从而影响整个曲线),所以P点坐标为

,其中y轴为0,x值是一个已知量。我们定义Px为P点的x坐标,然后A点已经成为原点所以:

然后写下抛物线方程:,代入原点得:,再代入P点得:

化简写成b的等式:

再将B点代入抛物线方程,再替换b得:

所以a已经求出为:

所以b为:

众所周知,抛物线的x轴轨迹是线性的,所以x坐标和时间的关系如下:

那么通过a、b、x三个变量即可表示y值,再定义最终化简为:

这个时候我们就不再需要求ab的值了,直接使用最终的公式计算结果:

观察结果我们可以发现kt与m的范围实际都在0到1,最后的式子也意外的简洁。最后效果如下:

定点打击

代码如下,最后我将不必要的计算给注释掉了:

//将B转换到A坐标系
Vector2 B = p->_pos[1] - p->_pos[0];
//AB x轴距离
//float d = B.a;
//x方程
float k_t = GetKSafe(p->_tCount, p->_tMax);//有警告的返回,防止除数为0
float x = k_t * B.a;
//y = a * x^2  + b * x + c ,由于A成为了原点,所以c等于0
//然后假设与x相交的点为p,则px是我们估计的一个常数(小于d)
constexpr float m = 0.75f;
//float p_x = m * d;
//所以 0 = a * p_x^2 + b * p_x,化简得
// b = -a * p_x;
//然后方程又过点B,所以By = a * Bx^2 + b * Bx,再消去b化简得
//float a = B.b / (B.a * B.a - p_x * B.a);
//然后求得b值
//float b = -a * p_x;
//最后y值为
//float y = a * x * x + b * x;
//float y = k_t * (k_t - m) * B.b / (1 - m);
float y = k_t * B.b * (k_t - m) / (1 - m);//最后转换回原坐标系
Vector2 pos = Vector2(x, y) + p->_pos[0];

确定Q点的情况

以Q点确定抛物线的公式我还没有推导,太晚了,等下次再试试,说不定是差不多的公式~


10-15更新:

其实Q的x值是P点的一半,所以其实是一样的,只不过m变小了一倍。

定点定时抛物效果实现相关推荐

  1. 记录一个python小白写问卷星定时答题代码的过程

    萌生想法的原因 学校的一些学分要自己抢公众号的活动修满的,要蹲点等公众号发的定时问卷开始填写,几乎秒没. 每次和舍友一起抢,发现大家手速网速各有不同,最后几家欢喜几家愁. 于是萌生了想法--通过代码解 ...

  2. 用AjaxPro实现无刷新翻页效果及数据库分页技术介绍

    在看本文之前,建议查看本人的系列文章: <AjaxPro与服务器端交互过程中如何传值>:http://blog.csdn.net/zhoufoxcn/archive/2008/01/05/ ...

  3. vb net的定时循环_Python3-定时任务的四种实现方式

    最近做一个小程序开发任务,主要负责后台部分开发:根据项目需求,需要实现三个定时任务: 1>定时更新微信token,需要2小时更新一次: 2>商品定时上线: 3>定时检测后台服务是否存 ...

  4. 购物时,商品加入购物车的飞入效果

    我们在购物时,当选定商品后,点击加入购物车,会形成一个产品飞入购物车的效果,这种效果在淘宝上比较常见.如果我们自己做购物网站,是否也可以实现呢:以下是淘宝的效果 思路:要想有这种效果,首先要确定一般来 ...

  5. E22 SX1268 LoRa模块传输测试(定点模式)发送接收串口消息 windows与linux环境下C语言代码

    前言 近期因项目需求,对LoRa透传模块进行测试学习. 本次测试的模块是成都ebyte公司的LoRa模块,型号为SX1268.该模块采用串口透传模式. 本博客主要记录了模块的定点传输模式,透传模式相对 ...

  6. React的setTimeout定时任务,和setTimeout的定时无效

    这是自己在html里面写的test, let aa = 1;da = () => {aa += 1;console.log(aa);if(aa == 10){return;} else {set ...

  7. 微信营销的价值及注意

    价值: 1.传播符号多样化,立体展现企业形象. 微信传播方式,可以简单分为公众号.朋友圈.小程序等.对于企业而言,多元化的传播方式,有利于企业进行立体化传播形象.如曼朗入驻微信,通过微信公众号不定期传 ...

  8. 客户案例|AI如何助力快消行业降本增效

    快消行业是指消费频率高.使用时限短.拥有广泛的消费群体.对于消费的便利性要求很高的商品销售行业.快消行业的销售渠道种类多而复杂,传统业态和新兴业态等多种渠道并存.快消行业集中度逐步上升,竞争度加大. ...

  9. BLAG: Improving the Accuracy of Blacklists

    文章目录 0. 前情提要 1. 摘要解读 2. 分析设计 2.1 黑名单 2.1.1 黑名单定义 2.1.2 现存问题 2.2 BLAG 2.2.1 工作流程 2.2.2 数据集 3. 实验评估 3. ...

最新文章

  1. hadoop程序开发 --- python
  2. 深度软件商店_3D深度相机,这就是微软未来手机Surface Duo新特性
  3. svn文件大小类型限制,提交必须加多少字的说明
  4. notebook打开外部文件_CAD外部参照真是个好东西!
  5. C++ 文本文件的读取和写入
  6. Cesium入门-2-增加地形
  7. Python开发---报错:ImportError: cannot import name requests
  8. mySql学习笔记:比sql server书写要简单
  9. asp.net多语言设置方法
  10. day01 格式化输出和while循环的两个小练习
  11. 基于PaddlePaddle2.0的蝴蝶图像识别分类——利用预训练残差网络ResNet101模型中参数的调整,数据增强
  12. 【软件工程期末复习】知识点+大题详解(E-R图、数据流图、N-S盒图、状态图、活动图、用例图....)
  13. KDD_2018_notes Smoothed Dilated Convolutions for Improved Dense Prediction
  14. pdf转换器中文版下载
  15. FreeRTOS 事件标志组
  16. 浅谈智能家居安防监控的重要性
  17. 2022年Spark基础学习笔记
  18. Unity中导出apk文件
  19. LeetCode OJ 之 Number of 1 Bits (二进制位1的个数)
  20. 大学计算机信息技术实验教程,计算机信息技术实验教程.pdf

热门文章

  1. 五十、Maven系列:安装和配置Maven镜像
  2. 我是Python小玩家,一行代码能做哪些炫酷的事情 (三十一)
  3. 银行客户还款可能性预测
  4. 提升Transformer效率又有新招?基于矩阵分解的线性化Attention方案
  5. 中文数据集有奖公开征集
  6. 基于对偶学习的跨领域图片描述生成
  7. stolz定理考研能用吗_重磅,考研数学最后重点预测
  8. mysql strstr_实现 strStr() 函数-算法刷题
  9. 「数据库系列四」分布式数据库CAP理论与最终一致性
  10. springboot 实现微信小程序授权并解密手机号