删除所有衍生的硬币

时间:2014-02-18 18:15:23

标签: lua corona

游戏结束后删除所有衍生硬币的最佳方法是什么?

以下是产生硬币的代码:

 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 )

1 个答案:

答案 0 :(得分:1)

首先,您将从显示屏中删除所有硬币。然后你将清除coin表:

for i=1,#coin do 
    coin[i]:removeSelf()
end
coin = {}  -- forget all coins

假设coin表是您存储硬币的唯一其他地方,这样就可以了。

请注意,在coin[i]=nil之后的循环中不能使用removeSelf:一旦表有漏洞,#​​运算符基本上无法使用。你不能使用table.remove,因为我每次都会增加,所以你会错过项目(试试,你会看到)。对的问题相同:在迭代时不能编辑表。但是你可以这样做:

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

我能想到的唯一原因是,如果你的硬币表有多个引用(我会重命名为硬币),而不是让gc用一个table = {}语句来处理它,顺便说一句,为清楚起见)。