簡體   English   中英

如何在同一變量名下刪除一個對象的副本

[英]How to remove copies of one object under the same variable name

這是我開始的代碼:

numTrumps=100

  local function startGame()
    myTrump=display.newImageRect("tp.png",25,25)
     myTrump.x=Random(50,_W-50)
     myTrump.y=(_H+10)
     physics.addBody(myTrump,"dynamic",{density=.1,friction=0,bounce=.9,radius=9})

    function myTrump:touch(event)

    if(timeLeft~=false) then

        if (playerReady==true) then
            if(event.phase=="ended") then
            removeTrumps(self)
        end

    end
end
end
        myTrump:addEventListener("touch",myTrump)

trumps=trumps+1

if(trumps==numTrumps) then
    gameTimer=timer.performWithDelay(1000,countDown,totalTime)
else

    playerReady=false
end
end



  local gameTimer=timer.performWithDelay(20,startGame,numTrumps)


local function Restart(event)
    if "began"==event.phase then 

if(timeLeft~=false) then

    timer.cancel(gameTimer)
     gameTimer1=timer.performWithDelay( 20, ByeTrump, 96)

    end

end
        if "moved"==event.phase then

end
            if "ended"==event.phase then

            composer.gotoScene("restarttest")

            end
        end


function ByeTrump()
    display.remove(myTrump)
end

所以基本上startGame函數重復100次,因為numTrumps = 100所以每次創建同一個對象(myTrump)的新圖像。 一旦我重新啟動我想刪除該對象的副本,所以我做了一個函數(ByeTrump),其中一個myTrump被刪除,我通過重新啟動功能使另一個游戲時間重復了96次。 為了測試目的,我讓96消失而不是100,但是在我的游戲中你有20秒可以觸摸盡可能多的100個myTrumps,一旦觸摸它們就會消失。一次20秒就可以了,你不能再觸摸它們所以你必須重新開始。

所以我的問題是,當我點擊重新啟動時,只有一個myTrump消失而不是剩余的99個(我在20秒內沒有觸及任何myTrumps用於測試目的)。所以當新的100 myTrumps在重新啟動后出現時它們會與從上一輪開始,即使最后一輪不再可見,它們看起來是不可見的但是仍然與新的相撞。

通過將所有特朗普(lol)存儲在您創建每個對象的同一變量中,然后,下一步,通過將連接與另一個對象相關聯來刪除與之連接,因此第一個對象仍然存在,但是不能再達到它了。

可能只有一次對collectgarbage()調用(不確定),因為垃圾收集器所做的是消除任何與你沒有任何連接的對象,但我不確定它是否適用於你的對象類型,所以這是標准的方法。

如果您不想用第二個對象替換第一個對象的連接,則需要大量不同的變量( trump1, trump2... trump100 ),或者更好的是,單個數據結構可以容納多個一個變量。

就是表格。

所以你應該初始化那個表:

allTrumps = {}

然后,在startGame函數中,不是將新對象存儲在myTrump中,而是向表中添加一個新字段來保存該對象:

allTrumps[#allTrumps + 1] = display.newImageRect(...)

你在做什么是檢查表的長度(或其中的對象數)並將對象存儲在下一個位置。

當你想要刪除王牌時,你可以從你添加的第一個或最后一個王牌開始。 我們將從最后開始做到簡潔。

function ByeTrump()
    display.remove(allTrumps[#allTrumps])

end

這將刪除您創建的最后一個特朗普,因此該表將包含一個較少的對象,大小將減少一個,您可以再次調用該函數以刪除另一個特朗普。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM