Cocos2d-x——CocosBuilder官方帮助文档翻译1 使用自定义类
原创:请注明转载!
在Cocos2d-x中使用CocosBuilder
使用自定义类
CocosBuilder的使用方法是通过自定义类。在CocosBuilder中选中一个对象并在属性栏中输入自定义类的类名就可以了。记住你的自定义类必须是你选中对象的一个子类(如CCLayer,CCNode等等)
当加载ccbi文件时,你需要定义两个自定义类(也可以是一个)。自定义的Loader类继承自cocos2d::extension::CCLayerLoader。
自定义的Layer类继承自
cocos2d::extension::CCBSelectorResolver
cocos2d::extension::CCBMemberVariableAssigner
cocos2d::extension::CCNodeLoaderListener
在你的自定义Loader类中你需要加入初始化代码:
|
public: CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(CustomLayerLoaderClass, CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(CustomLayerClass)); |
使用Loader类的loader方法,CCBReader可以初始化你的自定义Layer类。

请注意CCBReader不会使用任何自定义的init方法。如果要使用自定义的init方法,你可以在自定义Layer类的构造函数中调用。
关联成员变量
在ccbi中引用的对象可以在文件被加载时关联为成员变量。这些成员变量可以定义在文档的根节点中,在这种情况下它必须分配一个自定义类。

关联成员变量很简单,只要在头文件中声明它们就可以了。
如果要初始化成员变量,你可以在自定义Layer类中重载onAssignCCBMemberVariable方法并输入代码:
|
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, |
sprtBurst是在CocosBuilder中定义的属性名。
在CocosBuilder中选择对象,在Code Connections面板下把Don't assign变为Doc root var或者Owner var。然后在右边的文本框中输入成员变量的名字。
添加CCMenuItemImage的回调函数
为CCMenuItemImage添加一个点击事件的回调函数很简单,在CocosBuilder中选中CCMenuItemImage,在Selector右边的文本框中输入方法的名称即可,并设置target为Document root或者Owner。

回调函数将把CCMenuItemImage作为它的唯一参数(参数类型是id,名称一般是sender)。或者你也可以忽略这个参数。
在你的自定义类中,重载onResolveCCBCCMenuItemSelector方法并添加如下代码:
|
CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this, |
在这个方法中,MenuTestLayer是你的自定义类名。
然后在你的cpp文件中,可以编写回调方法
|
void } |
添加CCControl的回调函数
为CCControl添加一个回调方法和CCMenuItemImage基本相同,只需要加一些额外的东西。

首先勾选事件类型,CCControlButton一般的事件都是Up inside。Target右边的下拉菜单选择Document root或者Owner,然后输入回调方法名。这个回调方法可以有两个参数,sender和事件类型,事件类型被定义在CCControl.h中。
在自定义类中,重载onResolveCCBCCControlSelector方法并加入如下代码:
|
CCB_SELECTORRESOLVER_CCCONTROL_GLUE(this, |
在这个方法中,MenuTestLayer是你的自定义类名。
然后在你的cpp文件中,可以编写回调方法
|
void } |
加载ccb文件的选项
在加载CocosBuilder的文件前,CocosBuilder文档或者ccb文件需要以一种压缩的二进制格式发布——ccbi格式,一旦被发布,只要一行代码就可以简单地把它们加载到你的程序中。添加CCBReader.h
和 CCBReader.m文件到你的Cocos2D项目中(Cocos2d-x不用添加这些文件),然后调用nodeGraphFromFile方法,如下所示:
|
CCBReader CCNode* |
ccNodeLoaderLibrary的初始化有两种方法:
如果你使用的是自定义类,那么:
|
CCNodeLoaderLibrary * ccNodeLoaderLibrary = |
在这种情况下,HelloCocosBuilderLayer是在CocosBuilder中指定的自定义类名。
如果没有使用自定义类,你可以初始化一个默认的NodeLoader
|
CCNodeLoaderLibrary * ccNodeLoaderLibrary = |
根据ccbi文件中根节点的对象类型你需要对返回值做一下强制类型转换。比如,如果你加载的是一个CCParticleSystem,那么你需要如下代码:
|
CCParticleSystem* |
为了方便起见,CCBReader还可以把你的节点图打包在一个场景中,然后调用sceneWithNodeGraphFromFile方法:
|
CCScene* |
传递Owner变量
有时你可能需要访问另一个对象中的成员变量或者回调函数,而不是访问根节点中的变量和函数。这样的话,你就需要给CCBReader传递一个Owner参数。记住在CocosBuilder中声明变量或者回调函数的时候Target选择owner选项。然后调用CCBReader类的nodeGraphFromFile(file,
owner)方法或者sceneWithNodeGraphFromFile(file, owner)方法来加载你的文件。
|
HelloCocosBuilderLayer CCNode* |
访问子ccb文件中的变量和回调函数
如果你使用了子ccb文件,并且指定root node作为目标,那么owner target就是你要传给CCBReader的对象。
示例
请参看HelloCocosBuilderLayer.h,
HelloCocosBuilderLayer.cpp,还有cocos2d-x官方包下面的TestCPP项目中的ExtensionsTest示例。
设置缩放和设计尺寸
基于CocosBuilder的cocos2d-x项目,在AppDelegate类中对游戏尺寸的适配进行了设置,它会自动地从相应的目录中加载相应的资源文件。它的原理是基于设备屏幕的大小。你同样需要对缩放系数和设计分辨率这两个参数进行设置。
竖屏模式下,在AppDelegate.cpp的AppDelegate::applicationDidFinishLaunching方法中加入代码:
|
CCSize CCSize CCSize std::vector<std::string> std::vector<std::string> TargetPlatform if { searchPaths.push_back("Published-iOS"); // CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths); if (screenSize.height > 768) { resourceSize = CCSizeMake(1536, resDirOrders.push_back("resources-ipadhd"); } else if (screenSize.height > 640) { resourceSize = CCSizeMake(768, 1536); resDirOrders.push_back("resources-ipad"); }else if (screenSize.height > 480) { resourceSize = CCSizeMake(640, 960); resDirOrders.push_back("resources-iphonehd"); } else { resDirOrders.push_back("resources-iphone"); } CCFileUtils::sharedFileUtils()->setSearchResolutionsOrder(resDirOrders); } else { if (screenSize.height > 960) { resourceSize = CCSizeMake(640, 960); resDirOrders.push_back("resources-large"); } else if (screenSize.height > 480) { resourceSize = CCSizeMake(480, 720); resDirOrders.push_back("resources-medium"); } else { resourceSize = CCSizeMake(320, 568); resDirOrders.push_back("resources-small"); } CCFileUtils::sharedFileUtils()->setSearchResolutionsOrder(resDirOrders); } pDirector->setContentScaleFactor(resourceSize.width/designSize.width); CCEGLView::sharedOpenGLView()->setDesignResolutionSize(designSize.width, |
如果是横屏的模式,你只需要把分辨率宽高的顺序调整一下就好了。比如(320, 480)变为(480,320),(640, 960)变为(960, 640)等等。
Cocos2d-x——CocosBuilder官方帮助文档翻译1 使用自定义类的更多相关文章
- Cocos2d-x——CocosBuilder官方帮助文档翻译3 动画
Working with Animations 动画 You can use CocosBuilder for creating character animations, animating com ...
- Cocos2d-x——CocosBuilder官方帮助文档翻译2 多分辨率支持
Working with Multiple Resolutions 多分辨率设置 A common scenario when creating apps or games is to target ...
- Android官方技术文档翻译——Gradle 插件用户指南(5)
昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...
- Android官方技术文档翻译——Gradle 插件用户指南(4)
最近赶项目,白天基本没时间,只有晚上在家的时候才能看一看.昨天晚上只翻译完了第四章,今天就只发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide&g ...
- Android官方技术文档翻译——Gradle 插件用户指南(7)
本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build- ...
- Android官方技术文档翻译——Gradle 插件用户指南(6)
没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不过还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. ...
- google官方的下拉刷新+自定义上拉加载更多
转载请标注转载:http://blog.csdn.net/oqihaogongyuan/article/details/50949118 google官方的下拉刷新+自定义上拉加载更多 现在很多app ...
- Android官方技术文档翻译——ApplicationId 与 PackageName
本文译自androd官方技术文档<ApplicationId versus PackageName>,原文地址:http://tools.android.com/tech-docs/new ...
- Android官方技术文档翻译——Ant 任务
本文译自Android官方技术文档<Ant Tasks>,原文地址:http://tools.android.com/tech-docs/ant-tasks. 由于是抽着时间译的.所以这篇 ...
随机推荐
- C#中种常用的计时器
1.System.Timers.Timer和System.Windows.Forms.Timer,它的最低识别为1/18s. 2.timeGetTime,他的最低识别能达到5ms. 3.System. ...
- innodb b+树
http://www.admin10000.com/document/5372.html
- light开发框架
- jquery通过ajax获取数据,控制显示的数据条数
效果图: 现在我们可以先看它的json数据,如图所示: 然后可以对应我们的代码进行理解. jquery通过ajax获取数据,并通过窗口大小控制显示的数据条数,以及可以根据 ...
- tomcat+dbcp+jndi 配置
1)添加jar包 tomcat6中 TOMCAT_HOME/lib 下是公用jar包 dbcp需要3个jar包:Jakarta-Commons DBCP,Jakarta-Commons Collect ...
- svc 报“由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。“的HTTP 错误 404.3 – Not Found
原因:系统没有默认为IIS注册WCF服务的svc文件的MIME映射. 解决方法:管理员身份运行C:\Windows\Microsoft.NET\Framework\v3.0\Windows Commu ...
- HttpServerUtility类
HttpServerUtility是一个工具类,为了在后台处理请求方便获取到一些常用的类型,Asp.net将很多常用的东西封装到这里. 比如可以使用其进行URL编码解码, HTML编码解码等. // ...
- Gradle使用手册(三):构建任务
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Using-sourceCompatibility-1. ...
- (转载)php如何判断IP为有效IP地址
(转载)http://www.kuitao8.com/20130918/1376.shtml 多数人看到这篇日志,第一印象肯定是以为是要讲如何通过正则表达式来判断. 非也,在php5.2.0之后,有专 ...
- H5制作1--母亲节快乐
H5作品现在很流行额. 早上起的很早.就自己试着去了解了一下.感觉很easy. 用了百度的H5在线制作工具.感觉很easy.顺便给百度做下推广吧.h5.baidu.com 于是就有了自己的第一个dem ...