【问题标题】:Is there a way to make delays in a for on LibGDX?有没有办法让 LibGDX 上的 for 延迟?
【发布时间】:2021-09-11 22:35:27
【问题描述】:

我正在尝试创建一款类似于经典 Simon Says 的游戏。我在屏幕上放置了一系列按钮,为了向用户展示他必须介绍的顺序,我想按顺序切换它们。我是 android 和 Libgdx 的新手,正在寻找解决方案,我发现了类似的东西:

for (i in 0 until array.size) {
    array[i].toggle()
    Timer.schedule(object : Timer.Task() {
        override fun run() {
        array[i].toggle()
        }
    }, delay)
}

由于计时器与线程一起工作,或者至少我是这么认为的,所以这不能正常工作,有什么建议吗?

提前致谢。

【问题讨论】:

    标签: android-studio for-loop kotlin timer libgdx


    【解决方案1】:

    计时器是在不阻塞渲染线程的情况下运行未来任务的正确方法。您可能需要更具体地说明“无法正常工作”,因为我没有看到显示的代码有任何问题。如果数组在延迟期间发生突变,可能会出现问题。

    但是,由于每个项目的延迟是相同的,如果您创建一个迭代数组的计时器任务,垃圾收集器会更简单,更容易,如下所示:

    for (item in array) {
        item.toggle()
    }
    Timer.schedule(object : Timer.Task() {
            override fun run() {
                for (item in array) { 
                    item.toggle() 
                }
            }
        }, delay)
    

    或者更简洁:

    array.forEach(MyClass::toggle)
    Timer.schedule(object : Timer.Task() {
            override fun run() = array.forEach(MyClass::toggle)
        }, delay)
    

    如果您将 libGDX 与 Kotlin 一起使用,我强烈建议您使用 libktx library,这样您就可以用 Kotlin 风格编写更清晰的代码。比如使用libktx async,上面的代码就变成了:

    array.forEach(MyClass::toggle)
    schedule(delay) {
        array.forEach(MyClass::toggle)
    }
    

    【讨论】:

    • 首先感谢您的回答。实际上我需要它来“阻塞”渲染线程,我会尝试更好地表达自己:我需要显示按钮切换的顺序。切换一个,等待一秒钟,然后切换下一个,因此用户可以将其视为一个序列。显示的代码实际上有效,但同时切换它们。关于你的 libktx 库,再次感谢你向我展示它。
    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多