Cocos2d-x学习笔记(三十二)之图片渲染

  在Cocos2D-x中通过CCRenderTexture可以实现更好的渲染效果。本节就来看一下CCRenderTexture的使用、和其它渲染的对比。

  1、CCRenderTexture的使用

  使用CCRenderTexture的过程总结起来就一句话,首先用begin方法开始整个控制,采用节点中的visit方法加入渲染,最后调用end方法介绍整个控制并渲染。使用的示例如下:

 1 //定义一个CCRenderTexture对象,参数为宽高
 2 CCRenderTexture* rend = CCRenderTexture::create( 32,64, kCCTexture2DPixelFormat_RGBA8888 );
 3 //像节点一样放入场景层中
 4 this->addChild( rend );
 5 //在需要处理渲染管理时调用开始函数
 6 rend->begin();
 7 //需要渲染的对象调用visit,但是此时不进行渲染
 8 sprite->visit();
 9 //在所有的visit结束后在调用end进行真正的渲染
10 rend->end();
11 
12 
13 
14 //CCRenderTexture还有清除屏幕中的渲染操作。参数为需要清屏的颜色的ARGB值
15 rend->clear( CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1(), CCRANDOM_0_1() );
16 
17 
18 //CCRenderTexture还有将屏幕另存为图片的功能。
19 //将图片存储为PNG格式
20 rend->saveToFile( png, kCCImageFormatPNG );
21 //将图片存储为JPG格式
22 rend->saveToFile( jpg, kCCImageFormatJPEG );
23 //获得存储的图片
24 CCImage* pImage = rend->newCCImage();
25 //获得贴图
26 CCTexture2D* tex = CCTextureCache::sharedTextureCache()->addUIImage( pImage, png );
27 CC_SAFE_DELETE(pImage);
28 //用贴图新建精灵
29 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的绘制方法。

原文地址:https://www.cnblogs.com/atong/p/3287520.html