`
fireDragonpzy
  • 浏览: 441547 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

cocos2d-x性能问题(一)减少内存的使用、纹理的渲染及glDrawArray的访问

阅读更多
(1) 内存问题及纹理的渲染
当我们把游戏放到ios和android上的时候,我们就得考虑OpenGL ES(embedded system)优化的问题,主要问题就是内存(显存)问题和运行速度。
本小专题讲内存:OpenGL ES  纹理的宽和高都要是2的幂指数,480x320的图片载入内存, 它其实会被变成一张 512x512 的纹理,所以如果使用单个精灵的载入,必然会引起内存的浪费,而且一次次的载入单个精灵会增加纹理的渲染数,若精灵一多,会影响游戏的速度
解决:
//加载地图纹理集,解决内存问题,减少纹理切换
		CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();
		cache->addSpriteFramesWithFile("ninja.plist", "ninja.png");

		CCSprite *projectile = CCSprite::spriteWithSpriteFrameName("Projectile.png");
		CCSprite *target= CCSprite::spriteWithSpriteFrameName("Target.png");
		CCSprite *player= CCSprite::spriteWithSpriteFrameName("Player.png");

		projectile->setPosition(ccp(50, 20));
		target->setPosition(ccp(120, 20));
		player->setPosition(ccp(220, 20));

		this->addChild(projectile);
		this->addChild(target);
		this->addChild(player);

(2)运行速度:纹理的渲染和GLDrawArray的调用
画一个图像都会切换一次纹理并呼叫一次 GLDrawArray , 要是画几百个图像 , 你可想而知
解决:
	//减少对dlDrawArray的呼叫(每画一个图都会呼叫一次)
		CCTexture2D *texture = CCTextureCache::sharedTextureCache()->textureForKey("ninja.png");
		CCSpriteBatchNode *spriteBatch = CCSpriteBatchNode::batchNodeWithTexture(texture);

		this->addChild(spriteBatch);

		spriteBatch->addChild(projectile);
		spriteBatch->addChild(target);
		spriteBatch->addChild(player);
                this->addChild(spriteBatch);
分享到:
评论

相关推荐

    我所理解的Cocos2d-x ,秦春林编著

    Cocos2d-x的基本架构及渲染机制、纹理相关的知识、OpenGL ES 2.0渲染管线、计算机字体的绘制、多分辨率支持、事件分发、碰撞与物理引擎、游戏对象模型架构、Genius-x开源框架、脚本在游戏引擎中的架构等。...

    我所理解的Cocos2d-x ,秦春林编著 ,P4381.pdf

    Cocos2d-x的基本架构及渲染机制、纹理相关的知识、OpenGL ES 2.0渲染管线、计算机字体的绘制、多分辨率支持、事件分发、碰撞与物理引擎、游戏对象模型架构、Genius-x开源框架、脚本在游戏引擎中的架构等。

    我所理解的Cocos2d-x

    Cocos2d-x的基本架构及渲染机制、纹理相关的知识、OpenGL ES 2.0渲染管线、计算机字体的绘制、多分辨率支持、事件分发、碰撞与物理引擎、游戏对象模型架构、Genius-x开源框架、脚本在游戏引擎中的架构等。...

    Cocos2D-X游戏开发技术精解

    第1章 Cocos2D-X引擎的介绍 1 1.1 何为游戏引擎 1 1.1.1 游戏的核心—引擎 1 1.1.2 引擎的特点 2 1.1.3 知名的引擎介绍 4 1.1.4 引擎的分类 5 1.2 Cocos2D-X引擎的来历 8 1.3 引擎的版本 9 1.4 下载与安装 10 1.5 ...

    cocos2d-x学习笔记——双重纹理透明特效

    我们了解到,渲染sprite的类是TriangleCommand,这个类只能渲染多个三角形,并且只能渲染一块纹理。因此,我们要使用CustomCommand来渲染两块纹理。 详情:https://www.jianshu.com/p/94645feba9bb

    3D-Viewer:3D View 是一个实验项目,将 Cocos2d-x 扩展为具有 3D 功能

    3D 浏览器3D View 是一个实验项目,它将 Cocos2d-x 扩展为具有 3D 功能。目的该项目背后 3D Viewer 的主要动机是研究和学习 Cocos2d-x 的渲染管道和场景管理。 因此,此存储库中的文件主要演示如何实现 3D 渲染。...

    artshow:Cocos2D-JS的动态artshow跨平台应用程序

    =========-분은[/](./ko.md)를이용해주세요。... 核webgl 行动声音的菜单渲染纹理精灵批处理节点标签进度计时器过渡它仅包含Cocos2d-JS Web引擎。 如果要制作本机应用程序,则需要Cocos2d-JS完整软件包,请参阅 。截屏

    MagicTools引擎(d3d与opengles渲染器,集成cocos2d)

    MagicTools引擎,包括3d场景,材质,d3d与opengles两个渲染器,max导出插件,集成了cocos2d作为ui。 引擎架构如下: 1.MtFoundation:底层数学库、字符串处理、操作系统和编译器宏定义等底层封装库。这些功能放在了...

    cocos手动截图实现(可以截取屏幕的一部分)

    在cocos中如何手动选取(区域)截图呢?我这里想到了一种方法:使用RenderTexture与设置层位置(先改后还)来完成。...全屏截图可以使用以前的方法用渲染纹理来做,也可以使用cocos2d::utils::captureScreen来完成。

    OPhone平台2D游戏引擎实现——物理引擎

    碰撞检测通常是游戏开发的难点,作为引擎必然少不了碰撞检测部分,这里我们还是按照cocos2d的构架,使用Box2d作为物理引擎,下面我们将通过在Ophone平台实现一个小游戏,来对Box2d物理引擎进行学习。  Box2d  ...

    Flash转cocos2dx骨骼动画

    2 可以帮助2D网页游戏做GPU渲染优化; 3 可以快速将2D网页游戏资源转化为2D手机游戏资源; 4 适合flash爱好者开发cocos2dx手机游戏; 适用说明: 1 加载动画 -- 用于加载SWF资源,最终打包成序列帧资源; 2 加载...

    MagicTools引擎+编辑器+场景浏览器

    gles环境下定了一个简单的脚本,控制固定功能渲染中的diffuse、specular和第一层纹理的参数 自定义了模型网格、骨骼、动画、材质、渲染实体等文件格式,这些文件格式说明放在了fileformats目录下。 渲染实体(Model...

    飞翔的小鸟java源码-CyberBall:使用AndroidNDK测试项目

    Cocos2D、GLKit、SpriteKit、QT、GLUT、SDL、Box2d、BulletPhysics 不允许 我非常重视这些限制。 所以这个项目中没有这些库,甚至没有 png 加载器。 纹理和几何的某些部分在代码中进行了硬编码,这适用于这样的小型...

Global site tag (gtag.js) - Google Analytics