繁体   English   中英

删除所有产生的硬币

[英]remove all spawned coins

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

这是产生硬币的代码:

 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 )

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

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

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

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

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

我想到零个项目而不是让gc用一个table = {}语句处理它的唯一原因是,如果您对硬币表有多个引用(我将其重命名为硬币,BTW,对于明晰)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM