最近开学cocos2d-x, 按照Jacky大大的教程 打灰机..

可能因为2d-x版本, 或者一些其他原因, 制作过程还是遇到了一些问题.

这些问题几乎都被解决了, 要特别感谢Even.

目前只有一个问题被剩下有待解决, 故此记录下来.

以上是这第一篇博客的初衷. (我记得以前写了两篇博客的...不知道为什么没了..)~

这个问题是这样的:

1. 我们预先加载资源:

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("shoot.plist");

2. 我们创建动画信息:

CCAnimation* pAnimation = CCAnimation::create();

3. 我们添加精灵帧:

pAnimation->addSpriteFrameWithFileName("hero1.png");

okay, F5运行时崩溃发生在步骤 3.

调试, 跟进去 addSpriteFrameWithFileName(), 发现第一行代码:

CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFileName);

pTexture 指针为空.

又往下跟了跟, 有点晕, 没发现什么有用的信息;

我的资源目录是这样的:

Even说, Resources目录下 只需要 *.plist 和 大图(两个.png)就行了.

可是如果我们把 hero1.png 放到 Resources 目录下, 程序运行就正常了..

请教了群里一些朋友, 较为靠谱的说法是, addSpriteFrameWithFileName() 是从指定的路径下获取图片进行处理. 而我们把 "hero1.png" 封在了大图里, 所以获取失败.

我觉得很有道理. 但灵异之处在于, Even的代码跟我一样, 他的 Resources 目录下也只有大图, 为什么他运行没问题啊....

后来我在步骤 3 换了一种添加精灵帧的方式:

pAnimation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero1.png"));

运行就正常了.

至于教程, 以及 Even的程序, 为什么没有问题, 实在不明白...

------------------------------------------------------------------------------------

今天花了一个上午, 深度调试, 终于可以来结贴了.

原本的步骤 3:

pAnimation->addSpriteFrameWithFileName("hero1.png");

该方法内部会去 纹理缓存(texturecache) 找指定图片的缓存, 找不到则利用该图片生成相应的 纹理, 再加入 纹理缓存;

那么

1: 纹理缓存里有没有这张图? 没有, 纹理缓存里只有一张大图, 即我们在步骤 1 中加入的 shoot.png (shoot.plist 对应 shoot.png);

所以它会利用图片生成纹理.

2:那么, 图片在哪里? 资源所在目录 + 该图片名称. 也就是 xx:\....\Resources(默认的, 可以改变) + hero1.png. 由此可以看出, 如果 hero1.png 不再 Resources 目录下, 那就无法生成纹理. 充分解释了我上面的测试.

3. 教程和Even的代码为什么跑起来没问题? 我只能归结于cocos2d-x的版本不同.....我用的 V2.2.3, 不愿意回头去纠老版本的代码了.

最后说下,

pAnimation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("hero1.png"));

为什么这个新的步骤 3 跑起来没问题?

因为这种方法会去 精灵帧缓存(CCSpriteFrameCache)找指定的精灵帧.

1. 该精灵帧存在吗? 存在. 步骤 1 加载 shoot.plist 文件时, 会遍历文件中记录的各项图片(其中包括了 hero1.png), 然后生成精灵帧, 存入精灵帧缓存.

打灰机遇到的问题之 CCAnimation::addSpriteFrameWithFileName()相关推荐

  1. 阿里云安全肖力:从RSA2019看安全技术发展的十个机遇

    又一年RSA大会归来.每一年参会,总会有一些不同的感悟,或是发现全球安全行业的新趋势,或是找到志同道合的新伙伴,或是看到很多人也相信我们相信的安全技术新方向.今天在回国的航班上提笔写下我的感悟和判断, ...

  2. 物联网病毒疯狂进化,“灰犀牛”事件比“黑天鹅”更加可怕!

    这是我在物联网智库|物女心经专栏|写的第023篇文章. "计算机病毒之父"弗雷德·科恩曾经说,信息安全不是科学,而是艺术. 很多人都意识到物联网安全很重要,但是,到底有多重要?为什 ...

  3. 创元汇资本:大象起舞 – 灰犀牛背景下的房地产企业分层分析

    创元汇资本政策及金融研究院(创研院) 一:房地产行业的状态:可控的灰犀牛 自2016年930以来,国家对地产行业的调控方向明显转向.逐步降低房地产行业的金融属性,转而更加倾向于其实体属性.未来房地产政 ...

  4. 论文阅读3:Smart Greybox Fuzzing 智能灰盒模糊测试

    原文链接: Smart Greybox Fuzzing | IEEE Journals & Magazine | IEEE Xplore Abstract 基于覆盖的灰盒模糊(CGF)是一种最 ...

  5. C语言实现将彩色bmp图像转化为灰图、灰度图像反色

    彩色图像转灰度图像 彩色(24位)bmp图像结构: typedef struct{bitmapFileHeader bfHeader;bitmapInfoHeader biHeader;unsigne ...

  6. GSG灰猩猩插件合集包

    GSG灰猩猩插件合集包 GSG灰度大猩猩Plus中心插件HDRI和材料2021年 大小:59G 信息: 云桥网络 平台获取素材 这是最新的(截至2021年4月29日)GSG Plus HUB,包括Pl ...

  7. 使用自定义材质球,实现NGUI屏幕溶解和灰显

    UITexture实现的溶解: 重设UITeture的材质球实现上述效果,把当前屏幕渲染的Texture2D丢给UITexture,即可实现UI屏幕特效,背景模糊等都可以. 难点主要是实时刷新问题 解 ...

  8. IDC行业前景,机遇与挑战并存

    中国互联网信息中心(CNNIC)发布了截至2010年6月底中国互联网发展基本情况的报告.在这半年一次的例行报告中,照例有些鼓舞人心的好消息.报告显示中国网民规模达到4.2亿,较09年底增长2.9%,宽 ...

  9. 用户数年增长 300%,BitMax如何把握数字资产时代机遇?

    12月22日,在2020 BitMax两周年庆典上,BitMax 创始人兼 CEO 曹晶.BitUniverse 合伙人许志宏.BlockVC 创始人徐英凯.红林集团&红链资本创始人李勇敏等多 ...

最新文章

  1. 查看mysql的编码格式
  2. R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(水平带状图、垂直带状图、抖动程度配置)实战
  3. 帝国CMS附件大小限制
  4. 金山称清理专家遭微软误杀:正积极协商解决
  5. leetcode931. 下降路径最小和(动态规划)
  6. Redux Todos Example
  7. 设计模式笔记——生成器模式(Builder Pattern)
  8. 实例讲解webpack的基本使用第二篇
  9. 【git】gitk 通过图形界面工具来查看版本历史
  10. LeetCode90. 子集 II(回溯)
  11. 对职场橡皮人Say No(转)
  12. 第一次面试总结--中国电子科学研究院
  13. 计算机图形学完整笔记(三):裁剪
  14. 研究量子计算机学什么,量子计算,量子信息技术,要学什么专业?
  15. IDEA 添加类注释、方法注释(快捷键 /** + Enter)
  16. Grafana+Prometheus实现Ceph监控和cephfs的基本使用(二)
  17. Python使用pyecharts库制作桑基图
  18. 小学生名字卡(HTML版可打印)
  19. 【GTK4】又快年底了,100行代码教你做一款简单的年会抽奖软件
  20. 18. 地下城与勇士

热门文章

  1. 数据工厂DateFactory简易使用教程
  2. 单轴线圈有效匝数为定子每相绕组匝数的sqrt(3/2)倍----《现代电机控制技术》
  3. 海上计算距离为什么用海里,而不用公里?
  4. 创意编程——优秀作品赏析(自画像)
  5. 分布式缓存和本地缓存的区别
  6. USBasp制作资料及全过程(菜鸟版)
  7. AutoCAD 2019 怎么设置经典模式(经典界面)?
  8. Python中常用函数
  9. 2018考研数学一真题 ​​​
  10. C语言:马克思手稿中的数学题