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

cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用的更多相关文章

  1. cocos2dx打飞机项目笔记一:项目结构介绍

    最近在学习cocos2dx引擎,版本是2.1.3,开发环境是win7 + vs2010,模仿微信打飞机游戏,开发中参考了 csdn 偶尔e网事 的系列文章:http://blog.csdn.net/c ...

  2. cocos2dx打飞机项目笔记四:Enemy类和EnemyLayer类

    Enemy类没什么内容,就create和init方法,根据参数来创建不同的敌机,头文件代码如下: //飞机的类型 enum planeType {smallPlane, midPlane, bigPl ...

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

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

  4. cocos2dx打飞机项目笔记七:各种回调:定时器schedule、普通回调callFunc、菜单回调menu_selector、事件回调event_selector

    各种回调函数的定义: typedef void (CCObject::*SEL_SCHEDULE)(float); typedef void (CCObject::*SEL_CallFunc)(); ...

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

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

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

    BulletLayer.h 内容如下 class BulletLayer : public cocos2d::CCLayer { public: CC_SYNTHESIZE(bool, m_IsHer ...

  7. ASP.Net MVC OA项目笔记<五>

    1.1.1  抽象工厂封装数据操作类实例创建,然后DBSession调用抽象工厂,修改DBSession CZBK.ItcastOA.DALFactory数据会话层调数据层不能直接new,要封装一下解 ...

  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游戏开发系列笔记13:一个横版拳击游戏Demo完结篇

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...

随机推荐

  1. Servlet线程安全2

    Servlet的多线程机制 Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的.当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配 ...

  2. 安装VC6.0遇到的问题

    1. 问题现象 安装VC6.0后,又安装了VS2005.用VC6.0打开以前的.dsw文件时,程序自动关闭.如下图所示. 具体操作是:选择一个.dsw文件,右键菜单[打开方式]中选择[Microsof ...

  3. keycode 大全,javascript 再也不用操心我不知道的keycode了

    keycode    8 = BackSpace BackSpace keycode    9 = Tab Tab keycode   12 = Clear keycode   13 = Enter ...

  4. jmeter返回结果是乱码及Unicode转中文

    1.结果树中有乱码的处理方式 到bin目录下面修改jmeter的配置文件 使用jmeter进行压测时,如果响应数据的返回结果有乱码,则修改jmeter.properties文件中的该字段的值改为utf ...

  5. ie10 css hack 条件注释等兼容方式整理

    点评:ie10已经上线一段时间了,相信已经有一部分前端潮人体验过了,截至到现在,在ie6到ie9的浏览器各种各样的古怪行为,开发人员不得不使用条件注释,有条件的类,和其他特定于IE的css hack来 ...

  6. bsd socket 网络通讯必备工具类

    传输数据的时候都要带上包头,包头有简单的又复杂的,简单的只要能指明数据的长度就够了. 这里我写了一个工具类,可以方便地将整型的数据长度转换为长度为 4 的字节数组. 另一方面,可以方便的将长度为 4 ...

  7. 1052 最大M子段和(DP)

    1052 最大M子段和 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 N个整数组成的序列a[1],a[2],a[3],…,a[n],将这N个数划分为互不相交的M个 ...

  8. 调用第三方物流公司API即时查询物流信息

    主要是利用快递鸟提供的物流服务,通过对接快递鸟的API,调用即时查询接口,获取物流信息. 这里采用java语言,调用快递鸟的接口为例.步骤如下: 1.首先,得去快递鸟的官方网站注册一个账号并进行实名认 ...

  9. Linux下修改密码复杂度

    在linux,设置密码复杂度的方法有几个1. 一个是在/etc/login.defs文件,里面几个选项PASS_MAX_DAYS 90 #密码最长过期天数PASS_MIN_DAYS 80 #密码最小过 ...

  10. 接口测试工具 — jmeter(基本使用)

    1.打开jemeter(bin目录下jemter.bat) 2.基本操作