`
浮生长恨
  • 浏览: 213341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CCSpriteBatchNode应用(转)

阅读更多

 

 原地址:http://www.cnblogs.com/BeemanComing/archive/2011/10/29/2228466.html

     一般游戏图片资源会打包成一张大图,这样节省空间,又提升速度。打包工具有Zwoptex和texturepacker等等。

   CCSpriteBatchNode的初始化只要一张图片,也就是那张大图。然后把所有用到那张大图里面的小图的sprite都加到 CCSpriteBatchNode的child,绘制效率就会提高。

1) 缓冲sprite帧和纹理

        // 从纹理贴图集中预加载精灵帧,这个方法做了以下几件事:

  • 寻找工程目录下面和输入的参数名字一样,但是后缀是.png的图片文件。然后把这个文件加入到共享的CCTextureCache中。
  • 解析plist文件,追踪所有的sprite在spritesheet中的位置,内部使用CCSpriteFrame对象来追踪这些信息。

[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"table.plist"];

CCSpriteBatchNode *spriteNode = [CCSpriteBatchNode batchNodeWithFile:@"table .png"];[self addChild:spriteNode];

 

2) 创建一个精灵批处理结点

        // 为所有 静态刚体 设置的批处理精灵节点
        CCSpriteBatchNode* batch = [CCSpriteBatchNode batchNodeWithFile:@"table.png"];
        [self addChild:batch];

  • 创建一个CCSpriteBatchNode对象,通过传递一个包含所有sprite的batch的名字作为参数,并把它加入到当前场景之中。
  • 接下来,你从batch中创建的任何sprite,你应该把它当作CCSpriteBatchNode的一个孩子加进去。只要sprite包含在batch中,那么就没问题,否则会出错。
  •         CCSprite* tableTop = [CCSprite spriteWithSpriteFrameName:@"tabletop.png"];
            tableTop.position = [Helper screenCenter];
            [batch addChild:tableTop];

  • CCSpriteBatchNode可以智能地遍历它的所有的孩子结点,并通过一次OpenGL ES call来渲染这些孩子,而不是以前每个sprite都需要一个OpenGL call,这样渲染速度就会更快。

   -(CCSpriteBatchNode*) getSpriteBatch
   {
       return (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];
   }

      CCSpriteBatchNode* batch = [[PinballTable sharedTable] getSpriteBatch];
      sprite = [CCSprite spriteWithSpriteFrameName:spriteFrameName];
      [batch addChild:sprite];

//Batch是一个CCSpriteBatchNode,下面Batch-》Sprite-》ChildrenSprite,

//它们的Tag分别为:TagofBatch,TagofSprite,TagofChildrenSprite 得到ChildSprite的方法如下,

根据各自的Tag得到相应的数据。

id Batch = [self getChildByTag:TagofBatch];

id Sprite = [Batch getChildByTag:TagofSprite];

CCSprite *ChildrenSprite = (CCSprite*) [Sprite getChildByTag:TagofChildrenSprite];

 

 

 

 

關於CCSpriteBatchNode,一个CCSpriteBatchNode是一种效率比较高的渲染精灵的方式。比如,你把CCSprite加到CCLayer中,那么sprite的draw函数在 每一帧调用时都会执行7个opengl 调用来完成sprite的渲染。一个精灵的时候当然没问题,但是,当你在屏幕上有200个精灵的时候,那么就会有200×7次opengl调用。。。而 CCSpriteBatchNode可以“批处理”它的孩子精灵的draw调用。这意味着,当把200个精灵加到 Spritesheet中去的时候,只要使用7个opengl调用就可以完成200个孩子的渲染了。

cocos2d裏面的描述

Detailed Description

CCSpriteBatchNode is like a batch node: if it contains children, it will draw them in 1 single OpenGL call (often known as "batch draw").

CCSpriteBatchNode can reference one and only one texture (one image file, one texture atlas). Only the CCSprites that are contained in that texture can be added to the CCSpriteBatchNode. All CCSprites added to a CCSpriteBatchNode are drawn in one OpenGL ES draw call. If the CCSprites are not added to a CCSpriteBatchNode then an OpenGL ES draw call will be needed for each one, which is less efficient.

Limitations:

  • The only object that is accepted as child (or grandchild, grand-grandchild, etc...) is CCSprite or any subclass of CCSprite. eg: particles, labels and layer can't be added to a CCSpriteBatchNode.
  • Either all its children are Aliased or Antialiased. It can't be a mix. This is because "alias" is a property of the texture, and all the sprites share the same texture.

 

分享到:
评论

相关推荐

    2dx ccspritebatchnode

    Cocos2d-x是一个开源的游戏开发框架,广泛应用于iOS、Android以及多种其他平台。`CCSpriteBatchNode`是Cocos2d-x中用于提升精灵(Sprite)渲染性能的一个类,它是通过批处理技术来减少绘制调用,从而显著提高游戏的...

    cocos2d-x3.10 c++ 水果机

    cocos2d-x是一个开源的游戏开发框架,广泛应用于2D游戏的开发,它基于C++,支持多种平台,包括iOS、Android、Windows等。在本项目中,我们将深入探讨如何使用cocos2d-x3.10版本来实现一个水果机游戏。 首先,我们要...

    Cocco2D-iPhone开发教程

    Cocos2D提供了方便的工具来创建和管理这些动画,例如使用CCSpriteBatchNode优化渲染性能,使用CCAction实现精灵的移动、旋转等效果。 Cocos2D-iPhone还支持事件处理,比如触摸输入。通过实现触摸监听器,你可以响应...

    cocos2d-x_学习文档

    在资源管理方面,cocos2d-x支持图片、音频、字体等资源的加载和释放,通过`CCSpriteBatchNode`可以优化大量精灵的渲染效率。音效和音乐可以通过`CCTouchDispatcher`进行播放控制。 总之,cocos2d-x是一个功能丰富的...

    cocos2d入门cocos2d入门

    2. **CCSpriteBatchNode**:批处理节点用于提高渲染效率,它可以将多个精灵组合在一起,减少OpenGL调用。 3. **CCSpriteFrameCache**:精灵帧缓存用于存储精灵帧,方便重复使用。 4. **CCAnimate**:使用`CCAnimate`...

    cocos2d 例子 入门教程

    例如,你可以使用CCDrawNode绘制线条、形状,或者利用CCSpriteBatchNode优化大量精灵的渲染效率。至于动画,Cocos2D提供了一系列的动作类,如MoveBy、RotateBy、ScaleBy等,通过组合这些动作,可以创建复杂的动态...

    CocosBuilder

    2. **精灵和容器节点**:轻松添加、排列和组织CCSprite及其他CCNode子类,如CCSpriteBatchNode、CCLayer等。 3. **属性编辑**:每个节点的属性都可以在界面上直接调整,包括位置、大小、旋转、颜色等。 4. **动画...

    coco2d-x面试题(无脑码农).pdf,这是一份不错的文件

    - **CCScene** 是应用程序工作流程中的独立单元,可以有多个,但只有一个处于活动状态。它由一个或多个**CCLayer** 组成,层之间按照前后顺序排列。CCScene通过`runWithScene`、`replaceScene`、`pushScene`和`...

    Cocos2D-X游戏开发技术精解

    3.2.7 精灵集合类(CCSpriteBatchNode) 72 3.2.8 精灵帧缓冲(CCSpriteFrameCache) 74 3.2.9 Zwoptex纹理编辑器 76 3.3 文字与字体 80 3.3.1 TTF类型标签(CCLabelTTF) 81 3.3.2 BMFont标签类(CCLabelBMFont) ...

    cocos2d-x 2.2.1 api 中文版

    5. **批处理(Batch Node)**:为了提高渲染效率,cocos2d-x引入了`CCSpriteBatchNode`,它可以一次性绘制一组使用相同纹理的精灵,减少了渲染时的OpenGL调用次数。 6. **物理引擎(Box2D Integration)**:cocos2d...

    cocos2d入门ppt

    要创建动画,首先需要使用`CCSpriteFrameCache`加载精灵帧数据,然后创建一个`CCSpriteBatchNode`以优化渲染效率,接着收集帧列表,最后构建`CCAnimate`对象进行播放。 【工具支持】 在cocos2d开发过程中,一些...

    Bear cocos2d-x

    2. **精灵表(Sprite Sheets)**:使用 CCSpriteFrameCache 类加载精灵表,并用 CCSpriteBatchNode 来渲染精灵表中的多个精灵。这样可以避免频繁的纹理切换,提高渲染效率。 3. **精灵(Sprites)**:CCSprite是...

    Cocos2d-x2.1.5的代码提示包

    Cocos2d-x是一款开源的游戏开发框架,广泛应用于2D游戏的开发,它基于C++,支持多种平台,包括iOS、Android、Windows等。在2.1.5这个版本中,Cocos2d-x提供了丰富的功能和优化,使得开发者能够更高效地构建游戏。 ...

    cocos2d找茬游戏

    Cocos2d是一款广泛应用于2D游戏开发的开源引擎,它提供了丰富的功能和高效的性能,使得开发者可以轻松创建各种类型的游戏,包括找茬游戏。 找茬游戏的核心在于比较两幅图像之间的差异,并允许用户触摸屏幕指出这些...

    ios上使用cocos2d的简单程序

    在"ios上使用cocos2d的简单程序"中,源代码可能包含了以上这些概念的实际应用,例如创建场景、添加精灵、设置动画和处理碰撞事件。通过分析这些代码,你可以更好地理解和掌握Cocos2D在实际项目中的运用。对于初学者...

    cocos2d-x源码素材

    首先,cocos2d-x是一个跨平台的2D游戏开发框架,基于C++编写,广泛应用于iOS、Android、Windows等多个操作系统。它的强大之处在于提供了一整套易用的API,简化了游戏开发过程,使得开发者能够专注于游戏逻辑而不是...

    通过一个简单的纸牌配对游戏 学习 Cocos2d 和 Objective-C__代码_下载

    Cocos2d是一个广泛使用的2D游戏开发框架,它允许开发者利用Objective-C编程语言构建高性能的游戏应用。Objective-C是苹果平台的主要编程语言,为iOS和Mac OS X提供了强大的面向对象的编程能力。 首先,我们需要了解...

Global site tag (gtag.js) - Google Analytics