두 개의 파일 scene2.lua와 scene3.lua가 있습니다. [scene3.lua] 버튼을 다시 클릭하면 extraText 및 gameOver 표시 객체가 완전히 파괴되지 않습니다. 그들은 scene2로 돌아가는 장면 2.lua에서 보여줍니다. 버그 수정을 도와주세요! scene3.lua 파일 만 공유했습니다.루아에서 표시 객체를 파괴하는 방법?
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
http://docs.coronalabs.com/api/type/DisplayObject/removeSelf.html –