0

ここでストーリーボードの問題を解決するために数時間を費やしました. それを複製するサンプル プロジェクトを削除しました。

問題:

  • シーン 1 からシーン 2 に移動し、シーン 1 に戻り、シーンを数回切り替えた後、次のようになります。
  • シーンに入ると、ログに複数の enterScene/exitScene がトリガーされていることが示されます
  • おそらく複数のバックグラウンド タッチ リスナーが登録されているようですが、exitScene 関数でこれらを削除しようとしています。
  • 試用版を使用しています: 2011.704 (2011.12.8)

出力

<code>
-- Click on background to go back to screen_example1

storyboard.gotoScene( screen_example1)
screen_example1: enterScene

storyboard.gotoScene( screen_example1)
screen_example1: exitScene
screen_example1: enterScene

storyboard.gotoScene( screen_example1)
screen_example1: exitScene
screen_example1: enterScene

storyboard.gotoScene( screen_example1)
screen_example1: exitScene
screen_example1: enterScene

.
.
.
etc
</code>

コード: 3 つのファイル: メイン ファイルと 2 つのシーン ファイル:

main.lua

<code>
display.setStatusBar( display.HiddenStatusBar )
local storyboard = require "storyboard"
storyboard.gotoScene( "screen_example1" )
</code>

screen_example1.lua

<code>
local storyboard =  require( "storyboard" )
local scene = storyboard.newScene()

local function onScreenTouch( event )
    if event.phase == "began" then
        print("")
        storyboard.gotoScene( "scene_towerView")  
    end
end


function scene:createScene( event )
    print ("screen_example1 - createScene")
    local image = display.newImage( "bg.jpg" )
    scene.view:insert( image )
end

function scene:enterScene( event )
    print ("screen_example1: enterScene")
    scene.view:addEventListener( "touch", onScreenTouch )
end

function scene:exitScene( event )
    print ("screen_example1: exitScene")
    scene.view:removeEventListener("touch", onScreenTouch)
end

-- Scene Listeners
scene:addEventListener( "createScene", scene )
scene:addEventListener( "enterScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )


return scene
</code>

scene_towerView.lua

<code>
local storyboard =  require( "storyboard" )
local scene = storyboard.newScene()

local function onScreenTouch( event )
    if event.phase == "began" then
        print("")
        print("storyboard.gotoScene( screen_example1)")
        storyboard.gotoScene( "screen_example1")
    end
end

-- Scene Handlers

function scene:createScene( event )
    print ("TowerScene - createScene")

    -- -- Background Image
    local image = display.newImage( "bg2.jpg" )
    scene.view:insert( image )
end

function scene:enterScene( event )
    print ("TowerScene - enterScene")
    scene.view:addEventListener( "touch", onScreenTouch )
end

-- Scene Listeners
scene:addEventListener( "createScene", scene )
scene:addEventListener( "enterScene", scene )
scene:addEventListener( "exitScene", scene )
scene:addEventListener( "destroyScene", scene )

return scene
</code>
4

1 に答える 1