强制 Corona SDK 在循环中进行渲染。

在循环中,我更改了文本字段的文本。但 corona 直到循环结束才会渲染。是否可以在循环中强制进行渲染?

我尝试过使用 display.setDrawMode(“forceRender”) 和在循环中休眠,但这没有任何影响。我正在尝试创建一个可以更新的进度条。

点赞
用户869951
用户869951

Corona 的渲染机制

在你的事件处理程序中间,Corona 只会进行渲染。如果你的处理程序出现了循环,Corona 就无法更新显示。在你的处理程序中,所有会影响显示的命令都只有在程序返回控制权给 Corona 后才会生效。如果你想在文本字段中反复显示数值的变化,你不能使用循环,只有在程序返回后最后一次变化的值才会在显示中出现。

因此,你需要使用 Corona 的一种机制来引发更新。例如,你可以监听 RuntimeenterFrame 事件,在其中判断是否应该更新数值和/或文本字段,并根据情况采取行动。如果这会导致太多更新(每秒 30 或 60 次),那么另一种方法就是为文本字段安排稍后的更新,就像 Frozire 建议的那样:

function updateValueDisplayed()
    ...计算新值...
    ...如果有变化,更新显示数值的显示对象...
end

timer.performWithDelay(500, updateValueDisplayed, -1)

上述代码每秒调用 updateValueDisplayed 两次,直到程序退出。如果延迟时间每次不同,或者在某些情况下应该停止,你可以只调用一次 performWithDelay(将第三个调用参数删除),在适当的情况下从 updateValueDisplayed 中调用 timer.performWithDelay(delay, updateValueDisplayed)

澄清:你不能使用 for 循环。你只能使用重复函数调用,上述两种方法均可。

2014-07-06 00:37:11