我正在写一个 2d 游戏,我在相机空间里有鸟。我想让它们飞起来。所以,我产生了 3 个随机点。第一个是左上侧,第二个:中下,第三个:右上。
结果我有180度旋转的三角形。
为了让鸟儿通过曲线的路径,我有一个 t 参数,它在每一帧(渲染循环)中增加了一些增量。
问题是在不同的曲线中,鸟类的速度不同。如果三角形是“宽”的(1),它们会更慢,如果它被 Y 坐标(2)拉伸,则速度非常快。
但我想让不同曲线的速度相等。从逻辑上讲,我必须更改delta
为每条曲线附加的每一帧。
我试图这样解决它:
通过将 2 个向量的长度相加来找到曲线的 ~ 长度:P1P2
和P2P3
。
比我定义的速度为每帧 1 个虚拟米。一点伪代码:
float pixelsInMeter = 92.f; // One virtual meter equals to this number of pixels
float length = len(P1P2) + len(P2P3)
float speed = 0.0003f; // m/frame
// (length * speed) / etalon_length
float speedForTheCurve = toPixels( (toMeters(length) * speed) / 1.f);
// ...
// Each frame code:
t += speedForTheCurve;
Vector2 newPos = BezierQuadratic(t, P1, P2, P3);
但无论如何,鸟类都有不同的速度。怎么了?或者也许有更好的方法。