Composer:scene:show()被多次调用?

时间:2014-05-10 06:06:56

标签: lua corona

所以基本上我在使用Corona SDK中的Composer时遇到了问题。我有一个级别,当满足失败条件时,它会运行一个showOverlay命令,弹出一个Game Over overlay。我在scene:create()函数中为叠加创建了所有文本对象和按钮,并且工作正常。

问题是,我在print函数中放置了scene:show()语句,位于我的代码块中

if phase == "will" then end

文档声明scene:show仅被调用两次,一次用于“将”阶段,一次用于“确实”阶段。然而,我的打印声明正在打印到控制台,时间为14-20次。实际上,我之前已经注意到这一点,在其他情况下,似乎这些事件回调函数被触发的次数超过它们应该的次数。

我是否缺少必须做的事情或添加到这些回调函数以使它们运行适当的次数?

1 个答案:

答案 0 :(得分:1)

我发现了这个问题......

我有一个运行时“enterFrame”事件监听器,每个帧都运行一个函数。我对丢失条件的if语句是在这个函数中。 (如果livesRemaining == 0是实际情况)

在这个函数中,我删除了“enterFrame”事件监听器,然后运行composer.showOverlay()。然而,似乎即使我取消了“enterFrame”事件监听器,它仍然会在取消实际发生之前多次触发与其关联的功能。这使得看起来好像叠加的场景:show被多次调用。事实上它实际上是,但真正的原因是因为在运行时“enterFrame”事件监听器被实际取消之前,多次调用composer.showOverlay()函数。

我认为删除enterFrame事件侦听器会立即执行此操作,但我猜它会在实际执行之前等待几个周期。也许他们将在未来的某个时候解决这个问题,这样我们就不必使用变通方法来解决问题。