1

我在子弹对象的初始化中有这个:

    x = startX;
    y = startY;
    double distance = Math.sqrt(((endX - x) ^ 2) + ((endY - y) ^ 2));
    speedX = (6 * (endX - x)) / distance;
    speedY = (6 * (endY - y)) / distance;

它会到我在屏幕上触摸的地方,但我触摸得越远,它走得越快。这在纸上效果很好,我已经尝试过不同的长度,它应该可以工作,但是子弹需要在从玩家到每一步触摸的点的线上移动 6 个像素。它的更新方法当然会移动。但是为什么子弹以不同的速度移动呢?

4

2 回答 2

3

如果我记得我的 Java 运算符...

代替

double distance = Math.sqrt(((endX - x) ^ 2) + ((endY - y) ^ 2));

double distance = Math.sqrt(Math.pow(endX - x, 2) + Math.pow(endY - y, 2));
于 2013-02-08T00:27:47.727 回答
0

假设所有测量值都以像素为单位,并且您希望速度为每步 6 个像素,那么您可以使用一点点三角函数来计算速度:

double theta = Math.atan2(endY - startY, endX - startX);
velX = 6 * Math.cos(theta);
velY = 6 * Math.sin(theta);

请注意,我像物理学家一样使用术语“速度”和“速度”;speed 是一个标量值,velocity 是一个具有大小和方向的向量。

于 2013-02-08T00:30:35.863 回答