前端之家收集整理的这篇文章主要介绍了
文件问题cocos2d-x&cocosbuilder折腾记,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这几天应用cocos2d-x自己做个小游戏,在应用过程当中碰到不少问题,在这里记录下来,做个总结,也希望对碰到相同问题的友人有所帮助。
昨天下午开始应用CocosBuilder做场景,并在代码中绑定场景对象和菜单事件、成员变量。在网上查了下相干资料感到还是挺轻易的。结果在实际操作中老是问题不断,连续奋斗了十几个小时才把问题搞定。总结下碰到的问题:
- cocos2d-x与 cocosbuilder 版本问题
应用cocosbuilder 3.0(当前简称ccb)兴高彩列的制作了一个CCLayer场景,在cocos2d-x中加载出来,在CCBReader::readNodeGraphFromFile()提示:
“WARNING! Incompatible ccbi file version (file: 4 reader: 5)”
google + baidu 一翻都没找到好的解决办法, 有人说应用最新版本的ccb就是了,可www.cocosbuilder.com使终打不开,在网上搜索到的ccb 都是3.0 或3.0 Alpha,此路又欠亨,究竟是什么问题总要搞清楚于是跟进源代码想看个究竟,找到代码:
代码中kCCBVersion定义为#define kCCBVersion 5 而文件头读出的版本号为4.
意思很明显了,CCBReader解析类与ccbi文件版本不合。
问题是知道了,但怎么解决呢?又找不到最新的ccb。 在之前搜索过程当中找到了ccb在github上的源码,应用源码自己编译一个不就行了!
不知道是怎么会事,github非常的迟缓,旁边还断过几次,就这样折腾到十二点过了,连源码都有没下载完,为了身体还是睡觉去了!
一晚都没睡好,早上五点过就醒了,天已经亮了。继续尝试check out代码,这下来劲了下载有200kb/s. 除了下载ccb源码外还需要cocos2d(Object-c)的lib,统共下载了近一个小时,具体有大数据记不得了,我在目录里编译了ccb产生了此渣滓代码,和输出文件一共有900M多。
下面就是我编译出的ccb 版本是未知
经过这么大费周折终究把“WARNING! Incompatible ccbi file version (file: 4 reader: 5)”问题搞定。
2.资源文件加载失败
正在高兴之际,累计时光还不到三分钟,在加载过程当中又碰到问题:
”Get data from file(xxx/yyy.png)faild!”
这是在加载我在场景编辑器中的一个图片文件,怎么会不存在呢?我立马又应用了ccb工程中默许的MainScene.ccbi文件却没有问题,根据提示应该是文件找不到。检查图片资源是存在的,又反复重新添加问题还是存在。又祭出google,线索是:a.应用全路径 ,我晕,我应用的是ccbi文件又无控制,再说应用全路径这个方法太烂,重新编译路径都会变的。b.将图片资源文件全体放到Resources目录上,之前我是放在Resources/ccbResources的, 这个方法可行,但觉得还是欠好。只要又钻到源码里面去看发现:
MainScene中的png文件在文件路径解析上会解析出全路径,而我自己做的ccbi文件中的路径解析不出来,一起到头都是xxx/yyy.png 最后直到fopen()时就挂了。问题主要是在解析文件路径时无法搜索到xxx/yyy.png文件,Resources根目录下的文件可以解析到。
在ccb和xcode中反复又折腾了一个多小时,还是没戏。又在网上找教程再仔细看看,忽然眼前一亮:
将Flatten paths when publishing 复选框勾上,OK问题搞定了!我场景终究出来了!
3. 普通屏幕与Retina屏幕的适配问题
我直接应用的是Retina屏尺寸的png文件 960*640的文件,策略是在普通屏幕下将图片缩放为0.5, 按ccb默许添加文件时缩放为1.0iPhoneLandscape方式 我在编辑器中将所有图片缩放到了0.5,结果在高清模拟器中表现惨不忍睹。后来设置如下方式:
在普通屏幕缩放0.5,在新建一个屏幕解决方案,手动设置宽960,高640。缩放为1.0
并且还需要在代码设置:
至此在不同屏幕上的问题解决了。
4. 事件函数和类成员绑定出问题
当初界面也对了,该为我的场景界面添加事件响应了,我按照教程中讲的实现了
CCBSelectorResolver中的虚函数,在ccb中为控件设置了Selector名字,方法也很简单,可是不幸的事又发生了,我重写的onResolveCCBCCMenuItemSelector、onResolveCCBCCControlSelector 函数都没响应,代码根本没走过来。
除了源码,还是源码只有在源码中找解决办法。 搜索了CCBSelectorResolver类在代码中的什么地方涌现(这里吐槽一下xcode搜索怎么一点都欠好用,经常搜不出东西来。)
只有在源代码中肉眼搜索,终究被我发现:
在”if(!pCCBReader->isJSControlled())“这句代码中退出了,从表面上看应该是与javascript绑定相干的呀,回想一下ccb在最开始就发现有些地方和网上教程中的不一样。在我的ccb上Code connections是这样的:
但一般应该是这样的:
在ccb上菜单挨个找,挨个试让我发现一个开关:
把这个勾去掉,由本来JS controller酿成Custom class。再次生成宣布
事件响应来了!。
终究问题搞定,我的场景表现出来了,事件响应也能触发。这一天就被cocos2d-x 和ccb给折腾了。
原文链接:https://www.f2er.com/cocos2dx/346148.html