cocos2d-x ios游戏开发初认识(六) 渲染的优化

做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大。这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染一次。

以下是程序的做法,先屏蔽前面的代码。

先简介一下 CCSpriteBatchNode类,它是用来优化游戏渲染效率的。CCSpriteBatchNode 中的全部CCSprite仅仅会被渲染1次,因此能够提高游戏的FPS。限制:增加到CCSpriteBatchNode 中的CCSprite必须使用同一张纹理图。

详细代码

    CCSpriteBatchNode *node =CCSpriteBatchNode::create("Peashooter1.tiff");//先渲染文件

   this->addChild(node);

   CCSprite *plant = CCSprite::create("Peashooter1.tiff"); //创建精灵

    plant->setPosition(ccp(300,300));

    node->addChild(plant);                                  //加入到 node

执行:


能够看到 加入一个精灵 此时的FPS为1。以下再加入一个文件同样精灵:

    CCSpriteBatchNode *node =CCSpriteBatchNode::create("Peashooter1.tiff");//先渲染文件

    this->addChild(node);

    CCSprite *plant = CCSprite::create("Peashooter1.tiff"); //创建精灵

    plant->setPosition(ccp(300,300));

    node->addChild(plant);                                  //加入到 node

    

    //再创建一个精灵

    CCSprite *plant1 = CCSprite::create("Peashooter1.tiff"); //创建精灵

    plant1->setPosition(ccp(400,400));

    node->addChild(plant1);

    return true;

执行:


能够看到两个精灵都被创建出来了,可是FPS还是为1。这就是CCSpriteBatchNode的作用,它保证加入到类里面全部同样文件的精灵仅仅被渲染一次。


既然同样的精灵能够仅仅渲染。那么不同的文件的精灵可不能够仅仅被渲染一次,答案是能够的。看以下的做法。

这时要用到第(五)篇文章讲的内容。详细做法是我们能够先把非常多种不同的图片合成一张大图,然后将这张大图加入到CCSpriteBatchNode中。这时渲染大图里面的小图都会仅仅被渲染一次,看详细程序做法:

    ///*假设想让不同图片仅仅渲染一次得要用到帧缓存机制渲染多个不同的图片 */

    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("Person.plist"); //先缓存大图

    CCSpriteBatchNode *node1 =CCSpriteBatchNode::create("Person.png");//渲染到一个大图片

   this->addChild(node1);

    

    CCSpriteFrame *frame =CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(".png");

   CCSprite *plant3 =CCSprite::createWithSpriteFrame(frame);

    plant3->setPosition(ccp(200,200));

    node1->addChild(plant3);

    

    CCSpriteFrame *frame1 =CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(".png");

   CCSprite *plant4 =CCSprite::createWithSpriteFrame(frame1);

    plant4->setPosition(ccp(500,500));

    node1->addChild(plant4);

这个大图 全部小图片的名字:


执行:


我们能够看到又添加了两张图片。并且这两张图片不是一样的,可是FPS还是为2仅仅加了1,表示新添加的两个精灵仅仅被渲染了一次,如今我们发现帧缓存机制 是很强大的,在游戏开发中经经常使用到。


转载于:https://www.cnblogs.com/gccbuaa/p/6777279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值