javafx计算子弹的路径

时间:2016-02-20 14:45:31

标签: java javafx

我正在尝试进行塔防并且在子弹路径上遇到一些问题,也许你们中的一些人可以给我一个问题所在的建议。

这里我设置子弹的渐变。

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() ));
}
问题是,如果子弹靠近炮塔,则子弹速度会变慢。 是否有其他可能更好的方法来跟踪和设置路径?

3 个答案:

答案 0 :(得分:0)

您的代码中没有任何时序控制。这一切都取决于AnimationTimer发射的频率,并且这并不总是以60Hz的标称速率完成。我根据子弹射击后的时间重写代码来计算子弹位置。

答案 1 :(得分:0)

以下是有人给我的答案,并且有效。

bullet.setVelocity(new Point2D(turret.getEnemies().getPosX(),turret.getEnemies().getPosY())
.subtract(bullet.getPosX(),bullet.getPosY()).normalize().multiply(3));

所以我制作一个Point2D并添加敌人的X和Y坐标以及bulletstart。

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

}

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

答案 2 :(得分:0)

嗯,你的代码只是点点滴滴,帮助你是不可能的。所以这里有一些关于它是如何完成的伪代码:

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,或者至少在旋转节点时使用

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

enter image description here