对于我的学校项目,我必须制作一个大炮必须向飞机射击子弹的游戏,问题是,当我们射击时,我们可以在控制台上看到子弹的所有位置(X.Y)但是bullet没有在UI上更新
这是测试代码:
vel = Slider.getValue();
double angle = panelNero.getRotate();
boolean dead = false;
while (dead == false) {
double X = P.getLayoutX();
double Y = P.getLayoutY();
if (X > 1 && Y > 1 && X < MP.getWidth() && Y < MP.getHeight()) {
System.out.println("x: " + X + " y: " + Y + " maxX: " + MP.getWidth() + " maxY: " + MP.getHeight());
double x = P.getLayoutX();
double y = P.getLayoutY();
P.setLayoutX(x += (Math.cos(Math.toRadians(angle)) * vel));
P.setLayoutY(y += (Math.cos(Math.toRadians(angle)) * vel));
System.out.println("VIVO");
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(FileFXMLController.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
System.out.println("MORTO");
P.setLayoutX(pro.posX);
P.setLayoutY(pro.posY);
dead = true;
}
}
答案 0 :(得分:0)
请看一下这篇文章:Platform.runLater and Task in JavaFX
您可以使用Platform.runlater()
从非GUI线程更新GUI。在这种情况下,您的更新请求将放入队列中,并由GUI线程尽快处理。
但由于这是一个更复杂的迭代,您可以考虑在新的Task
上使用Thread
。
我建议你使用这样的东西:
Task task = new Task<Void>() {
@Override
public Void call() throws Exception {
while (dead == false) {
Platform.runLater(new Runnable() {
@Override
public void run() {
P.setLayoutX(...);
P.setLayoutY(...);
}
});
Thread.sleep(500);
}
}
};
Thread th = new Thread(task);
th.start();