There are two files scene2.lua and scene3.lua. When i click on back button[scene3.lua] second time, the extraText and gameOver display objects won't destroy completely. They showup in scene2.lua ,on going back to scene2. Help me fix the bug please!! I have shared scene3.lua file only.
local physics = require("physics")
local composer = require( "composer")
local scene = composer.newScene()
local kineticEnergy
local potentialEnergy
local height
local gameOver
local timer1
local timer2
local timer3
local timer4
local backBtn
local textback
local extraText
function scene:create()
local sceneGroup = self.view
soundEffect = audio.loadSound( "bowling1.wav")
mybg = display.newImage("bg.png")
mybg.x = 480 * 0.5
mybg.y = 320 * 0.5
path = display.newRect(200, 330, 600, 200)
path:setFillColor( 0.3, 0.3, 0.3 )
path.rotation = 15
rightWall = display.newRect( 500, 300, 20, 300 )
road = display.newRect( 0, 0, 500, 10 )
road.x = display.contentCenterX
road.y = display.contentCenterY * 1.5
road:setFillColor( 0.3, 0.3, 0.3 )
road.rotation = 15
myrect = display.newRect(61, 160, 95, 25)
myrect:setFillColor( 0.54, 0.03 ,0.31 )
myrect.rotation = 15
wheelFront = display.newCircle( 32, 166, 12 )
wheelFront:setFillColor(1, 0.72, 0.75)
wheelRear = display.newCircle( 82, 179, 12 )
wheelRear:setFillColor(1, 0.72, 0.75)
text1 = display.newText("K.E", 200, 100, "Eraser", 25)
text1:setFillColor( 1,0,0 )
text2 = display.newText("P.E", 340, 100, "Eraser", 25)
text2:setFillColor( 1,0,0 )
text3 = display.newText("Height ", 70, 295, "Eraser", 20)
text3:setFillColor( 1,1,1 )
text3:toFront( )
text4 = display.newText("Velocity ", 70, 250, "Eraser", 20)
text4:setFillColor( 1,1,1 )
startGame = display.newText( "TAP TO START", 250, 180, "KG Happy Solid", 30 )
startGame:setFillColor( 0.86, 0.07, 0.20 )
backBtn = display.newRoundedRect( 250, 300, 100, 30, 5 )
backBtn:setFillColor( 0.8, 0.2, 0 )
backBtn.isVisible = false
textback = display.newText( "Back" , 250, 301, "Eraser", 20 )
textback:setFillColor( 1, 1, 1 )
textback.isVisible = false
sceneGroup:insert( mybg )
sceneGroup:insert( path )
sceneGroup:insert(rightWall)
sceneGroup:insert(road)
sceneGroup:insert(myrect)
sceneGroup:insert(wheelFront)
sceneGroup:insert(wheelRear)
sceneGroup:insert(text1)
sceneGroup:insert(text2)
sceneGroup:insert(text3)
sceneGroup:insert(backBtn)
sceneGroup:insert(textback)
sceneGroup:insert(startGame)
sceneGroup:insert(text4)
--sceneGroup:insert(extraText)
--sceneGroup:insert(soundEffect)
--sceneGroup:insert(playBtn)
--sceneGroup:insert(textPlay)
end
function scene:show(event)
local sceneGroup = self.view
local phase = event.phase
if phase == "did" then
composer.removeScene("scene2")
physics.start()
function playGame(event)
numTaps = event.numTaps
if numTaps == 2 then
--if event.phase == "ended" then
audio.play( soundEffect )
display.remove(startGame)
startGame = nil
physics.setGravity( 0, 9.8)
physics.addBody(rightWall, "static")
physics.addBody( road, "static", {groupIndex = -1} )
physics.addBody( myrect, "dynamic", {density = 2, groupIndex = -1} )
physics.addBody( wheelFront, "dynamic", {density =10, radius = 12, groupIndex = -1})
physics.addBody(wheelRear,"dynamic", {density=10, radius = 12, groupIndex = -1})
local LeftwheelJoint = physics.newJoint( "pivot", myrect, wheelFront, 32, 166)
local RightwheelJoint = physics.newJoint( "pivot", myrect, wheelRear , 82, 179)
LeftwheelJoint.isMotorEnabled = true
LeftwheelJoint.motorSpeed = 200
RightwheelJoint.isMotorEnabled = true
RightwheelJoint.motorSpeed = 200
--LeftwheelJoint.maxMotorTorque = 1000
--RightwheelJoint.maxMotorTorque = 1000
function energyFirst()
if(extraText) then
extraText.parent:remove( extraText )
--print("K.E medi removed")
end
extraText = nil
local options = {
text = "As the cart rolls down the hill from its elevated position, its mechanical energy is transformed from potential energy to kinetic energy.",
x = display.contentCenterX,
y = 50,
fontSize = 18,
font = "Eraser",
width = 480,
height = 0,
align = "center"
}
extraText = display.newText( options)
--extraText.font = native.newFont("Eraser")
extraText:setFillColor( 0.54, 0.03 ,0.31 )
if(kineticEnergy) then
kineticEnergy.parent:remove( kineticEnergy )
--print("K.E medi removed")
end
if (potentialEnergy) then
potentialEnergy.parent:remove( potentialEnergy )
--print("p.E medi removed")
end
if (height) then
height.parent:remove( height )
--print("p.E medi removed")
end
if (velocity) then
velocity.parent:remove( velocity)
--print("p.E medi removed")
end
kineticEnery = nil
potentialEnergy = nil
height = nil
velocity = nil
kineticEnergy = display.newText("zero", 250, 100, "Eraser", 20)
potentialEnergy = display.newText("Maximum", 410, 100, "Eraser", 20)
height = display.newText("2 ", 120, 295, "Eraser", 20)
velocity = display.newText("1 ", 120, 250, "Eraser", 20)
end
function energySecond()
if(kineticEnergy) then
kineticEnergy.parent:remove( kineticEnergy )
-- print("K.E zero removed")
end
if (potentialEnergy) then
potentialEnergy.parent:remove( potentialEnergy )
--print("p.E max removed")
end
if (height) then
height.parent:remove( height )
--print("p.E medi removed")
end
if (velocity) then
velocity.parent:remove( velocity)
--print("p.E medi removed")
end
velocity = nil
kineticEnery = nil
potentialEnergy = nil
height = nil
--print(kineticEnergy)
--print(potentialEnergy)
kineticEnergy = display.newText("MidValue", 270, 100, "Eraser", 20)
potentialEnergy = display.newText("MidValue", 410, 100, "Eraser", 20)
height = display.newText("1 ", 120, 295, "Eraser", 20)
velocity = display.newText("2 ", 120, 250, "Eraser", 20)
end
---------
function energyThird()
if(kineticEnergy) then
kineticEnergy.parent:remove( kineticEnergy )
--print("K.E medi removed")
end
kineticEnergy = nil
if (potentialEnergy) then
potentialEnergy.parent:remove( potentialEnergy )
--print("p.E medi removed")
end
potentialEnergy = nil
if (height) then
height.parent:remove( height )
--print("p.E medi removed")
end
height = nil
if (velocity) then
velocity.parent:remove( velocity)
--print("p.E medi removed")
end
velocity = nil
--kineticEnery = nil
--potentialEnergy = nil
--height = nil
--print(kineticEnergy)
--rint(potentialEnergy)
kineticEnergy = display.newText("Maximum", 270, 100, "Eraser", 20)
potentialEnergy = display.newText("Zero", 400, 100, "Eraser", 20)
height = display.newText("0 ", 120, 295, "Eraser", 20)
velocity = display.newText("0 ", 120, 250, "Eraser", 20)
gameOver = display.newText( "GAME OVER", 250, 180, "KG Happy Solid", 30 )
gameOver:setFillColor( 0.86, 0.07, 0.20 )
end
function energyForth()
if(extraText) then
extraText.parent:remove( extraText )
--print("K.E medi removed")
end
extraText = nil
local options = {
text = "The amount of potential energy loss equals the amount of kinetic energy gained.",
x = display.contentCenterX,
y = 50,
fontSize = 18,
font = "Courier New",
width = 480,
height = 0,
align = "center"
}
extraText = display.newText(options)
extraText:setFillColor( 0.54, 0.03 ,0.31 )
if(kineticEnergy) then
kineticEnergy.parent:remove( kineticEnergy )
--print("K.E medi removed")
end
kineticEnergy = nil
if (potentialEnergy) then
potentialEnergy.parent:remove( potentialEnergy )
--print("p.E medi removed")
end
potentialEnergy = nil
if (height) then
height.parent:remove( height )
--print("p.E medi removed")
end
height = nil
if (velocity) then
velocity.parent:remove( velocity)
--print("p.E medi removed")
end
velocity = nil
--[[ if (gameOver) then
gameOver.parent:remove( gameOver)
--print("p.E medi removed")
end]]--
--gameOver = nil
backBtn.isVisible = true
textback.isVisible = true
end
-------calling functions----
timer1 = timer.performWithDelay(200, energyFirst, 1)
timer2 = timer.performWithDelay(1500, energySecond, 1)
timer3 = timer.performWithDelay(2500, energyThird, 1)
timer4 = timer.performWithDelay( 3100, energyForth, 1 )
------
end
end
function showScreen2(event)
if event.phase == "ended" then
composer.gotoScene("scene2")
backBtn:removeEventListener( "touch", showScreen2 )
end
end
function showScreen3(event)
if event.phase == "ended" then
composer.gotoScene("scene3", "fade", 500)
playBtn:removeEventListener( "touch", showScreen3)
end
end
backBtn:addEventListener( "touch", showScreen2 )
Runtime:addEventListener("tap", playGame)
--playBtn:addEventListener( "touch", showScreen3 )
end
end
function scene:hide(event)
local sceneGroup = self.view
local phase = event.phase
if phase == "will" then
physics.stop()
timer.cancel( timer1 )
timer.cancel( timer2 )
timer.cancel( timer3 )
timer.cancel( timer4 )
--end
elseif phase == "did" then
--display.remove( gameOver )
display.remove( extraText )
extraText = nil
end
end
function scene:destroy(event)
print("Destroyed Game OVER")
display.remove( kineticEnergy )
kineticEnergy = nil
display.remove( potentialEnergy )
potentialEnergy = nil
display.remove( height )
height = nil
display.remove( velocity )
velocity = nil
-- display.remove( gameOver )
--gameOver = nil
-- gameOver.isVisible = false
display.remove( extraText )
extraText = nil
display.remove(sceneGroup)
sceneGroup = nil
audio.dispose( soundEffect )
soundEffect = nil
display.remove(gameOver)
gameOver = nil
end
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "hide", scene )
scene:addEventListener( "destroy", scene )
return scene
Your Code:
--sceneGroup:insert(extraText)
You need to insert it into the sceneGroup for it to get handled automatically. You commented out this insertion, thus not allowing composer to handle the object.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.