• 文件问题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给折腾了。
        每日一道理
    “多难兴才”曾一度被人定为规律。请看:屈原被放逐而作《离骚》;司马迁受宫刑而作《史记》;欧阳修两岁丧父笃学而成才;曹雪芹举家食粥而写出了不朽的《红楼梦》;越王勾践卧薪尝胆而雪洗国耻;韩信遭胯下辱而统率百万雄兵……他们都是在与逆境搏斗中成为伟人的!

        

        

        

        

        

        

     

        

     

        

     

        

     

        

     

        

     

        

     

        

        

        

    文章结束给大家分享下程序员的一些笑话语录: 人工智能今天的发展水平:8乘8的国际象棋盘其实是一个体现思维与创意的强大媒介。象棋里蕴含了天文数字般的变化。卡斯帕罗夫指出,国际象棋的合法棋步共有1040。在棋局里每算度八步棋,里面蕴含的变化就已经超过银河系里的繁星总数。而地球上很少有任何数量达到这个级别。在金融危机之前,全世界的财富总和大约是1014人民币,而地球人口只有1010。棋盘上,所有可能的棋局总数达到10120,这超过了宇宙里所有原子的总数!经典语录网

    --------------------------------- 原创文章 By
    文件和问题
    ---------------------------------

  • 相关阅读:
    20210131
    20210130
    20210129
    20210128
    20210127
    例3-7
    例3-5
    例3-4
    例3-3
    例3-2
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3106788.html
Copyright © 2020-2023  润新知