游戏结束后删除所有衍生硬币的最佳方法是什么?
以下是产生硬币的代码:
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 )
答案 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 = {}
语句来处理它,顺便说一句,为清楚起见)。