簡體   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