3.游戏优化(CCSpriteBatchNode)



1 FPS含义

2
渲染树的结构

3
优化原理

CCSpriteBatchNode介绍

A
先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染调用。也就是说,渲染的次数越少,游戏的运行效率越高。

B CCSpriteBatchNode就是cocos2d-x为了降低渲染批次而建立的一个专门管理精灵的类。

C
如果要加载1000个精灵,加载,渲染重复执行1000次,使用CCSpriteBatchNode批量渲染,一次渲染就把所有的CCSprite绘制出来。大量降低渲染批次。

4
案例说明:


BachNode.h


#ifndef
__BACHNODE_H__

#define
__BACHNODE_H__

#include
"cocos2d.h"

USING_NS_CC;

class
BachNode :public
CCLayer

{

public:

static
CCScene *
scene();

CREATE_FUNC(BachNode);

bool
init();

virtual
bool
ccTouchBegan(CCTouch
*pTouch,
CCEvent *pEvent);

//创建BatchNode

CCSpriteBatchNode 
*batchNode;

};

#endif


BachNode.cpp


#include
"BachNode.h"

#include
"AppMacros.h"

CCScene *BachNode::scene()

{

CCScene *
scene =
CCScene::create();

BachNode *
layer =
BachNode::create();

scene->addChild(layer);

return
scene;

}

bool
BachNode::init()

{

CCLayer::init();

setTouchEnabled(true);

setTouchMode(kCCTouchesOneByOne);

//初始化成员batchNode

//batchNode = CCSpriteBatchNode::create("CloseNormal.png");

//第一步:通过CCSpriteBatchNode的方式进行添加

//将小图中的东西先绘制成一张大图,然后将它们缓存到CCSpriteFrameCache中了

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("batchnode/plant.plist");

//然后将大图渲染

batchNode =
CCSpriteBatchNode::create("batchnode/plant.png");

//第二部:将batchNode添加到CCLayer中

addChild(batchNode);

return
true;

}

bool
BachNode::ccTouchBegan(CCTouch
*pTouch,
CCEvent *pEvent)

{

static
bool
flag =
true;

CCSprite *spr;

for (int
i = 0;
i < 1000;
i++)

{

//1.下面的方式是加载一张图的情况

//CCSprite *spr = CCSprite::create("CloseNormal.png");

//通过CCRANDOM_0_1()获得一个0到1的节点

//spr->setPosition(ccp(CCRANDOM_0_1() * 480, CCRANDOM_0_1() * 320));

//batchNode->addChild(spr);

//2.通过下面的方式加载两类图

if (flag)

{

//因为已经加载到缓存中,所以直接可以通过createWithSpriteFrameName加载图片

spr =
CCSprite::createWithSpriteFrameName("p_2_01.png");

}

else

{

spr =
CCSprite::createWithSpriteFrameName("p_3_01.png");

}

spr->setPosition(ccp(CCRANDOM_0_1()
* 480, CCRANDOM_0_1() * 320));

//batchNode在头文件中定义的有

batchNode->addChild(spr);

flag = !flag;

}

return
false;

}


运行结果:

时间: 2024-08-10 00:01:09

3.游戏优化(CCSpriteBatchNode)的相关文章

AS3.0网页游戏优化一

有道无术,术尚可求,有术无道,止于术.神即道,道法自然,如来! 借用上面的一句话,来开启AS3.0网页优化的一些策略,在从事大约两年多的网页游戏行业,对于AS3.0性能优化,有一些自己的见解和想法,及此分享给大家,仅供抛砖引玉,鄙人拙见,愿给从事网页游戏的人以启迪. 我认为AS3.0的性能分两部分,第一部分是技术性优化,就是在理解flash 弹性跑道模型渲染原理和AVM本身一些垃圾回收原则等,对自己的程序进行一系列的性能优化.第二部分是游戏逻辑性优化.我只从事过2.5D arpg网页游戏的制作,

网页版《2048游戏》教程 - 游戏优化

1.     GameOver部分 下面我们来分析游戏是如何结束的.一种情况是棋盘格中没有空的格子了,一种情况是棋盘格中没有可以移动的格子了. 首先,完成isgameover()方法的逻辑. function isgameover() { if (nospace(board) && nomove(board)) { gameover(); } } 其次,完成棋盘格中没有空的格子. function nospace(board) { for (var i = 0; i < 4; i++

&lt;20&gt;【掌握】《走出迷宫》游戏代码实现+【理解】《走出迷宫》游戏优化

#include <stdio.h> #define COL 6 #define ROW 6 int main(int argc, const char * argv[]) { //****** 定义变量 ********** //1.定义变量,地图.存储用户输入的方向.小人的位置     char map[ROW][COL]={         {'#','#','#','#','#','#'},         {'#','O','#','#',' ',' '},         {'#'

【转】 各种 基于Unity3d 引擎的Android游戏优化 (drawcall)

1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他们都兼容ETC格式, 2. 对于透明贴图,我们只能选择RGBA 16bit 或者RGBA 32bit. 3. 减少FPS,在ProjectSetting-> Quality中的VSync Count 参数会影响你的FPS,EveryVBlank相当于FPS=60,EverySecondVBlank = 30: 这两种情况都不符合游戏的FPS的话,我们需要手动调整FP

cocos2d-x 游戏优化方案

优化的方案: 引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化. 纹理优化: cocos2d-x 底层是OPenGL ES实现的. 对于图案片载入的内存是2的幂次方. 使用的图片是100*128 会被转为128*128. 如此浪费一定的空间. 色深优化:png图片: A8R8G8B8 A1R5G5B5 ARGB4444  有透明效果:jpg图片:RGB888 RGB555    无透明效果. 不影响图片效果的前提下能够使用较低的色深使用. 纹理压缩格式:ios设备使用的是powervr现实芯

基于Unity3d 引擎的Android游戏优化(转)

转载源:http://www.manew.com/thread-47240-1-1.html 最近项目进入收尾阶段,之前对项目做了很多优化,mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等,在IOS上还好,但是上,试过几款手机,从低端到高端,发现性能还是很差,所以又花了几天来研究摸索,终于把游戏性能搞定.记录下来,留作以后参考. 1. 更新不透明贴图的压缩格式为ETC 4bit,因为android市场的手机中的GPU有多种,每家的GPU支持不同的压缩格式,但他

【总结】Unity游戏优化

1.Profiler中一项"WaitForTargetFPS"费资源过高的原因 画面撕裂,显卡渲染输出的速度与显示器不同步, 如果显示器刷新的同时,显卡创造了新的帧,就会出现上半显示器显示前一帧,下半显示器刷新到下一帧画面的"撕裂"现象.常见于高帧数显卡与低帧数显示器上~ 垂直同步(V-Sync),通过延时让显卡等显示器输出完毕后再"生产"下一帧画面,将游戏帧数锁定到和你的显示器刷新频率一样,从而达到画面的同步. WaitForTargetFPS

(转\整)UE4游戏优化 多人大地型游戏的优化(三)GPU的优化

施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因为所看和以前记录太过杂乱,所以只能手动一点点搬移(回忆,整理).欢迎讨论,知识和能力总是被问出来了不是(嘿嘿,这样才能成长), 若有不对别喷就好哈哈. 引言: 文章四方面包括了从游戏线程.渲染线程.GPU.内存等的优化,提升游戏技术底子. 原作者:王祢,Epic Games 资深开发者技术支持,管理

Swift数独游戏优化&mdash;&mdash;C++与OC混编、plist自动生成

一.为什么要C++与OC混编? 在我之前的数独游戏中涉及到的数独游戏生成算法是参考的网上其他人的算法,是利用C++来实现的.   但是在我的例子中我发现这样存在一定的局限性: 1.我是利用Terminal的重定向功能来实现输出的,这样不能查看程序的实际运行状态信息. 2.C++编写的代码不能直接生成plist文件,而OC有直接的API可以生成plist文件.(当我前几天刚知道的时候我感觉之前用C++生成plist是有多勇敢)   二.如何进行C++与OC混编? 1.OC文件后缀改为"mm&quo