我正在尝试将 Lua 脚本和 Cocos2d-x 一起使用,但在使事情正常工作时遇到了一些麻烦。
第 1 部分:
我有两个CCScene
课程,HomeScene
并且GameScene
. HomeScene
用C++编写,而GameScene
用Lua Script 编写。现在我想做的是在这两个场景之间创建一个“链接”。在生命周期的某个时刻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
是空场景)。
我觉得我在想什么是可能的,只是我执行错了。任何帮助将不胜感激。非常感谢。