如何规范Java2D图形中的Sprite移动以考虑屏幕分辨率

时间:2017-02-11 21:11:29

标签: javafx-8 graphics2d

我正在尝试使用JavaFX构建2D视频游戏。屏幕底部有一艘潜艇可以发射鱼雷。我注意到如果我在一个角度上发射一个鱼雷,它会以更快的速度行进,而不是说我直接将它直接射向北方。我假设费率的差异是因为屏幕是一个矩形,当在对角线上移动时,你覆盖的距离更远。

是否有技术可以解释这一点,因此无论射弹的行进角度如何,您都可以获得恒定的移动速度?我在Eclipse下使用JavaFX编写游戏。

感谢任何帮助! 谢谢!

1 个答案:

答案 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);
}