javafx计算子弹的路径

javafx计算子弹的路径,java,javafx,Java,Javafx,我想做一个塔防,但子弹路径有点问题,也许你们中的一些人可以给我一个建议,问题出在哪里 这里我设置了子弹的梯度 bullet.setxGradient((turret.getPosX() - turret.getEnemies().getPosX())); bullet.setyGradient((turret.getPosY() - turret.getEnemies().getPosY())); 这里我移动子弹。moveBullet在AnimationTimer中调用 public void

我想做一个塔防,但子弹路径有点问题,也许你们中的一些人可以给我一个建议,问题出在哪里

这里我设置了子弹的梯度

bullet.setxGradient((turret.getPosX() - turret.getEnemies().getPosX()));
bullet.setyGradient((turret.getPosY() - turret.getEnemies().getPosY()));
这里我移动子弹。moveBullet在AnimationTimer中调用

public void moveBullet(Bullet bullet) {

    bullet.setPosX(bullet.getPosX() -  (bullet.getxGradient() ));
    bullet.setPosY(bullet.getPosY() - (bullet.getyGradient() ));
}
问题是,如果子弹靠近炮塔,子弹的速度就会变慢。
有没有其他更好的方法来跟踪和设置路径?

您的代码中没有任何计时控制。这完全取决于AnimationTimer启动的频率,而这并不总是以60Hz的标称频率完成。我重写了代码,根据子弹发射后的时间计算子弹的位置。

这是有人给我的答案,它成功了

bullet.setVelocity(new Point2D(turret.getEnemies().getPosX(),turret.getEnemies().getPosY())
.subtract(bullet.getPosX(),bullet.getPosY()).normalize().multiply(3));
所以我做了一个点2D,加上敌人的X和Y坐标和bulletstart

public void moveBullet(Bullet bullet) {
    bullet.setPosX(bullet.getPosX() + bullet.getVelocity().getX());
    bullet.setPosY(bullet.getPosY() + bullet.getVelocity().getY());

}

在这里,我将速度添加到posX和posY中。

好吧,你的代码只是零碎的,帮助你是不可能的。下面是一些如何实现的伪代码:

double speed = 1;
double angle = turret.getAngle();

// start at the edge of the turret, not inside of it, given that the turret is centered at location
double x = turret.location.x + Math.cos( angle) * turret.width / 2;
double y = turret.location.y + Math.sin( angle) * turret.height / 2;

// calculate velocity depending on angle
double dx = Math.cos(angle) * speed;
double dy = Math.sin(angle) * speed;

bullet.setLocation( x, y);
bullet.setVelocity( dx, dy);
bullet.setAngle( angle);
而您在AnimationTimer中的移动只是

location.add(velocity);
注意:角度以RAD为单位,您可能必须在某个点或至少在旋转节点时使用Math.toDegrees

看起来或多或少像这样,大矩形是一个旋转的炮塔,在旋转过程中发射矩形子弹


谢谢你的回答。但时间安排不是问题所在。我只是计算了错误的路径。这段代码也没有考虑AnimationTimer计时的变化。在重载情况下,子弹会变慢。OP的问题不在于动画计时器,而是子弹速度随位置而变化。关于AnimationTimer,你当然必须保持一个稳定的速率。mipa你能给我一个建议,在没有AnimationTimer的情况下,我应该如何做循环吗?那太好了。顺便说一下,我对编程还不熟悉。“边做边学”。@KreCha:你应该使用AnimationTimer。另外,这不是问题的一部分,如果你想得到答案,你应该创建一个新的。另外,如果问题得到回答,你应该接受答案。我不是反对使用AnimationTimer。我只是建议使用它的当前时间参数来计算自上次调用以来的时间差,以便对变化做出反应。但罗兰是对的,这是一个新问题。