【问题标题】:First scene won't disappear when second scene is called. Lua调用第二个场景时,第一个场景不会消失。卢阿
【发布时间】:2015-11-18 14:00:46
【问题描述】:

我正在尝试调用我的第二个场景并让第一个场景完全消失。第二个场景中的对象正在出现,但它们与第一个场景中的对象重叠。我尝试手动调用 scene.hide() 和 scene.destroy() 函数,并且我还尝试将对象添加到组中。奇怪的是,有些对象在添加到组时是不可见的,但其他对象是可见的。请帮忙!另外,抱歉,只有部分代码在单独的框中,但我不知道如何修复它!

function scene:create( event )
    local sceneGroup = self.view

    display.setStatusBar( display.HiddenStatusBar )

    local group = display.newGroup()


    -------Set up green buttons
    local greenButton3=display.newImageRect("images/green-unclicked.png", 520,60)
    greenButton3.x=display.contentCenterX
    greenButton3.y=(970)
    greenButton3.button = 1

    local greenButton2=display.newImageRect("images/green-unclicked.png", 520,60)
    greenButton2.x=display.contentCenterX
    greenButton2.y=(870)
    greenButton2.button = 2

    local greenButton1=display.newImageRect("images/green-unclicked.png", 520,60)
    greenButton1.x=display.contentCenterX
    greenButton1.y=(770)
    greenButton1.button = 3
    --------SET UP RED BUTTONS
    local redButton1=display.newImageRect("images/red-dim.png",520,60)
    redButton1.x=display.contentCenterX
    redButton1.y=(40)
    local redButton2=display.newImageRect("images/red-dim.png",520,60)
    redButton2.x=display.contentCenterX
    redButton2.y=(140) 

    local redButton3=display.newImageRect("images/red-dim.png",520,60)
    redButton3.x=display.contentCenterX
    redButton3.y=(240)

    ---------------TEXT
    ---Questions
    local question1green=display.newText("How are you feeling?", 0,0,native.systemFontBold, 40)
    question1green.x=display.contentCenterX
    question1green.y=(705)

    local question1red=display.newText("The other person is feeling...", 0,0,native.systemFontBold, 40)
    question1red.x=display.contentCenterX
    question1red.y=(300)
    question1red.rotation = 180

    ---Answers
    --Green
    local answer1green=display.newText("Sad",0,0,native.systemFontBold, 40)
    answer1green.x=display.contentCenterX
    answer1green.y=(773)

    local answer2green=display.newText("Angry",0,0,native.systemFontBold, 40)
    answer2green.x=display.contentCenterX
    answer2green.y=(870)

    local answer3green=display.newText("I don't know",0,0,native.systemFontBold, 40)
    answer3green.x=display.contentCenterX
    answer3green.y=(973)

    --Red
    local answer1red=display.newText("Sad",0,0,native.systemFontBold, 40)
    answer1red.x=display.contentCenterX
    answer1red.y=(238)
    answer1red.rotation = 180

    local answer2red=display.newText("Angry",0,0,native.systemFontBold, 40)
    answer2red.x=display.contentCenterX
    answer2red.y=(141)
    answer2red.rotation = 180

    local answer3red=display.newText("Confused",0,0,native.systemFontBold, 40)
    answer3red.x=display.contentCenterX
    answer3red.y=(38)
    answer3red.rotation = 180

    --------CREATE EMPTY BODY OUTLINE
    local bodyOutline=display.newImageRect("images/bodyoutline.png", 380,560)
    bodyOutline.x=display.contentCenterX 
    bodyOutline.y=display.contentCenterY-10
    bodyOutline.rotation = 270

    --------move text to front after new buttons are created
    function moveTextToFront (event)
        answer1green:toFront()
        answer2green:toFront()
        answer3green:toFront()
        answer1red:toFront()
        answer2red:toFront()
        answer3red:toFront()
    end

    ------------------------------------------------------------
        --When the Buttons are Clicked
    ------------------------------------------------------------

    local function buttonClicked (event)
        print("here")
        --[[function destroyAll (event)
            greenButton1:removeSelf()
            greenButton1 = nil
            greenButton2:removeSelf()
            greenButton2 = nil
            greenButton3:removeSelf()
            greenButton3 = nil
            redButton1:removeSelf()
            redButton1 = nil
            redButton2:removeSelf()
            redButton2 = nil
            redButton3:removeSelf()
            redButton3 = nil
            print("destroyed")

            question1green:removeSelf()
            question1green = nil
            question1red:removeSelf()
            question1red = nil
            answer1green:removeSelf()
            answer1green = nil
            answer2green:removeSelf()
            answer2green = nil
            answer3green:removeSelf()
            answer3green = nil
            answer1red:removeSelf()
            answer1red = nil
            answer2red:removeSelf()
            answer2red = nil
            answer3red:removeSelf()
            answer3red = nil
            --]]
        --end
        --destroyAll()
        ------------------------------------------------------------
        --Start of Results Creation (SETUP)
        ------------------------------------------------------------
        function createGray1 (event)
            local gray1=display.newImageRect("images/grayRSU.png",520,60)
            gray1.x=display.contentCenterX
            gray1.y=(970)
        end

        function createGray2 (event)
            local gray2=display.newImageRect("images/grayRSU.png",520,60)
            gray2.x=display.contentCenterX
            gray2.y=(870)
        end

        function createGray3 (event)
            local gray3=display.newImageRect("images/grayRSU.png",520,60)
            gray3.x=display.contentCenterX
            gray3.y=(770)
        end

        function createGray4 (event)
            local gray4=display.newImageRect("images/grayUD.png",520,60)
            gray4.x=display.contentCenterX
            gray4.y=(240)
        end

        function createGray5 (event)
            local gray5=display.newImageRect("images/grayUD.png",520,60)
            gray5.x=display.contentCenterX
            gray5.y=(140)
        end

        function createGray6 (event)
            local gray6=display.newImageRect("images/grayUD.png",520,60)
            gray6.x=display.contentCenterX
            gray6.y=(40)
        end

        function firstClicked (event)
            local greenClicked1=display.newImageRect("images/green-clicked.png",520,60)
            greenClicked1.x=display.contentCenterX
            greenClicked1.y=(970)

            local redClicked1=display.newImageRect("images/red-clicked.png",520,60)
            redClicked1.x=display.contentCenterX
            redClicked1.y=(240)
        end

        function secondClicked (event)
            local greenClicked2=display.newImageRect("images/green-clicked.png",520,60)
            greenClicked2.x=display.contentCenterX
            greenClicked2.y=(870)

            local redClicked2=display.newImageRect("images/red-clicked.png",520,60)
            redClicked2.x=display.contentCenterX
            redClicked2.y=(140)
        end

        function thirdClicked (event)
            local greenClicked3=display.newImageRect("images/green-clicked.png",520,60)
            greenClicked3.x=display.contentCenterX
            greenClicked3.y=(770)

            local redClicked3=display.newImageRect("images/red-clicked.png",520,60)
            redClicked3.x=display.contentCenterX
            redClicked3.y=(40)
        end
        ------------------------------------------------------------
        --End of Results Creation (SETUP)
        ------------------------------------------------------------
        --local function sceneDone (event)


        --end
            -------------------------
            --transition to next scene IN THIS FUNCTION
        if (event.target.button == 1) then
            greenButton1:removeSelf()
            greenButton1 = nil
            greenButton2:removeSelf()
            greenButton2 = nil
            greenButton3:removeSelf()
            greenButton3 = nil
            redButton1:removeSelf()
            redButton1 = nil
            redButton2:removeSelf()
            redButton2 = nil
            redButton3:removeSelf()
            redButton3 = nil
            firstClicked()
            createGray2()
            createGray3()
            createGray5()
            createGray6()
            --composer.removeScene("firstscene")

        end
        if (event.target.button == 2) then
            greenButton1:removeSelf()
            greenButton1 = nil
            greenButton2:removeSelf()
            greenButton2 = nil
            greenButton3:removeSelf()
            greenButton3 = nil
            redButton1:removeSelf()
            redButton1 = nil
            redButton2:removeSelf()
            redButton2 = nil
            redButton3:removeSelf()
            redButton3 = nil
            secondClicked()
            createGray1()
            createGray3()
            createGray4()
            createGray6()

            --composer.removeScene("firstscene")
        end
        if (event.target.button == 3) then
            greenButton1:removeSelf()
            greenButton1 = nil
            greenButton2:removeSelf()
            greenButton2 = nil
            greenButton3:removeSelf()
            greenButton3 = nil
            redButton1:removeSelf()
            redButton1 = nil
            redButton2:removeSelf()
            redButton2 = nil
            redButton3:removeSelf()
            redButton3 = nil
            thirdClicked()
            createGray1()
            createGray2()
            createGray4()
            createGray5()

            --composer.removeScene("firstscene")
        end
        moveTextToFront()
        composer.gotoScene("secondscene")
    end

    greenButton1:addEventListener("touch", buttonClicked)
    greenButton2:addEventListener("touch", buttonClicked)
    greenButton3:addEventListener("touch", buttonClicked)
end --end of images and stuff

function scene:show( event )
    local sceneGroup = self.view
    local phase = event.phase

    if phase == "will" then
        -- Called when the scene is still off screen and is about to move on screen
    elseif phase == "did" then
        -- Called when the scene is now on screen
        -- 
        -- INSERT code here to make the scene come alive
        -- e.g. start timers, begin animation, play audio, etc.
    end 
end

function scene:hide( event )
    local sceneGroup = self.view
    local phase = event.phase
        print("hidden2")
    if event.phase == "will" then
        -- Called when the scene is on screen and is about to move off screen
        --
        -- INSERT code here to pause the scene
        -- e.g. stop timers, stop animation, unload sounds, etc.)
    elseif phase == "did" then
        print("hidden")
        -- Called when the scene is now off screen
    end 
end

function scene:destroy( event )
    local sceneGroup = self.view

    -- Called prior to the removal of scene's "view" (sceneGroup)
    -- 
    -- INSERT code here to cleanup the scene
    -- e.g. remove display objects, remove touch listeners, save state, etc.

    if playBtn then
        playBtn:removeSelf()    -- widgets must be manually removed
        playBtn = nil
    end
end

---------------------------------------------------------------------------------

-- Listener setup
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "hide", scene )
scene:addEventListener( "destroy", scene )

-----------------------------------------------------------------------------------------

return scene

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    我在您的代码中看不到您将对象添加到sceneGroup (self.view)。确保将它们插入该组,例如 scneeGroup:insert( greenButton3 )

    更换场景时无需隐藏sceneGroup 中的对象,因为它们会被 Corona 自动隐藏。

    【讨论】:

      【解决方案2】:

      您必须将所有显示对象添加到场景组中。

      function scene:create( event )
      local sceneGroup = self.view
      
      display.setStatusBar( display.HiddenStatusBar )
      
      local group = display.newGroup()
      
      
      -------Set up green buttons
      local greenButton3=display.newImageRect("images/green-unclicked.png", 520,60)
      greenButton3.x=display.contentCenterX
      greenButton3.y=(970)
      greenButton3.button = 1
      sceneGroup :insert(greenButton3)
      end 
      

      尝试将所有文​​本对象都添加到场景组中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多