【问题标题】:Moving to next scene in Corona/LUA移动到 Corona/LUA 中的下一个场景
【发布时间】:2014-07-28 18:06:30
【问题描述】:

我在这方面已经有一段时间了,但我尝试的任何方法都不起作用。我正在努力做到这一点,所以当您按下playButton 时,场景会变为场景2。

代码如下:

local storyboard = require( "storyboard" )
local scene = storyboard.newScene()

---------------------------------------------------------------------------------
-- BEGINNING OF YOUR IMPLEMENTATION
---------------------------------------------------------------------------------

local image, playButton, helpButton, text3, memTimer
print("test")

-- Touch event listener for background image
local function onSceneTouch( self, event )
    if event.phase == "began" then

        storyboard.gotoScene( "scene2", "slideLeft", 800  )

        return true
        end
    end


-- Called when the scene's view does not exist:
function scene:createScene( event )

    local screenGroup = self.view

    image = display.newImage( screenGroup, "openingbackground.png" )
    image.x = _W * 0.5
    image.y = _H * 0.5
    screenGroup:insert( image )

    local playButton = display.newImage( "playbutton.png" )
    playButton.x = _H * 0.33
    playButton.y = _W * 0.90
    playButton.xScale = 0.5
    playButton.yScale = 0.5
    playButton.touch = onSceneTouch
    screenGroup:insert( playButton )


    local helpButton = display.newImage ("helpbutton.png")
    helpButton.x = _H * 0.33
    helpButton.y = _W * 1.1
    helpButton.xScale = 0.5
    helpButton.yScale = 0.5
    screenGroup:insert( helpButton )

    playButton:addEventListener("touch", playButton)


end


-- Called immediately after scene has moved onscreen:
function scene:enterScene( event )


end


-- Called when scene is about to move offscreen:
function scene:exitScene( event )

    print( "1: exitScene event" )

    -- remove touch listener for image
    image:removeEventListener( "touch", image )

    -- cancel timer
    timer.cancel( memTimer ); memTimer = nil;

    -- reset label text
    text2.text = "MemUsage: "
end


-- Called prior to the removal of scene's "view" (display group)
function scene:destroyScene( event )

    print( "1: destroyScene event" )
end

---------------------------------------------------------------------------------
-- END OF YOUR IMPLEMENTATION
---------------------------------------------------------------------------------

-- "createScene" event is dispatched if scene's view does not exist
scene:addEventListener( "createScene", scene )

-- "enterScene" event is dispatched whenever scene transition has finished
scene:addEventListener( "enterScene", scene )

-- "exitScene" event is dispatched before next scene's transition begins
scene:addEventListener( "exitScene", scene )

-- "destroyScene" event is dispatched before view is unloaded, which can be
-- automatically unloaded in low memory situations, or explicitly via a call to
-- storyboard.purgeScene() or storyboard.removeScene().
scene:addEventListener( "destroyScene", scene )

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

return scene

我得到的错误是:

Corona Runtime Error: ?:0? attempt to index a nil value stack traceback: ... Do you want to relaunch the project?

有人有什么想法吗?

【问题讨论】:

  • 你能在错误信息中提到的行上加一个标记吗(比如“-- 这是第 17 行”等)

标签: lua coronasdk corona-storyboard


【解决方案1】:

这是你需要做的:

-- Touch event listener for background image
local function playButtonTouched( event )
    storyboard.gotoScene( "scene2", {effect = "slideLeft", time = 800}  )
    return true
end

-- Called when the scene's view does not exist:
function scene:createScene( event )

    local screenGroup = self.view

    local playButton = display.newImage( "playbutton.png" )
    playButton.x = _H * 0.33
    playButton.y = _W * 0.90
    playButton.xScale = 0.5
    playButton.yScale = 0.5
    screenGroup:insert( playButton )

    playButton:addEventListener("tap", playButtonTouched)

end

这是您要完成的工作的干净版本。

【讨论】:

    【解决方案2】:

    尝试对您的代码执行此操作:

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

    -- main.lua


    local storyboard = require( "storyboard" )
    
    local scene = storyboard.newScene()
    

    --隐藏状态栏

    display.setStatusBar( display.HiddenStatusBar )
    

    -- 开始实施

    -- 背景图片的触摸事件监听器

    local function onSceneTouch(event)
    
    if event.phase == "began" then
    
        if event.target.id == "button1" then
    
            storyboard.gotoScene( "scene2", "slideLeft", 800  )
    
            return true
    
    
        end
    
    end
    
    end
    

    -- 场景视图不存在时调用

    function scene:createScene( event )
    
    print( "1: createScene event" )
    
    end
    

    -- 场景在屏幕上移动后立即调用:

    function scene:enterScene( event )
    
    local screenGroup = self.view
    
    local image = display.newImage( screenGroup, "openingbackground.png" )
    image.x = _W * 0.5
    image.y = _H * 0.5
    
    
    local playButton = widget.newButton
    {
        left = _H * 0.33,
        top = _W * 0.90,
        width = 60,
        height = 10,
        defaultFile = "playbutton.png",
        overFile = "playbutton.png",
        id = "button1",
        emboss = true,
        onEvent = onSceneTouch,
    
    }
    screenGroup:insert(playButton)
    
    
    local helpButton = widget.newButton
    {
        left = _H * 0.33,
        top = _W * 1.1,
        width = 60,
        height = 10,
        defaultFile = "helpButton.png",
        overFile = "helpButton.png",
        id = "button1",
        emboss = true,
        onEvent = onSceneTouch,
    
    }
    screenGroup:insert(helpButton)
    
    print( "1: enterScene event" )
    end
    

    -- 当场景即将移出屏幕时调用:

    function scene:exitScene( event )
    
    print( "1: exitScene event" )
    
    end
    

    -- 在移除场景的“视图”(显示组)之前调用

    function scene:destroyScene( event )
    
    print( "1: destroyScene event" )
    end
    

    -- 实施结束

    -- 如果场景的视图不存在,则调度“createScene”事件

    scene:addEventListener( "createScene", scene )
    

    -- 只要场景转换完成,就会调度“enterScene”事件

    scene:addEventListener( "enterScene", scene )
    

    -- "exitScene" 事件在下一个场景的转换开始之前调度

    scene:addEventListener( "exitScene", scene )
    

    -- 在视图卸载之前调度“destroyScene”事件,可以是 -- 在内存不足的情况下自动卸载,或者通过调用显式卸载 --storyboard.purgeScene() 或 storyboard.removeScene()。

    scene:addEventListener( "destroyScene", scene )
    

    return scene
    

    【讨论】:

      【解决方案3】:

      试试这个

      playButton = display.newImage( "playbutton.png" )
      playButton.x = _H * 0.33
      playButton.y = _W * 0.90
      playButton.xScale = 0.5
      playButton.yScale = 0.5
      playButton.touch = onSceneTouch
      playButton:addEventListener("touch", onSceneTouch)
      screenGroup:insert( playButton )
      

      因为你一开始就已经将playButton声明为local,所以不需要在createScene中声明为local。

      【讨论】:

        猜你喜欢
        • 2015-07-17
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        相关资源
        最近更新 更多