在上一节里,在头文件看到 定义了一个 CCSpriteBatchNode* batchNode;,在addEnemy方法里看到 batchNode->addChild(enemy); 新建的敌机不是add到layer上,而是add到 CCSpriteBatchNode 上,关于 CCSpriteBatchNode 的了解这里不多说,网上大把,下面说说 CCSpriteBatchNode 在这里的应用。

1、通过 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(const char *pszPlist) 读取plist文件(关于拼图这里不说,自行google)。

其中的细节包括:

(1)调用 CCTextureCache 读取一个和plist文件同名的png文件到纹理缓存里,然后根据plist文件的信息把这个大纹理里面包括的所有精灵帧 CCSpriteFrame 存储到 CCSpriteFrameCache 里面。

(2)这里要注意两点:这个大纹理已经被存储到纹理缓存里了而没有存到精灵帧缓存里;精灵帧缓存里存储了根据plsit文件信息得到 小精灵帧,但纹理缓存里并没有这些小精灵帧对应的小纹理!

(3)所谓精灵帧,其实就是保存里一些关于纹理的信息:纹理的名字和要显示的区域。所以在(2)里的那些精灵帧,其实就保存里两样信息:和plist文件同名的 png 格式的纹理,要显示的区域。

2、CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create(const char* fileImage, unsigned int capacity); 读取和plist文件同名的png文件,这个文件其实已经被读取到纹理内存里了的。还要记得把batchNode加到某个父节点上。

3、batchNode->addChild(enemy); 把那些enemy加到 CCSpriteBatchNode 上,但是,这些enemy要通过这个batchNode所对应的大纹理的某一部分来创建的才行,enemy可以如下初始化:CCSprite::initWithSpriteFrameName(spriteFrameName)。还记得 1 里说过的frameCache加载plist文件吧,这里所用到的精灵帧就是那时加到精灵帧缓存的,而这些精灵帧所对应的纹理就是加到batchNode的那个大纹理,这是最重要的一点,就是保证所有添加到batchNode上的精灵所对应的纹理都是batchNode所对应的纹理~~

另外,好像这样子加到batchNode上面的精灵,无法再添加子节点了

总结如下:假如有 A.plist 和 A.png

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(“A.plist”);

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create("A.png", 50);

CCSprite* sprite1 = CCSprite::createWithSpriteFrameName("精灵帧1的名字");

CCSprite* sprite2 = CCSprite::createWithSpriteFrameName("精灵帧2的名字");

batchNode->addChild(sprite1);

batchNode->addChild(sprite2);

this->addChild(batchNode);

搞定,不过要注意Z轴的设置,别让batchNode被其他节点给覆盖了而看不到。

最新文章

  1. ubuntu14.04安装了im-switch后系统设置中不见了语言支持
  2. 250W电源带i7+GTX1080?
  3. xml in hadoop ETL with pig summary
  4. .Net码农学Android---小点整理
  5. Django中如何使用django-celery完成异步任务1(转)
  6. QT程序在windows下部署发布
  7. 为什么子线程不能做UI操作
  8. Java基础学习笔记2
  9. String的几种比较方法对比(Compare,CompareTo, CompareOrdinal、Equals)
  10. Git 和 Github的关系
  11. python 第三天
  12. FusionCharts报错收录
  13. NABCD--团队项目1
  14. 关于JSF
  15. RPC原理及实现
  16. 判断浏览器是否支持HTML5 video
  17. Bitmap那些事之内存占用计算和加载注意事项
  18. linux的必知必会规则
  19. VMvare虚拟机如何删除安装的ubuntu操作系统
  20. ob

热门文章

  1. poj 3590(dp 置换)
  2. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)
  3. ASP.NET通过代码给TextBox添加事件(点击显示日历)
  4. grafana-----Annotation
  5. 超哥mysql数据库部分blog整理:
  6. XShell安装(五)
  7. dataTables的导出Excel功能
  8. python模块学习(二)
  9. 请听一个故事------>你真的认为iPhone只是一部手机?苹果惊天秘密!!
  10. kubernetes 搭建教程