cocosbuilder与cocos2d-x配合食用的方法网上本来就略少,lua/quick方面的就更少了,更遑论这魔改之后的版本,顺手记录一下基本食用方法

屏幕适配

可采用百分比坐标的方法做,背景之类的大图以中心点为锚点,做个大图向四周发散. 或也可根据分辨率/尺寸来读取不同的文件夹路径,这样可以做得更精细,但是重复工作会增多,包可能也会增大

基本控件取用 alt 首先,新建一个layer的时候,双击这个CCLayer alt 将右侧的Script Controller填上与ccb文件相同的名字,完成绑定(否则读取生成的ccbi文件会报错,同时cocosbuilder也不会生成相对应的.lua文件)

alt 而从布局中取控件的方法,则是点击控件后,在右侧选择节点为Doc root var,然后命名,譬如上图中,在对应的.lua文件中,使用代码self["titleLabel"]即可获取到这个Label,十分方便

最后则是按钮,相当直观,如下图 alt

点击一个按钮后,在右侧写上对应的selector,target,之后生成的.lua文件里,会自动附加这个方法.(.lua文件的生成可以在cocosbuilder应用的包文件或者直接github上去看,是一个lua文件模板)

基本用法就是如此,简单暴力有效 :P

一些遇到过的问题

  1. MenuItem和ControlButton在quick中总是能接收到屏幕的点击事件. 由于quick使用自己的一套触摸机制,点击优先级在cocos2d-x的体系中为0,并且设置优先级的方法在lua中都不提供了,所以两套UI体系在一起混用会出现各种问题(这点以后也要注意),本来的方案是在Cocosbuilder中新建一种控件,在quick里映射成一个接收点击事件的CCSprtie,结果发现步骤太过繁琐,需要在CocosBuilder新建一个类,还要在Quick的Cocos2d-x C++代码里写一个对应的类,并且解析ccbi文件里面也要写,最后再导出到lua中,十分之复杂繁琐. 最后采用了比较折(tou)中(lan)的做法:

    在CocosBuilder里生成lua模板的时候,直接将获取到的CCSprite做一个判断,如果其Tag>=某个临界值(我在代码里写死的是500),则在导出到lua的时候,将其绑定一个点击事件,由于这些都是定式,因此可以直接在模板里根据当前的classname等属性直接替换字符串生成方法,这样将所有的方法都交给lua来处理,同样的,可点击CCSprite的一些点击缩放之类的效果也直接在处理点击事件的函数里处理,如此,便将会冲突的UI以最小代价整合到一起了,并且绑定的函数和绑定方法都可以直接用模板生成,不会增加额外的工作量

    绑定之后,会遇到另外一个问题,就是在有按钮的层上面再添加通过ccbi生成的层时,还是会接收到点击事件,这个就简单多了,直接在生成模板的时候,初始化时再添加一个专门的遮罩层,屏蔽掉下层点击事件即可