Cocos2d-x学习笔记(三十二)之图片渲染
2013-08-28 16:39
302 查看
在Cocos2D-x中通过CCRenderTexture可以实现更好的渲染效果。本节就来看一下CCRenderTexture的使用、和其它渲染的对比。
1、CCRenderTexture的使用
使用CCRenderTexture的过程总结起来就一句话,首先用begin方法开始整个控制,采用节点中的visit方法加入渲染,最后调用end方法介绍整个控制并渲染。使用的示例如下:
2、绘制方法对比
在Cocos2D-x中渲染和绘制的方法包括精灵和精灵表单的绘制、OpenGL的绘制、CCRenderTexture类的绘制等。
1)、精灵表单CCSpriteBatchNode绘制方式
用CCSpriteBatchNode生成的CCSprite精灵共用一个纹理,这样的好处是生成很多相同的CCSprite,很高效,帧率可以很高、很稳定。
使用CCSpritebatchNode精灵表单绘制的优势不言而喻,简单并且高效,但是它也有一些缺点,就是CCSpriteBatchNode精灵表单对象的子节点,也就是说是使用CCSpriteBatchNode精灵表单绘制的精灵个数是有一定的限制的,超过这个限制就有可能会出现绘制不出的现象。原因是CCSpritebatchNode在添加子节点时会重新分配内存,当需要分配的内存很大时,会导致内存分配失败,从而CCSpritebatchNode添加子节点的操作会没有效果。
2)、OpenGL绘制方式
在Cocos2D-x中,OpenGL的绘制方式一般在draw这个函数里面调用其相关函数。当然Cocos2D-x也集成了几个常用的OpenGL绘制函数:ccDrawLine、ccDrawCircle等。OpenGL绘制的优势就是绘制方式比较自由,每帧调用的逻辑更新update函数结合起来,但是对于没有OpenGL经验的开发人员,进行这样的开发比较浪费时间,而且这种绘制方式比较耗费效率,并且不是推荐的方法。这种OpenGL绘制方式只适合绘制特定效果时使用。
3)、CCRenderTexture类的绘制方式
CCRenderTexture类似一张空白的“画布”,只要begin函数开启“记录”功能后,任何之后的CCNode节点类对象只要调用visit函数,就能将自己绘制在其身上。所以一般游戏的截屏功能,完全可以使用CCRenderTexture来实现。
这种方式的优势就是使用方法简单,可以轻松实现截屏等功能。由于每个使用Android操作系统的手机的硬件或支持OpenGL版本不一样,有些手机用CCRenderTexture会出现花屏。这点会在不同手机的Android版本移植中造成困难,因此,不建议采用CCRenderTexture的绘制方法。
1、CCRenderTexture的使用
使用CCRenderTexture的过程总结起来就一句话,首先用begin方法开始整个控制,采用节点中的visit方法加入渲染,最后调用end方法介绍整个控制并渲染。使用的示例如下:
//定义一个CCRenderTexture对象,参数为宽高 CCRenderTexture* rend = CCRenderTexture::create( 32,64, kCCTexture2DPixelFormat_RGBA8888 ); //像节点一样放入场景层中 this->addChild( rend ); //在需要处理渲染管理时调用开始函数 rend->begin(); //需要渲染的对象调用visit,但是此时不进行渲染 sprite->visit(); //在所有的visit结束后在调用end进行真正的渲染 rend->end(); //CCRenderTexture还有清除屏幕中的渲染操作。参数为需要清屏的颜色的ARGB值 rend->clear( CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1() ); //CCRenderTexture还有将屏幕另存为图片的功能。 //将图片存储为PNG格式 rend->saveToFile( png, kCCImageFormatPNG ); //将图片存储为JPG格式 rend->saveToFile( jpg, kCCImageFormatJPEG ); //获得存储的图片 CCImage* pImage = rend->newCCImage(); //获得贴图 CCTexture2D* tex = CCTextureCache::sharedTextureCache()->addUIImage( pImage, png ); CC_SAFE_DELETE(pImage); //用贴图新建精灵 CCSprite* sprite = CCSprite::create( tex );
2、绘制方法对比
在Cocos2D-x中渲染和绘制的方法包括精灵和精灵表单的绘制、OpenGL的绘制、CCRenderTexture类的绘制等。
1)、精灵表单CCSpriteBatchNode绘制方式
用CCSpriteBatchNode生成的CCSprite精灵共用一个纹理,这样的好处是生成很多相同的CCSprite,很高效,帧率可以很高、很稳定。
使用CCSpritebatchNode精灵表单绘制的优势不言而喻,简单并且高效,但是它也有一些缺点,就是CCSpriteBatchNode精灵表单对象的子节点,也就是说是使用CCSpriteBatchNode精灵表单绘制的精灵个数是有一定的限制的,超过这个限制就有可能会出现绘制不出的现象。原因是CCSpritebatchNode在添加子节点时会重新分配内存,当需要分配的内存很大时,会导致内存分配失败,从而CCSpritebatchNode添加子节点的操作会没有效果。
2)、OpenGL绘制方式
在Cocos2D-x中,OpenGL的绘制方式一般在draw这个函数里面调用其相关函数。当然Cocos2D-x也集成了几个常用的OpenGL绘制函数:ccDrawLine、ccDrawCircle等。OpenGL绘制的优势就是绘制方式比较自由,每帧调用的逻辑更新update函数结合起来,但是对于没有OpenGL经验的开发人员,进行这样的开发比较浪费时间,而且这种绘制方式比较耗费效率,并且不是推荐的方法。这种OpenGL绘制方式只适合绘制特定效果时使用。
3)、CCRenderTexture类的绘制方式
CCRenderTexture类似一张空白的“画布”,只要begin函数开启“记录”功能后,任何之后的CCNode节点类对象只要调用visit函数,就能将自己绘制在其身上。所以一般游戏的截屏功能,完全可以使用CCRenderTexture来实现。
这种方式的优势就是使用方法简单,可以轻松实现截屏等功能。由于每个使用Android操作系统的手机的硬件或支持OpenGL版本不一样,有些手机用CCRenderTexture会出现花屏。这点会在不同手机的Android版本移植中造成困难,因此,不建议采用CCRenderTexture的绘制方法。
相关文章推荐
- 【Cocos2d-X开发学习笔记】第03期:渲染框架之导演类(CCDirector)的使用
- cocos2d-x学习笔记—图片按钮
- 【学习笔记】cocos2d 如何绘制一张图片
- 【Cocos2d-X开发学习笔记】第03期:渲染框架之导演类(CCDirector)的使用
- 【Cocos2d-X开发学习笔记】第05期:渲染框架之布景层类(CCLayer)的使用
- cocos2d-x 3.6版本学习笔记-渲染过程
- cocos2d-x学习笔记之图片分辨率适配
- cocos2d-x学习笔记(一):渲染框架1
- 【学习笔记】cocos2d-x 如何创建一个按钮(文本按钮、图片按钮)
- 【Cocos2d-X开发学习笔记】第06期:渲染框架之精灵类(CCSprite)的使用
- cocos2d-x 菜鸟学习笔记三(图片预加载与进度条)
- cocos2d-x学习笔记—图片按钮
- 【Cocos2d-X开发学习笔记】第10期:渲染框架之几何图形的绘制
- cocos2d-x 菜鸟学习笔记三(图片预加载与进度条)
- 【Cocos2d-X开发学习笔记】第05期:渲染框架之布景层类(CCLayer)的使用
- 【Cocos2d-html5游戏引擎学习笔记(3)】渲染文字
- 【Cocos2d-html5游戏引擎学习笔记(5)】Sprite精灵渲染
- Cocos2d-X 学习笔记 20 利用CCSpriteBatchNode提高渲染效率
- 【Cocos2d-X开发学习笔记】第09期:渲染框架之菜单类(CCMenu)的使用
- Cocos2d-x学习笔记(十二)之 文本渲染类