这是我开始的代码:
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 =但仍然与新的碰撞。
答案 0 :(得分:0)
通过将所有特朗普(lol)存储在您创建每个对象的同一变量中,然后,下一步,通过将连接与另一个对象相关联来删除与之相关的连接,因此第一个对象仍然存在,但你不能再达到它了。
对collectgarbage()
的单个调用可能会起作用(不确定),因为垃圾收集器的作用是消除任何与之无关的对象,但我不确定它是否可行与您的对象类型,所以这是标准的方法。
如果您不想用第二个对象替换第一个对象的连接,则需要大量不同的变量(trump1, trump2... trump100
),或者更好的是,可以容纳更多变量的单个数据结构而不是一个变量。
即表格。
所以你应该初始化那个表:
allTrumps = {}
然后,在startGame函数中,不是将新对象存储在myTrump中,而是向表中添加一个新字段来保存该对象:
allTrumps[#allTrumps + 1] = display.newImageRect(...)
你在做什么是检查你的桌子的长度(或其中的物体数量)并将物体存放在下一个位置。
如果你想删除特朗普,你可以从你添加的第一个或最后一个特朗普开始。我们将从最后开始做到简洁。
function ByeTrump()
display.remove(allTrumps[#allTrumps])
end
这将删除您创建的最后一个特朗普,因此该表将包含一个较少的对象,大小将减少一个,您可以再次调用该函数以删除另一个特朗普。