在上一节里,在头文件看到 定义了一个 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被其他节点给覆盖了而看不到。

转载于:https://www.cnblogs.com/zouzf/p/3490709.html

cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用相关推荐

  1. cocos2dx打飞机项目笔记三:HeroLayer类和坐标系

    HeroLayer类主要是处理hero的一些相关东西,以及调用bulletLayer的一些方法,因为子弹是附属于hero的~~ HeroLayer 类的成员如下: 1 class HeroLayer ...

  2. cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox

    GameScene类虽然是占用游戏最多时间的类,但是里面的东西不是很多,最重要的就是碰撞检测了,碰撞检测代码如下: 1 void GameScene::detectionCrash() 2 { 3 4 ...

  3. cocos2dx打飞机项目笔记二:BulletLayer类

    BulletLayer.h 内容如下 1 class BulletLayer : public cocos2d::CCLayer 2 { 3 4 public: 5 6 CC_SYNTHESIZE(b ...

  4. Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的

    2019独角兽企业重金招聘Python工程师标准>>> 又是一个愉快的夜晚 还是那张长长的工作桌 哲哲在左边做一个香云纱手包 骨头在这里噼里啪啦的解刨 pad里放着<赢在中国& ...

  5. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  6. 宅急送项目第五天笔记!

    修复bug 1.RegionAction 添加区域时,条件书写错误 if(region.getId()==null || region.getId().equals("")){ } ...

  7. SSM米米商城项目笔笔记五(商品信息多条件查询)

    SSM米米商城项目笔笔记五(商品信息多条件查询) 1.当查询的条件没有数据时,点击查询会展示出所有的上商品信息 2.当输入商品的模糊信息时,就会展示带有模糊信息的数据 3.当选中商品类型的时候就根据类 ...

  8. cocos2dx 3.2之Lua打飞机项目

    1          创建lua打飞机项目 cocos new T32Lua -dE:\Installed\cocos2d-x-3.2\cocos2d-x-3.2\projects -l lua 2 ...

  9. Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上

    2019独角兽企业重金招聘Python工程师标准>>> 感谢听D同学赞助的Demo. 那怎样让它运行在vs中呢: 1 使用cocos2d-x-2.2\tools\project-cr ...

最新文章

  1. 选择Java接口还是抽象类
  2. 正在看的一些书(值得推荐)
  3. 【数据立方】数据立方体的有效计算、物化materialization,索引OLAP数据
  4. 最新优质网站联盟大全(个人站长必知)
  5. Homogeneous Coordinates(齐次坐标)
  6. 大学留级两年不敢和家人说_您说什么:如何与家人保持联系?
  7. 【ARC103D】Distance Sums【树论】【构造】
  8. jq 中each的用法 (share)
  9. 速修复!热门代码覆盖率测试工具 Codecov 的脚本遭恶意修改,敏感信息被暴露...
  10. ‘numeric_limits’ is not a member of ‘std‘解决方法
  11. 解决办法:对avcodec_parameters_from_context未定义的引用
  12. con和com开头单词规律_com与con 前缀的单词
  13. Word文档怎么取消密码
  14. 专访当当网张亮:深度解读分布式作业调度框架elastic-job
  15. opencv求矩阵的逆_使用OpenCV求模拟矩阵的逆矩阵
  16. leetcode 39. Combination Sume (medium)
  17. Java后端使用Freemarker导出word文档的各种细节
  18. MindManager思维导图软件中如何下载使用行业分析模板教程分享
  19. mysql引擎与优化
  20. win10删除Windows更新和预览的版本,关闭自动更新

热门文章

  1. 分享到facebook链接原格式_神马?!你还不知道Facebook广告怎么操作?
  2. Qt 模型视图框架解读之模型
  3. Android宫格动态列,Android实现宫格图片连续滑动效果
  4. 三值的排序 Sorting a Three-Valued Sequence
  5. 2017年10月05日普及组 负进制
  6. 笨小猴pascal题解
  7. AtCoder AGC043C Giant Graph (图论、SG函数、FWT)
  8. AtCoder AGC001E BBQ Hard (DP、组合计数)
  9. luogu P4726 多项式指数函数(模板题FFT、多项式求逆、多项式对数函数)
  10. codeblock 带mingw的版本_云顶之弈10.22新版本最强阵容排名 10.22版本吃鸡阵容推荐...