我正在尝试将Lua脚本和Cocos2d-x一起使用,我在使事情正常工作时遇到了一些麻烦。
第1部分:
我有两个CCScene
类,HomeScene
和GameScene
。 HomeScene
是用 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场景上的对象不可见,只显示黑屏(因为{{1} }是一个空场景。)
我感觉到我的想法是可能的,只是我错误地实施了它。任何帮助将不胜感激。非常感谢你。
答案 0 :(得分:0)
上述代码的问题是逻辑错误。
在C ++ CCScene
被执行之前添加了Lua脚本CCScene
。删除TestScene::runLuaScript()
的{{1}}方法上的init()
并调用CCLayer
方法之外的方法就可以了。在此之后,Lua脚本init()
正在被执行。