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

标签 java javafx

所以我得到了我正在编码的这个新游戏。 长话短说,我的 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/

相关文章:

java.lang.NoSuchMethodError 通过 Spring 连接 mongoDb 时出错

java - 当缓冲区已满时,DataOutputStream 会自动刷新吗?

java - 如何使用 ADAL JS 颁发的隐式授权 token 从 Web API 访问图形 API

java - 枚举和字符串之间的映射?

java - 如何使用 jni 将数据从 java InputStream 移动到 C++ 中的 char *?

javafx StringConverter 最后一个对象

javafx 将 KeyTyped 的值存储在字符串中

java - 带有需要 java.time.Duration 的构造函数的自定义 JavaFX 组件

java - 从 JavaFX WebView 中的 Ace Editor 获取代码

java - 播放电影文件之前的 VLCJ Start-Time