我正在编写一款2D游戏,其中有鸟在摄像机空间中。我想让它们飞翔。因此,我生成了3个随机点,第一个点位于左上方,第二个点位于中心底部,第三个点位于右上方。
结果是我得到了一个180度旋转的三角形。
为了沿着曲线路径移动鸟,我有一个参数t,每帧(渲染循环)增加一些增量。
问题在于,在不同的曲线中,鸟的速度不同。如果三角形“宽”(1),它们会更慢,如果它被Y坐标拉伸(2),则速度非常快。
但我想使不同曲线的速度相等。逻辑上说,我必须为每个曲线更改附加到每帧的delta。
我已经尝试这样解决:
通过将2个向量的长度相加:P1P2和P2P3,找到曲线的长度。
然后我定义了虚拟米每帧的速度。以下是一些伪代码:
结果是我得到了一个180度旋转的三角形。
为了沿着曲线路径移动鸟,我有一个参数t,每帧(渲染循环)增加一些增量。
问题在于,在不同的曲线中,鸟的速度不同。如果三角形“宽”(1),它们会更慢,如果它被Y坐标拉伸(2),则速度非常快。
但我想使不同曲线的速度相等。逻辑上说,我必须为每个曲线更改附加到每帧的delta。
我已经尝试这样解决:
通过将2个向量的长度相加:P1P2和P2P3,找到曲线的长度。
然后我定义了虚拟米每帧的速度。以下是一些伪代码:
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);
但是鸟类的速度各不相同,这是什么原因呢?或许有更好的方法。
1.f
?这有什么特殊的意义吗? - Tyler Jandreau