zoukankan      html  css  js  c++  java
  • cocos2dx&cocosbuilder折腾记

    这几天使用cocos2d-x自己做个小游戏,在使用过程中遇到不少问题,在这里记录下来,做个总结,也希望对遇到相同问题的朋友有所帮助。
    昨天下午开始使用CocosBuilder做场景,并在代码中绑定场景对象和菜单事件、成员变量。在网上查了下相关资料感觉还是挺容易的。结果在实际操作中总是问题不断,连续奋斗了十几个小时才把问题搞定。总结下遇到的问题:
    1. 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.0 iPhone Landscape方式 我在编辑器中将所有图片缩放到了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给折腾了。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    2、基础知识点回顾
    jQuery事件二
    71、auth模块、bbs项目关系表
    PYthon-4.26作业
    PYthon-线程
    PYthon-4.23作业
    PYthon-4.15作业
    PYthon-4.9作业
    PYthon-4.7作业
    PYthon-3.31作业
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3104969.html
Copyright © 2011-2022 走看看