在Corona/LUA中移动至下一个场景。

我已经尝试了一段时间,但没能成功。我试图使得当你点击 playButton 时,场景会切换到 scene2

以下是代码:

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

---------------------------------------------------------------------------------
-- YOUR IMPLEMENTATION HERE
---------------------------------------------------------------------------------

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 )

    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 )

    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?

img

有人有什么想法吗?

点赞
用户3183373
用户3183373

以下是您需要执行的操作:

-- 触摸事件监听器,用于背景图片
local function playButtonTouched( event )
    storyboard.gotoScene( "scene2", {effect = "slideLeft", time = 800}  )
    return true
end

-- 当场景视图不存在时调用:
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

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

2014-01-15 22:01:38
用户3171803
用户3171803

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

-- main.lua


local storyboard = require("storyboard")

local scene = storyboard.newScene()

--隐藏状态栏

display.setStatusBar(display.HiddenStatusBar)

-- IMPLEMENTATION 开始

--背景图片的触摸事件

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

--当场景显示的 view 不存在时调用

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

--场景的“view”(显示组)被卸载之前调用

function scene:destroyScene(event)

    print("1: destroyScene event")

end

-- IMPLEMENTATION 结束

--如果场景的 view 不存在,则分派“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
2014-01-16 07:30:21
用户2653067
用户2653067

试试这个

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声明为局部变量,所以在createScene中不需要再次声明为局部变量。

2014-07-21 06:39:56