Lua在循环期间更新屏幕

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua在循环期间更新屏幕相关的知识,希望对你有一定的参考价值。

我正在为屏幕上的角色编写一个函数来跟踪标记的路径。我想遍历该角色的所有标记,并更新每个标记的显示。现在发生的事情是显示只在迭代结束时更新一次。根据一些常见问题解答,看起来lua的设计就是这样工作的。那么在卢阿完成渐进运动的最佳方法是什么?

local function follow_movement_path (moving_char)
    these_markers = moving_char.move_markers
    for m, n in ipairs(these_markers) do
        this_marker = n
        moving_char.x = this_marker.x
        moving_char.y = this_marker.y
        print(this_marker.current_space.name)
        sleep(1)
    end
end 

提前感谢您的任何见解。

答案

这个blog给出了一个如何解决这个问题的例子。一个有趣的是coroutines(或here)approch。我们的想法是你仍然可以在你的例子中编写代码,但是在每次渲染之后你都会跳出循环,在屏幕上画画并继续你离开的确切位置。

看起来像这样:

local function follow_movement_path (moving_char)
    these_markers = moving_char.move_markers
    for m, n in ipairs(these_markers) do
        this_marker = n
        moving_char.x = this_marker.x
        moving_char.y = this_marker.y
        print(this_marker.current_space.name)
        coroutine.yield()
    end
end

local c = coroutine.create(follow_movement_path)
coroutine.resume(c)
draw_on_display()
coroutine.resume(c)

以上是关于Lua在循环期间更新屏幕的主要内容,如果未能解决你的问题,请参考以下文章

屏幕方向期间片段内的异步任务

安卓片段。在屏幕旋转或配置更改期间保留 AsyncTask

回归 | js实用代码片段的封装与总结(持续更新中...)

Kivy:标签文本在 for 循环期间不更新

Kivy:标签文本在for循环期间不会更新

在 Android 应用程序中使用 AsyncTask 在 for 循环期间更新 ProgressBar