从表中移除已取消的定时器,以避免出现“警告: 定时器.pause不能暂停已过期的定时器id”。

在 Corona SDK 中,我正在尝试从表中删除取消的计时器,以避免接收终端警告:

audio.pause/resume 不能暂停/恢复已经过期的计时器。

(经过一段时间,它们积累成了很多!)

我可以在计时器函数的末尾使用以下代码来删除触发一次或多次的计时器:

for k,v in pairs ( timers ) do
  if ( v == e.source ) then
    table.remove ( timers, k )
    print ( "Complete: "..k, e.source, #timers )
  end
end

(这将检查表中的计时器是否与发送函数的计时器相同,如果相同则将其删除)

如果计时器多次触发但不会永远持续,那么可以检查它已经执行的次数,然后调用上述循环。

我无法弄清楚如何在取消计时器时执行此操作,因此,如果我取消表中的某个计时器,则想将其从该表中删除,但无法这样做,因为顺序已经被其他计时器删除/过期等弄乱。请有人帮帮我!

(另外,我想知道苹果/谷歌是否会因为出现这些终端警告而拒绝一个应用程序?我猜如果游戏使用了很长时间,那么会有大量这些警告出现,这不专业?)

点赞
用户1925928
用户1925928

尝试这个:

local i = 1
for k,v in pairs (timers) do
    if (v == e.source) then
        table.remove(timers, i)
    else
        i = i + 1
    end
end

下面是它的工作原理。你在循环 timers 表的 k 元素。你从索引号为 1 的元素开始。如果相等于 e.source,那么你删除它并从 i=1 的元素重新开始。这是因为之前的第1个元素已经被删除了,所以之前的第2个元素现在是第1个元素。但是如果 v 不等于 e.source,那么你就保留它在第1个索引上,并开始检查第2个元素,一直到找到它与 e.source 再次不相等。

2014-05-30 18:58:44