0

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

第 1 部分: 我有两个CCScene课程,HomeScene并且GameScene. HomeSceneC++编写,而GameSceneLua Script 编写。现在我想做的是在这两个场景之间创建一个“链接”。在生命周期的某个时刻HomeScene,它将创建GameSceneGameScene替换HomeScene(类似于 CCDirector::replaceScene)。之后,在 的生命周期内GameScene,它又回到HomeScene

第 2 部分: 除此之外,还HomeScene需要将一些信息传递timeGameScene. 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 场景上的对象不可见,仅出现黑屏(因为TestScene是空场景)。

我觉得我在想什么是可能的,只是我执行错了。任何帮助将不胜感激。非常感谢。

4

1 回答 1

0

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

甚至在执行CCSceneC++ 之前就已经添加了Lua 脚本。CCScene删除方法并TestScene::runLuaScript()在方法之外调用方法就可以了。之后Lua 脚本正在正确执行。init()CCLayerinit()CCScene

于 2013-06-05T01:38:42.547 回答