在cocos2d-x中用C ++ CCScene在Lua中打开CCScene

时间:2013-06-01 08:00:46

标签: c++ lua cocos2d-x

我正在尝试将Lua脚本和Cocos2d-x一起使用,我在使事情正常工作时遇到了一些麻烦。

第1部分: 我有两个CCScene类,HomeSceneGameSceneHomeScene是用 C ++ 编写的,而GameScene是用 Lua脚本编写的。现在我想做的是在这两个场景之间创建一个“链接”。在HomeScene生命的某个时刻,它将创建GameSceneGameScene将替换HomeScene(类似于CCDirector :: replaceScene)。然后,在GameScene的生命周期内,它会返回HomeScene

第2部分: 除此之外,HomeScene需要将一些信息(例如time)传递给GameScene。然后,GameScene将使用此time值进行进一步处理。当GameScene返回HomeScene时,它会将另一部分数据(例如score)传回HomeScene

所以,问题是,在cocos2d-x中使用Lua绑定是否可能有两部分?如果是这样,我该如何实施呢?

我尝试了什么: 我创建了一个小的Lua脚本文件来测试我的想法是否可行。

local function main()
    local visibleSize = CCDirector:sharedDirector():getVisibleSize()
    local origin = CCDirector:sharedDirector():getVisibleOrigin()

    local function createLayer()
        local function doGoBack()
            CCDirector:sharedDirector():popScene()
        end

        local layer = CCLayer:create()

        local btn = CCMenuItemImage:create( "btn0.jpg", "btn1.jpg" )
        btn:setPosition( ccp( visibleSize.width * 0.50, visibleSize.height * 0.50 ) )
        btn:registerScriptTapHandler( doGoBack )

        local menu = CCMenu:createWithItem( btn )
        menu:setPosition( ccp( 0, 0 ) )
        layer:addChild( menu, 1 )

        cclog( "createdLayer" )

        return layer
    end

    -- run
    local sceneGame = CCScene:create()
    sceneGame:addChild( createLayer() )
    CCDirector:sharedDirector():pushScene( sceneGame )
end

然后我创建了一个将调用此脚本的CCScene

void TestScene::runLuaScript() {
    std::string luaPath = CCFileUtils::sharedFileUtils() -> fullPathForFilename( "test.lua" );
    CCString * luaCode = CCString::createWithContentsOfFile( luaPath.c_str() );
    CCLuaEngine::defaultEngine() -> executeString( luaCode -> getCString() );
}

当我尝试运行它时,Lua脚本正确执行(cclog输出正确打印)但Lua场景上的对象不可见,只显示黑屏(因为{{1} }是一个空场景。)

我感觉到我的想法是可能的,只是我错误地实施了它。任何帮助将不胜感激。非常感谢你。

1 个答案:

答案 0 :(得分:0)

上述代码的问题是逻辑错误。

在C ++ CCScene被执行之前添加了Lua脚本CCScene。删除TestScene::runLuaScript()的{​​{1}}方法上的init()并调用CCLayer方法之外的方法就可以了。在此之后,Lua脚本init()正在被执行。