如何将整个函数插入到组中(场景组)

我知道如何将单独的变量放入一组,但如果我需要在组中添加一个函数(当我想要创建一个场景时,我可以将整个函数插入到该“sceneGroup”中,而不是逐个输入每个变量),那么我如何插入它?

代码:

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

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

    if (phase == "will") then
     sceneGroup:insert(HomePage()) --- 这就是我尝试过的方法

    elseif (phase == "did") then

    end
end

scene:addEventListener("create", scene)
scene:addEventListener("show", scene)
scene:addEventListener("hide", scene)
scene:addEventListener("destroy", scene)

return scene

scene1.lua:140: ERROR: table expected. If this is a function call, you might have used '.' instead of ':'

这是我得到的错误消息。

我也尝试过

sceneGroup:insert(HomeGroup) --- 这没有在末尾加 (),但仍然无法正常工作。

请告诉我您有什么想法或知道如何做到这一点。

点赞
用户3902590
用户3902590

你无法将函数添加到显示组。由于sceneGroup是一个表格(就像lua中的大多数东西一样),你可以像这样声明HomePage

sceneGroup.HomePage = function(params)
    -- HomePage的代码
end

如果你想通过composer.setVariablecomposer.getVariable向composer添加一个函数,你可以选择这种方法。

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

-- loclas
local testFunc = function(hello)
    print(hello)
end

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

    --创建一个名为“myFunction”的变量,其值为对testFunc的引用
    composer.setVariable( "myFunction", testFunc )
end

-- "scene:show()"
function scene:show( event )

    local sceneGroup = self.view
    local phase = event.phase

    if ( phase == "did" ) then
        -- 当场景现在在屏幕上时调用。
        composer.getVariable( "myFunction" )("Testing!")
    end
end

-- 侦听器设置
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )

return scene

这将在场景完成动画上屏后输出“Testing”。

然而,我看不到这样做的目的。如果你想为composer场景添加一个函数,我建议使用这种方法。

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

-- 函数的本地向前引用应在这里
local myFunction

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

    -- 在这里初始化函数
    myFunction = function(param)
        print("myFunction says "..param)
    end
end

-- "scene:show()"
function scene:show( event )

    local sceneGroup = self.view
    local phase = event.phase

    if ( phase == "did" ) then
        -- 当场景现在在屏幕上时调用。
        myFunction("hello")
    end
end

-- "scene:destroy()"
function scene:destroy( event )

    local sceneGroup = self.view

    -- 在这里移除你场景的函数
    myFunction = nil
end

-- 侦听器设置
scene:addEventListener( "create", scene )
scene:addEventListener( "show", scene )
scene:addEventListener( "destroy", scene )

return scene

正如你所看到的,无论何时都可以调用myFunction。这个例子将在场景完成动画上屏后打印“myFunction says hello”。

希望有所帮助,

乔。

2015-07-14 14:04:16