2013-06-01 73 views
0

我試圖使用Lua腳本和Cocos2d-x在一起,我有一點麻煩,使事情正常工作。從C++ CCScene打開CCScene在cocos2d-x

1部分: 我有兩個CCScene類,HomeSceneGameSceneHomeScene寫在C++GameScene寫在Lua腳本。現在我想要做的是在這兩個場景之間創建一個「鏈接」。在HomeScene的某個時間點,它將創建GameSceneGameScene將替換HomeScene(類似CCDirector :: replaceScene)。之後,在GameScene的生命週期中,它將返回到HomeScene

第2部分:從 除此之外,HomeScene需要傳遞一些信息,讓我們說time,爲GameSceneGameScene將使用此值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當我試圖運行它,得到正確執行的Lua腳本,將調用此腳本

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

(該cclog輸出被正確打印的),但是,從對象Lua場景不可見,只出現黑屏(因爲TestScene是空場景)。

我感覺我在想什麼是可能的,只是我錯誤地實現了它。任何幫助將不勝感激。非常感謝你。

回答

0

上述代碼的問題是邏輯錯誤。

Lua腳本的CCScene在C++ CCScene甚至被執行之前被添加。在CCLayerinit()方法上刪除TestScene::runLuaScript()並調用init()方法以外的方法取得了訣竅。之後,Lua編寫的CCScene正在被正確執行。