JavaFX更新循环中的项目符号位置UI
对于我的学校项目,我必须制作一个游戏,大炮必须向飞机射击子弹,问题是,当我们射击时,我们可以在控制台上看到子弹的所有位置(X.Y),但子弹不会在UI上更新 以下是测试代码:JavaFX更新循环中的项目符号位置UI,javafx,Javafx,对于我的学校项目,我必须制作一个游戏,大炮必须向飞机射击子弹,问题是,当我们射击时,我们可以在控制台上看到子弹的所有位置(X.Y),但子弹不会在UI上更新 以下是测试代码: vel = Slider.getValue(); double angle = panelNero.getRotate(); boolean dead = false; while (dead == false) { double X = P.getLayoutX(); double Y = P.getLa
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;
}
}
vel=Slider.getValue();
双角度=panelNero.getRotate();
布尔死=假;
while(dead==false){
double X=P.getLayoutX();
双Y=P.getLayoutY();
如果(X>1&&Y>1&&X
请看这篇文章:
您可以使用Platform.runlater()
从非GUI线程更新GUI。在这种情况下,您的更新请求被放入队列中,并由GUI线程尽快处理
但由于这是一个更复杂的迭代,您可以考虑在新的<代码>线程< /代码>中使用<代码>任务>代码> < /P> 我建议您使用类似以下内容:
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();
Task Task=新任务(){
@凌驾
public Void call()引发异常{
while(dead==false){
Platform.runLater(新的Runnable(){
@凌驾
公开募捐{
P.setLayoutX(…);
P.setLayoutY(…);
}
});
睡眠(500);
}
}
};
线程th=新线程(任务);
th.start();