单击 myButton 后,运行 2 个线程。首先更改按钮图像,第二个 - 循环。我希望我的程序首先更改图像并在运行循环之后。但这不行,他们一瞬间就完蛋了。
myButton.setOnMouseClicked(event -> {
if (event.getButton() == MouseButton.PRIMARY) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
ImageView imageView = new ImageView(image);
imageView.setFitHeight(my_button_height - 16);
imageView.setFitWidth(my_button_width - 16);
myButton.setStyle("-fx-background-color: #ffffff00; ");
myButton.setGraphic(imageView);
}
});
thread.run();
try {
thread.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 15; i++){
System.out.println(i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
});
thread1.run();
}
});
}
我尝试添加.join。这没有帮助
使用 a
PauseTransition
而不是线程您不需要使用线程来实现您的要求。
问题是,在某些情况下,玩家行动后不会有暂停,因此玩家在翻回之前无法看到他们翻过的牌。
这可以使用 来修复
PauseTransition
。这个答案中解释了用法:例子
这是记忆游戏的一些示例代码。这个例子:
相关代码是片段:
这只是一个演示应用程序,尚未经过彻底测试,并且可能存在一些错误。该演示可能比需要的更复杂,它使用过滤列表来注册翻转的卡片,但可以通过仅几个对象属性来表示翻转的卡片来简化。
对于稍微复杂一点的应用程序(甚至是重构的应用程序),我建议使用一种更 MVC 风格的方法,其中游戏状态的建模和测试独立于 UI,但对于这个概念验证演示,下面的代码就这个目的来说是可以的。
希望它说明了一种使用该
PauseTransition
概念来解决与您遇到的问题类似的问题的方法。记忆游戏.java
瓦片.java
MemoryGameApp.java