I have a character in my game that is made up of several parts. When each part collides with the platform it moves over it makes a dust trail.
The main problem is when I restart the level, the dust trail becomes thicker and thicker for each time, and the performance is getting worse and worse. The memory leakage is about 3kb each restart.
If I comment out the collision EventListener, all is good. No leakage, no performance problems. Clearly, something is not properly removed between scenes.
Could it be the transistion? No matter how im trying to remove the transistion in the function it will stop other transistions. Probably because it cant distinguish what transistion is what. So to properly distinguish all dust display objects should i insert them in a table? If so, could someone point me in the right direction?
I’m using composer with a restart level lua.
Dust making part in level lua
[lua]
llocal function ferdi()
display.remove(stov)
stov = nil
end
local tran
local function onCollision2(event)
if event.phase == “began” then
if (event.object1.type == “del1” and event.object2.type == “firkant1”) or
(event.object1.type == “del2” and event.object2.type == “firkant1”) or
(event.object1.type == “del3” and event.object2.type == “firkant1”) or
(event.object1.type == “del4” and event.object2.type == “firkant1”) or
(event.object1.type == “del5” and event.object2.type == “firkant1”) or
(event.object1.type == “del6” and event.object2.type == “firkant1”) or
(event.object1.type == “del7” and event.object2.type == “firkant1”) or
(event.object1.type == “del8” and event.object2.type == “firkant1”) or
(event.object1.type == “del9” and event.object2.type == “firkant1”) or
(event.object1.type == “del1” and event.object2.type == “firkant2”) or
(event.object1.type == “del2” and event.object2.type == “firkant2”) or
(event.object1.type == “del3” and event.object2.type == “firkant2”) or
(event.object1.type == “del4” and event.object2.type == “firkant2”) or
(event.object1.type == “del5” and event.object2.type == “firkant2”) or
(event.object1.type == “del6” and event.object2.type == “firkant2”) or
(event.object1.type == “del7” and event.object2.type == “firkant2”) or
(event.object1.type == “del8” and event.object2.type == “firkant2”) or
(event.object1.type == “del9” and event.object2.type == “firkant2”) or
(event.object1.type == “del1” and event.object2.type == “firkant3”) or
(event.object1.type == “del2” and event.object2.type == “firkant3”) or
(event.object1.type == “del3” and event.object2.type == “firkant3”) or
(event.object1.type == “del4” and event.object2.type == “firkant3”) or
(event.object1.type == “del5” and event.object2.type == “firkant3”) or
(event.object1.type == “del6” and event.object2.type == “firkant3”) or
(event.object1.type == “del7” and event.object2.type == “firkant3”) or
(event.object1.type == “del8” and event.object2.type == “firkant3”) or
(event.object1.type == “del9” and event.object2.type == “firkant3”) or
(event.object1.type == “del1” and event.object2.type == “firkant4”) or
(event.object1.type == “del2” and event.object2.type == “firkant4”) or
(event.object1.type == “del3” and event.object2.type == “firkant4”) or
(event.object1.type == “del4” and event.object2.type == “firkant4”) or
(event.object1.type == “del5” and event.object2.type == “firkant4”) or
(event.object1.type == “del6” and event.object2.type == “firkant4”) or
(event.object1.type == “del7” and event.object2.type == “firkant4”) or
(event.object1.type == “del8” and event.object2.type == “firkant4”) or
(event.object1.type == “del9” and event.object2.type == “firkant4”) then
local stov = display.newImageRect(“stov.png”, 20,20)
stov.width = 10+(math.random(10, 50))
stov.height = stov.width
stov.x = event.object1.x+(math.random(1, 10))
stov.y = event.object1.y-(math.random(1, 10))
rot = (math.random(1,360))
stov.alpha = 0.5
stov:rotate( rot )
grp:insert(stov)
camera:add (stov,1,false)
tran = transition.to (stov, {
x = stov.x - (math.random(-50, 50)),
y = stov.y - (math.random( 1, 50)),
width = stov.width + (math.random(1, 50)),
height = stov.height + (math.random(1, 50)),
alpha = 0,
time = 2000,
onComplete = ferdi
})
–[[
if tran ~= nil then
transition.cancel(tran)
end
–]]
return stov
end
end
end
Runtime:addEventListener(“collision”, onCollision2)
[/lua]
Function when the caracter “die”
[lua]
local function goto( event )
physics.pause( )
Runtime:removeEventListener(“collision”, onCollision)
Runtime:removeEventListener(“collision”, onCollision1)
Runtime:removeEventListener(“collision”, onCollision2)
composer.showOverlay( “dodmenu1”,{isModal = true,effect = “fade”,time = 500,})
end
[/lua]
Function when tapping restart button
[lua]
local function resume(event)
Runtime:removeEventListener( “touch”, trykk_knapp)
Runtime:removeEventListener( “tap”, trykk_knapp)
composer.gotoScene( “gotolevel1”,{effect = “fade” , time = 1})
pausemenu.alpha=0
physics.start()
liv.endreliv(1)
liv.lagreliv()
end
pausemenuretry:addEventListener (“touch”, resume)
[/lua]
gotolevel1 lua
[lua]
local function goto( event )
composer.gotoScene( “level1”,{effect = “fade” , time = 500})
end
– “scene:show()”
function scene:show( event )
local sceneGroup = self.view
local phase = event.phase
if ( phase == “will” ) then
elseif ( phase == “did” ) then
timer.performWithDelay( 1500, goto)
end
end
[/lua]