打灰机遇到的问题之 CCAnimation::addSpriteFrameWithFileName()
最近开学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()相关推荐
- 阿里云安全肖力:从RSA2019看安全技术发展的十个机遇
又一年RSA大会归来.每一年参会,总会有一些不同的感悟,或是发现全球安全行业的新趋势,或是找到志同道合的新伙伴,或是看到很多人也相信我们相信的安全技术新方向.今天在回国的航班上提笔写下我的感悟和判断, ...
- 物联网病毒疯狂进化,“灰犀牛”事件比“黑天鹅”更加可怕!
这是我在物联网智库|物女心经专栏|写的第023篇文章. "计算机病毒之父"弗雷德·科恩曾经说,信息安全不是科学,而是艺术. 很多人都意识到物联网安全很重要,但是,到底有多重要?为什 ...
- 创元汇资本:大象起舞 – 灰犀牛背景下的房地产企业分层分析
创元汇资本政策及金融研究院(创研院) 一:房地产行业的状态:可控的灰犀牛 自2016年930以来,国家对地产行业的调控方向明显转向.逐步降低房地产行业的金融属性,转而更加倾向于其实体属性.未来房地产政 ...
- 论文阅读3:Smart Greybox Fuzzing 智能灰盒模糊测试
原文链接: Smart Greybox Fuzzing | IEEE Journals & Magazine | IEEE Xplore Abstract 基于覆盖的灰盒模糊(CGF)是一种最 ...
- C语言实现将彩色bmp图像转化为灰图、灰度图像反色
彩色图像转灰度图像 彩色(24位)bmp图像结构: typedef struct{bitmapFileHeader bfHeader;bitmapInfoHeader biHeader;unsigne ...
- GSG灰猩猩插件合集包
GSG灰猩猩插件合集包 GSG灰度大猩猩Plus中心插件HDRI和材料2021年 大小:59G 信息: 云桥网络 平台获取素材 这是最新的(截至2021年4月29日)GSG Plus HUB,包括Pl ...
- 使用自定义材质球,实现NGUI屏幕溶解和灰显
UITexture实现的溶解: 重设UITeture的材质球实现上述效果,把当前屏幕渲染的Texture2D丢给UITexture,即可实现UI屏幕特效,背景模糊等都可以. 难点主要是实时刷新问题 解 ...
- IDC行业前景,机遇与挑战并存
中国互联网信息中心(CNNIC)发布了截至2010年6月底中国互联网发展基本情况的报告.在这半年一次的例行报告中,照例有些鼓舞人心的好消息.报告显示中国网民规模达到4.2亿,较09年底增长2.9%,宽 ...
- 用户数年增长 300%,BitMax如何把握数字资产时代机遇?
12月22日,在2020 BitMax两周年庆典上,BitMax 创始人兼 CEO 曹晶.BitUniverse 合伙人许志宏.BlockVC 创始人徐英凯.红林集团&红链资本创始人李勇敏等多 ...
最新文章
- 查看mysql的编码格式
- R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(水平带状图、垂直带状图、抖动程度配置)实战
- 帝国CMS附件大小限制
- 金山称清理专家遭微软误杀:正积极协商解决
- leetcode931. 下降路径最小和(动态规划)
- Redux Todos Example
- 设计模式笔记——生成器模式(Builder Pattern)
- 实例讲解webpack的基本使用第二篇
- 【git】gitk 通过图形界面工具来查看版本历史
- LeetCode90. 子集 II(回溯)
- 对职场橡皮人Say No(转)
- 第一次面试总结--中国电子科学研究院
- 计算机图形学完整笔记(三):裁剪
- 研究量子计算机学什么,量子计算,量子信息技术,要学什么专业?
- IDEA 添加类注释、方法注释(快捷键 /** + Enter)
- Grafana+Prometheus实现Ceph监控和cephfs的基本使用(二)
- Python使用pyecharts库制作桑基图
- 小学生名字卡(HTML版可打印)
- 【GTK4】又快年底了,100行代码教你做一款简单的年会抽奖软件
- 18. 地下城与勇士