清除所有已生成的硬币。

当游戏结束时,如何最好地移除所有生成的硬币?

以下是生成硬币的代码:

screenGroup = self.view
coin = {}
coinspawn = function()
    i = display.newSprite(imageSheet1, sequenceData1)

    i.x = display.contentWidth
    i.y = math.random(0, display.contentHeight-50)
    i:play()
    i.collided = true
    i.name = "coin"
    physics.addBody(i, "dynamic",
        {density=.1, bounce=0.1, friction=.2, shape=shape2, filter=playerCollisionFilter}
    )
    --player.gravityScale = 0.5
    coinIntro = transition.to(i, {time=2500, x=display.contentWidth - display.contentWidth - 500, onComplete=jetReady, transition=easing.OutExpo}) --
    coin[#coin+1] = i

end
tmrcoin = timer.performWithDelay(1000, coinspawn, 0)
点赞
用户869951
用户869951

首先,您需要将显示屏上的所有硬币移除。然后您需要清空 coin 表格:

for i=1,#coin do
    coin[i]:removeSelf()
end
coin = {}  --忘记所有硬币

假设 coin 表格是您存储硬币的唯一其它地方,这样就可以实现。

请注意,您无法在 removeSelf 后的循环中使用 coin[i]=nil:一旦表格中含有空洞,# 操作符就基本上无法使用。 您也不能使用 table.remove,因为每次 i 都会递增,所以您会错过一些项目(尝试一下,您会看到)。与 pairs 相同的问题:您不能在迭代过程中编辑表格。但是,您可以这样做:

local numCoins = #coin
for i=1,numCoins do
    coin[i]:removeSelf()
    coin[i]=nil
end
--现在 coin 是 {}

我能想到将 N 个项目赋值为 nil 而不是使用一个 table = {} 语句让 gc 处理它的唯一原因是,如果您有多个引用到硬币表的引用(我建议将其重命名为 coins,以清晰明了)。

2014-02-18 18:45:31