Javafx 8 如何规范Java2D图形中的精灵运动以考虑屏幕分辨率

Javafx 8 如何规范Java2D图形中的精灵运动以考虑屏幕分辨率,javafx-8,graphics2d,Javafx 8,Graphics2d,我正在尝试使用JavaFX构建一个2D视频游戏。屏幕底部有一艘潜艇发射鱼雷。我注意到,如果我从某个角度发射鱼雷,它的飞行速度会比直接朝北发射鱼雷的速度快。我假设速率的差异是因为屏幕是一个矩形,当沿着对角线移动时,覆盖的距离会更长 有没有技术可以解释这一点,这样你就可以得到一个恒定的运动速率,而不管弹丸的移动角度如何?我正在Eclipse下使用JavaFX编写游戏 感谢您的帮助! 谢谢 既然你已经向不同的方向开火了,我假设你有一个由两个分量x,y定义的速度向量。在JavaFX中,这样的向量可以用P

我正在尝试使用JavaFX构建一个2D视频游戏。屏幕底部有一艘潜艇发射鱼雷。我注意到,如果我从某个角度发射鱼雷,它的飞行速度会比直接朝北发射鱼雷的速度快。我假设速率的差异是因为屏幕是一个矩形,当沿着对角线移动时,覆盖的距离会更长

有没有技术可以解释这一点,这样你就可以得到一个恒定的运动速率,而不管弹丸的移动角度如何?我正在Eclipse下使用JavaFX编写游戏

感谢您的帮助!
谢谢

既然你已经向不同的方向开火了,我假设你有一个由两个分量x,y定义的速度向量。在JavaFX中,这样的向量可以用Point2D表示。根据您希望投射物以的速度移动,您可以执行以下操作:

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

嗨,AlmasB,我是矢量数学的新手。我有潜艇的x,y坐标。我想以30,45,90等固定角度发射鱼雷。我如何使用你的速度输入生成鱼雷的路径?谢谢你的帮助!请参阅更新的答案。您可能需要调整Y轴,因为在图形中,我们处理的是正Y向下,而在数学中,正Y向上。嗨,AlmasB,作为向量数学的新手,射击向量将包含投射者需要遵循的X和Y增量运动,因为我已经指定了投射物的角度和速度?我正在寻找生成x,y点的数组,投影将需要遵循感谢!