转到Corona / LUA的下一个场景

时间:2014-01-15 20:36:16

标签: lua corona corona-storyboard

我已经在这一段时间了,我尝试的一切都没有。当我按下playButton时,我正试图这样做,场景变为scene2。

以下是代码:

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?

img

有人有任何想法吗?

3 个答案:

答案 0 :(得分:0)

这是你需要做的:

-- 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

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

答案 1 :(得分:0)

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

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

- 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

答案 2 :(得分:0)

试试这个

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中声明为local。