【发布时间】:2013-05-28 01:20:19
【问题描述】:
我正在尝试同时使用 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 场景上的对象不可见,仅出现黑屏(因为 TestScene 为空场景)。
我觉得我的想法是可能的,只是我执行错了。任何帮助将不胜感激。非常感谢。
【问题讨论】: