【问题标题】:force corona sdk to render in a loop强制corona sdk循环渲染
【发布时间】:2014-08-26 13:17:01
【问题描述】:

在循环中,我更改了文本字段的文本。但是直到循环完成,电晕才会渲染。是否可以在循环内强制渲染?

我已尝试使用 display.setDrawMode("forceRender") 并在循环中进行睡眠,但这没关系。我正在尝试做一个更新的进度条。

【问题讨论】:

  • 考虑使用类似“local progressTimer = timer.performWithDelay(1000, updateProgress, -1)”之类的东西,而不是使用循环,并让 updateProgress 函数负责更新进度条。

标签: lua coronasdk


【解决方案1】:

Corona 仅在您的事件处理程序之间呈现。当您的处理程序循环时,Corona 无法更新显示。基本上,处理程序中影响显示的所有命令只有在处理程序将控制权返回给 Corona 后才会生效。因此,如果您想在文本字段中重复显示值更改,则不能使用循环,只有对值的最后一次更改才会在显示上可见,并且只有在返回后才会显示。

因此,您需要使用 Corona 的一种机制来使更新再次发生。比如你可以监听RuntimeenterFrame事件;在那里,确定是否是时候更新值和/或文本字段并采取相应措施。如果这导致更新过多(每秒 30 或 60 次),那么另一种方法是安排稍后更新文本字段,正如 Frozire 所建议的那样:

function updateValueDisplayed()
    ...compute new value...
    ...if changed, update the display object that shows the value...
end

timer.performWithDelay( 500, updateValueDisplayed, -1 )

上面会每秒调用两次updateValueDisplayed,直到你退出。如果每次延迟都不同,或者应该在某些条件下停止,那么您可以只performWithDelay 一次(删除第三个调用参数)并根据需要从updateValueDisplayed 中调用timer.performWithDelay( delay, updateValueDisplayed)

澄清:您不能使用for 循环。只能使用重复的函数调用,上面介绍了两种方式。

【讨论】:

  • 谢谢你的回答,我都试过了,但都不管用。然后 enterframe 函数更新,但一旦循环开始,更新函数就会保持并在循环结束后直接开始更新。它就像电晕只使用一个线程。
  • 是的,Corona 只在一个“线程”上运行。您不必创建一个新循环来持续处理 updateValueDisplayed() 函数内的更新。取而代之的是 updateValueDisplayed() 函数成为您的循环,该函数被连续调用。因此,您将循环中的逻辑放入此函数中。
猜你喜欢
  • 2018-04-26
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多