转发,请保持地址:
http://blog.csdn.net/stalendp/article/details/9154485由于cocosBuilder几乎包办了游戏界面的编程,所以自己在上一版cocos2dx中(还没在lua中对cocosbuilder进行集成),我就自己实现了套集成方案,一直想写出来,但是由于改动了lib中的代码,解释起来也不那么容易,所以一直耽搁了;刚刚发布的新版本中,cocos2dx增加了这样的支持,试用了一下,发现比较ok,特意写下这片文章,以供大家参考。
一、创建工程
1. 在xcode中创建一个cocos2dx_lua的工程,命名为MyCCBTest。
2. 创建cocosBuilder工程,保存到lua工程目录下,命名为ccb;
3. 配置cocosBuilder工程相关属性。
a)把MyCCBTest/ccb/Resources目录下的文件(除了ccb文件外)移动到MyCCBTest/Resources目录下;
b) 在cocosBuilder菜单下,选择File/Project Setting.., 在弹出的对话框的Resource paths下添加MyCCBTest/Resources目录。并去掉JavaScript Based project前的钩,如下图:
完成之后,cocosbuilder左边的导航如下图(图中的ccbi文件夹在步骤c中创建的):
c) 先在MyCCBTest/Resources下创建一个文件夹ccbi;然后在cocosBuilder菜单下,选择File/Publish Setting..,在弹出的对话框中,Publish to directory选则刚刚建立的MyCCBTest/Resources/ccbi, 然后在对话框的最后,勾选Only publish ccb-files; 其他的,如Html5,Android,Iphone等选项没有要求(我暂时没去管),结果如下图:
在cocosBuilder的菜单中点击File/Publish, 就可以把ccb文件发布了,如下图:
然后把生成的文件引入到xcode的工程中,千万不要忘记这一步。引用的时候,尽量使用文件的reference。
二、编辑ccb文件
1. 我把原先的menu去掉了,加上了一个control按钮,使title为ClickMe,并指定Select的Selector为onClick,target为DocumentRoot;如下图:
调整位置:
2. 创建新的动画;创建一个timeline,命名为myClick,并切换到此timeline下。(详细请参考《[cocos2dx开发技巧2]工具CocosBuilder的使用--集成》 中的 “编辑ccb文件--动画”)
在myClick下,对“HelloCocosBuilder”文字进行位置动画的编辑(我让文字沿着手机屏幕的四边按顺时针移动),如下图:
在文字移动到上图的位置时,我插入了一个音效和两个回调函数(方法为,按住Alt键,然后点击相应的位置;这个Alt键时在windows键上的,mac键自己可以试一下);然后双击新加入的点,使callback的名称为onFirstCB, onSecondCB,音效为effect1.wav,如下图:
这样,在动画运行到靠近2s的时候,会发声并调用onCallback函数。
三、编辑代码
1. 引入相关环境
CCB功能被整合到lua的extension中了,所以如果要在lua中使用cocosbuilder,需要引入相关的环境;
在Classes/AppDelegate.ccp中,加入头文件#include"Lua_extensions_CCB.h", 并在applicationDidFinishLaunching函数中用tolua_extensions_ccb_open注册环境:
bool AppDelegate::applicationDidFinishLaunching()
{
// initialize director
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
// turn on display FPS
pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);
// register lua engine
CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
tolua_extensions_ccb_open(pEngine->getLuaStack()->getLuaState());
std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");
pEngine->executeScriptFile(path.c_str());
return true;
}
2. 修改Resources/hello.lua文件,如下:
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
end
local function main()
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
local cclog = function(...)
print(string.format(...))
end
require "CCBReaderLoad"
MainScene = MainScene or {}
ccb["MainScene"] = MainScene --这里ccb中的参数要和ccb中根节点的JS Controller的名称相同
MainScene.onClick = function() -- 这里的onClick是ClickMe按钮的回调函数
if nil ~= MainScene["mAnimationManager"] then
local animationMgr = tolua.cast(MainScene["mAnimationManager"],"CCBAnimationManager")
if nil ~= animationMgr then
animationMgr:runAnimationsForSequenceNamedTweenDuration("myClick", 0) --执行myClick动画
end
end
end
MainScene.onFirstCB = function() -- 动画的第一个回调函数
local ccLabelTTF = tolua.cast(MainScene.helloLabel,"CCLabelTTF")
ccLabelTTF:setString("onFisrtCB")
end
MainScene.onSecondCB = function() -- 动画的第二个回调函数
local ccLabelTTF = tolua.cast(MainScene.helloLabel,"CCLabelTTF")
ccLabelTTF:setString("onSecondCB")
end
-- run
local function HelloCCBTestMainLayer()
local proxy = CCBProxy:create()
local node = CCBReaderLoad("ccbi/MainScene.ccbi",proxy,true,"MainScene")
local layer = tolua.cast(node,"CCLayer")
return layer
end
function runCocosBuilder()
cclog("HelloCCBSceneTestMain")
local scene = CCScene:create()
scene:addChild(HelloCCBTestMainLayer())
return scene
end
local scene = runCocosBuilder()
if nil ~= scene then
CCDirector:sharedDirector():pushScene(CCTransitionFade:create(0.5, scene, ccc3(0,0,0)));
end
end
xpcall(main, __G__TRACKBACK__)
其实,代码还可以简化,比如为赋值,还可以简单。
目前为
local ccLabelTTF = tolua.cast(MainScene.helloLabel,"CCLabelTTF")
ccLabelTTF:setString("onFisrtCB")
由于没有CCLabelTTF的信息,所以要cast一下;实际中,我可以获取这个类信息,节省掉一些cast代码,如下:
MainScene.helloLabel:setString("onFisrtCB")
我将在下篇文章介绍。
另外列一下,lib中相关的代码位置:
libs/lua/script/CCBReaderLoad.lua
libs/lua/cocos2dx_support
libs/extensions/CCBReader
各位有兴趣的话,可以去参考一下源代码。
最后附上本文使用的例子:
--
分享到:
相关推荐
通过集成 Lua 脚本语言,Quick Cocos2d-x Lua v3.3 能够显著减少开发过程中繁琐的编译步骤,让开发者更加专注于游戏的核心逻辑和创意实现。 ##### 3.4 丰富的功能库支持 该版本内置了一系列功能强大的库和工具,如...
《使用VSCode高效开发Cocos2d-x Lua项目——基于"vscode-coco2dx-lua-api.7z"的工具解析与应用》 在现代游戏开发领域,Cocos2d-x作为一款广泛使用的跨平台游戏引擎,为开发者提供了丰富的功能和高效的性能。而在...
3. **创建LuaHost项目**:使用cocos2dx_lua模板创建新项目,并设置在iOS模拟器中运行。 4. **配置Xcode**:针对iOS4.3模拟器进行配置,以避免不必要的警告信息干扰。 5. **修改AppDelegate.cpp**:调整脚本加载路径...
2. **场景构建**:使用Lua脚本定义游戏场景中的各个元素及其初始状态; 3. **用户交互**:通过Lua编写事件响应函数,处理用户的触摸输入或按键操作; 4. **动画效果**:借助Cocos2d-x的动画系统,实现角色动作和特效...
在游戏开发领域,cocos2dx是一个广泛使用的开源游戏引擎,尤其在跨平台开发中扮演着重要角色。本篇将深入探讨cocos2dx游戏开发系列的第三部分——源码解析和Android工程的创建与迁移。 首先,cocos2dx是基于C++的,...
`cocos2dx-3.7`版本中,对CCB(CocosBuilder)的支持使得开发者可以使用可视化工具创建UI和动画,然后在Lua中进行控制。本篇文章将详细介绍如何在Cocos2d-x 3.7中通过Lua扩展CCB动画执行完后的回调函数。 首先,...
cocos2dx lua debug的插件,可以断点lua,看堆栈信息,单步调试lua。 解压后,先安装BabeLua For 2015 V3.2.2.0.vsix,再安装babelua-compat-1.06-VS2015
了解如何在Cocos2dx中嵌入和使用脚本,以及如何利用脚本进行游戏逻辑开发。 6. **物理引擎集成**:通过Box2D,你可以为游戏添加物理模拟,创建真实感的碰撞和重力效果。学习如何设置物理世界、创建刚体和关节,并...
四、Cocos2dx-Lua 游戏开发流程 1. 创建项目:使用 Cocos Console 或者 Xcode、Android Studio 等工具创建新的 Cocos2d-x Lua 项目。 2. 编写 Lua 脚本:在项目的 scripts 目录下,编写游戏的各个模块,如主菜单、...
总结来说,"cocos2dx lua绑定"是一个将C++游戏引擎Cocos2d-x与脚本语言Lua相结合的技术,通过tolua++等工具自动或手动创建绑定,使开发者能用Lua编写游戏逻辑,享受其简易性和高效性,同时利用C++进行性能关键部分的...
Cocos2d-x是一款流行的开源游戏开发框架,广泛用于创建2D游戏、应用程序和互动媒体。在Cocos2d-x的Lua版本中,富文本框(TextArea)是开发者用来显示和编辑多格式文本的重要组件。它支持自动换行、手动换行、字体...
在iOS应用开发中,有时需要将游戏或交互式内容集成到原生应用中,这时Cocos2d-x Lua引擎就显得非常有用。Cocos2d-x是一个强大的跨平台2D游戏开发框架,而Lua是一种轻量级的脚本语言,易于学习且适合游戏逻辑编写。...
cocos2dx上面的登陆系统lua实现
【cocos2dx-lua 自建MVC】是一种在游戏开发中实现模型-视图-控制器(MVC)设计模式的方法,特别是在使用cocos2dx框架和lua脚本语言时。这种模式有助于组织代码,提高可维护性和可扩展性。在cocos2dx-lua项目中,MVC...
- **道具系统**:增加游戏策略性,如加速道具、障碍道具等,通过cocos2dx的脚本系统(如Lua)实现动态交互。 4. **音效与视觉效果**: - **音效设计**:cocos2dx支持音频管理,可以实现背景音乐、碰撞音效等,...
这个压缩包文件"**cocos2dx-csd转lua py脚本文件.rar**"包含了与Cocos2d-x游戏开发相关的工具,特别是涉及到将Cocostudio工程文件转换为Lua脚本的功能。Cocostudio是一款强大的2D游戏场景编辑器,它允许开发者通过...
Quick-Cocos2dx则是它的JavaScript和Lua接口,旨在提供更高效、更便捷的游戏开发体验。 在Quick-Cocos2dx-Community 3.6.5中,社区开发者们持续对原版Quick 3.3进行了优化和改进,以满足更多开发者的需求。这个版本...