gpt4 book ai didi

Java 方法仅在使用 JavaFX 的调度程序可运行关闭后运行一次完整代码

转载 作者:行者123 更新时间:2023-11-29 04:21:57 27 4
gpt4 key购买 nike

我在尝试学习 Java 和 JavaFX 的同时编写俄罗斯方 block 游戏。当我第一次从方法开始调用该方法时,它运行良好,当我从线程调用它时,它只部分运行,并且不向 Pane 添加新节点。

Here是代码的一部分,您可以在

中查看完整内容
@Override
public void start(Stage stage) {
...
stage.show();
newPieces();
}

public void newPieces() {
Pieces pieces = new Pieces();
piece = pieces.createPiece();
nextPiece = pieces.createPiece();
boolean add1 = vbox.getChildren().add(nextPiece);
boolean add2 = pane.getChildren().add(piece);
translateDown(piece);
}

public void translateDown(Group piece) {
scheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
boolean translate = piece.getTransforms().add(new Translate(0, 25));
...
...
newPieces();
scheduler.shutdown();
...
...
}, 0, 1, TimeUnit.SECONDS);

newPieces 方法创建一组矩形。

谢谢!

最佳答案

我建议使用 Timeline,而不是使用执行器来安排更新,它在应用程序线程上执行帧的事件处理程序。在应用程序线程上运行更新很重要,因为在不同线程上修改节点的属性是有问题的:

Timeline timeline = new Timeline();

timeline.getKeyFrames().add(new KeyFrame(Duration.seconds(1), evt -> {
updateBoard(); // do things like moving a piece...

if (checkLoss()) {
// stop updates when game is lost
timeline.stop();
}
}));

// repeat indefinitely
timeline.setCycleCount(Animation.INDEFINITE);

timeline.play();

您还可以使用 timeline.pause() 来暂停游戏并设置 rate 属性来加速游戏...

关于Java 方法仅在使用 JavaFX 的调度程序可运行关闭后运行一次完整代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48564402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com