我在子弹对象的初始化中有这个:
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个像素到每一步触摸的点。它的更新方法当然也在移动。但为什么子弹以不同的速度移动?
答案 0 :(得分: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));
答案 1 :(得分:0)
假设所有测量都以像素为单位,并且您希望每步的速度为6像素,那么您可以使用一点点触发来计算速度:
double theta = Math.atan2(endY - startY, endX - startX);
velX = 6 * Math.cos(theta);
velY = 6 * Math.sin(theta);
请注意,我正在使用术语“速度”和“速度”作为物理学家;速度是标量值,速度是具有幅度和方向的矢量。