如何删除同一变量名

时间:2016-05-22 18:59:38

标签: lua corona displayobject

这是我开始的代码:

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到来时在重新启动之后,它们会与上一轮中的那些碰撞,即使最后一个不再可见,它们看起来是不可见的a =但仍然与新的碰撞。

1 个答案:

答案 0 :(得分:0)

通过将所有特朗普(lol)存储在您创建每个对象的同一变量中,然后,下一步,通过将连接与另一个对象相关联来删除与之相关的连接,因此第一个对象仍然存在,但你不能再达到它了。

collectgarbage()的单个调用可能会起作用(不确定),因为垃圾收集器的作用是消除任何与之无关的对象,但我不确定它是否可行与您的对象类型,所以这是标准的方法。

如果您不想用第二个对象替换第一个对象的连接,则需要大量不同的变量(trump1, trump2... trump100),或者更好的是,可以容纳更多变量的单个数据结构而不是一个变量。

即表格。

所以你应该初始化那个表:

allTrumps = {}

然后,在startGame函数中,不是将新对象存储在myTrump中,而是向表中添加一个新字段来保存该对象:

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

你在做什么是检查你的桌子的长度(或其中的物体数量)并将物体存放在下一个位置。

如果你想删除特朗普,你可以从你添加的第一个或最后一个特朗普开始。我们将从最后开始做到简洁。

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

end

这将删除您创建的最后一个特朗普,因此该表将包含一个较少的对象,大小将减少一个,您可以再次调用该函数以删除另一个特朗普。