我正在制作非常简单的游戏。屏幕上有一个带枪的精灵,他朝鼠标指向的方向发射子弹。我用来执行此操作的方法是根据 2 个点(精灵的中心和鼠标位置)找到 X 与 Y 的比率。X 与 Y 的比率本质上是“每次 X 变化 1,Y 变化 __”。
到目前为止,这是我的方法:
public static Vector2f getSimplifiedSlope(Vector2f v1, Vector2f v2) {
float x = v2.x - v1.x;
float y = v2.y - v1.y;
// find the reciprocal of X
float invert = 1.0f / x;
x *= invert;
y *= invert;
return new Vector2f(x, y);
}
然后将此 Vector2f 传递给子弹,子弹每帧移动该数量。
但它不起作用。当我的鼠标直接位于精灵的上方或下方时,子弹移动得非常快。当鼠标在精灵的右侧时,它们移动得非常慢。如果鼠标在左侧,子弹同样从右侧射出。
当我从混合中删除反转变量时,它似乎工作正常。所以这是我的两个问题:
- 我是否偏离了轨道,并且有一种更简单、更清洁、更广泛使用等方式来做到这一点?
- 如果我在正确的轨道上,我如何“规范化”向量,使其保持不变,无论鼠标离精灵有多远?
提前致谢。