我正在尝试使用JavaFX构建2D视频游戏。屏幕底部有一艘潜艇可以发射鱼雷。我注意到如果我在一个角度上发射一个鱼雷,它会以更快的速度行进,而不是说我直接将它直接射向北方。我假设费率的差异是因为屏幕是一个矩形,当在对角线上移动时,你覆盖的距离更远。
是否有技术可以解释这一点,因此无论射弹的行进角度如何,您都可以获得恒定的移动速度?我在Eclipse下使用JavaFX编写游戏。
感谢任何帮助! 谢谢!
答案 0 :(得分:1)
由于你已经向不同方向射击,我假设你有一个由两个分量(x, y)
定义的速度向量。在JavaFX中,这样的向量可以由Point2D
表示。鉴于speed
您希望射弹在哪里旅行,您可以执行以下操作:
public void fire() {
// the point at which you are shooting
Point2D target = ...
// the point from where you are shooting
Point2D source = ...
// the projectile speed per frame
double speed = ...
// velocity vector to be used to move
// the projectile at constant speed per frame
Point2D velocity = target.subtract(source).normalize().multiply(speed);
}
更新:(从角度生成包含的向量)
如果您不知道目标点,可以从用于拍摄的角度获取矢量:
public void fire() {
double angleDegrees = ...
double angleRadians = Math.toRadians(angleDegrees);
// the point from where you are shooting
Point2D source = ...
// the projectile speed per frame
double speed = ...
Point2D shootingVector = new Point2D(Math.cos(angleRadians), Math.sin(angleRadians));
// velocity vector to be used to move
// the projectile at constant speed per frame
Point2D velocity = shootingVector.normalize().multiply(speed);
}