gpt4 book ai didi

Javafx - 如何延迟在文本区域中显示新行?

转载 作者:行者123 更新时间:2023-11-30 02:27:58 25 4
gpt4 key购买 nike

所以我得到了我正在编码的这个新游戏。长话短说,我的 GUI 中有一个文本区域,充当事件显示器。当你与怪物战斗时,此文本区域用于显示文本行,例如“你对骷髅造成 3 点伤害”或“骷髅对你施放火球并击中你造成 5 点伤害”。

该代码的工作方式是让怪物在你身后攻击。因此,一旦您点击“攻击”按钮,说明您做了什么的行和说明怪物做了什么的行就会同时出现在文本区域中。就像怪物在你击中它之后就能以光速击中你一样。

我想做的是延迟怪物线路的显示。这样,当我点击“攻击”按钮时,文本区域会显示我所做的行,然后稍等一下,然后显示怪物的行。

我尝试使用 Thread.sleep() 方法,但它所做的只是将 UI 暂停 1 秒,然后两行都出现在文本区域中。

private void attackBareFists() {

if (initPJ > enemyINIT) { // Player has more initiative ->
// Player attacks first
turnPlayerBareFists(); // This method will display the player's line

if (!endTurn()) { // endTurn() checks that the player or the monster
// are still alive before continuing the fight
delay();
turnMonster(); // This method will display the monster's line
endTurn();
}
} ... // The code continues, but it's the same as above except monster attacks first
}

/**
* Wait for some time
*/
private void delay(){

}

我应该在delay()中放入什么?这是我尝试过 Thread.sleep(1000) 的地方。正如我所说,这样做会导致turnPlayerBareFists() 和turnMonster() 的代码在delay() 之后执行。任何帮助将不胜感激。

最佳答案

我认为实现此目的更好/更一致的方法是使用计时器。尽管 javafx 本身提供了多种定时事件机制,但您可以使用任何 java 实现。

一种方法是时间线

Timeline timeline = new Timeline(new KeyFrame(
Duration.millis(1000),
ae -> doSkellyTurn()),
new KeyFrame(
Duration.millis(1000 + 1000), // as mentioned by fabien, the time offset is relative to the 'start()' method, not to its previous keyframe!
ae -> endSkellyTurn()));
timeline.play();

上面的方式也是javafx animations (as you can read in the documentation)的基础

This blog显示了如何完成定时任务的更多示例。 (Ps.它也使用reactFX!)

关于Javafx - 如何延迟在文本区域中显示新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45130853/

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