zoukankan      html  css  js  c++  java
  • 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的绘制方法。

  • 相关阅读:
    谈谈Vue.js——vue-resource全攻略
    XStream(xml/bean转换)
    Notepad++ xml/json格式化
    秒杀系统架构分析与实战
    Spring事务管理
    小程序思维导图(一)
    小程序思维导图(二)
    轻松搭建持续集成工具jenkins
    rep stos dword ptr es:[edi]
    关于dword ptr 指令
  • 原文地址:https://www.cnblogs.com/atong/p/3287520.html
Copyright © 2011-2022 走看看