【问题标题】:Opening a CCScene in Lua from a C++ CCScene in cocos2d-x从 cocos2d-x 中的 C++ CCScene 在 Lua 中打开 CCScene
【发布时间】:2013-05-28 01:20:19
【问题描述】:

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

第 1 部分: 我有两个CCScene 课程,HomeSceneGameSceneHomeScene 是用 C++ 编写的,而 GameScene 是用 Lua 脚本 编写的。现在我想做的是在这两个场景之间创建一个“链接”。在HomeScene 生命周期的某个时刻,它将创建GameScene,而GameScene 将替换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 场景上的对象不可见,仅出现黑屏(因为 TestScene 为空场景)。

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

【问题讨论】:

    标签: c++ lua cocos2d-x


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多