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

本文探讨了在iOS和Android平台上使用OpenGLES进行游戏开发时遇到的内存和运行速度问题,并提供了具体的解决方案,包括使用纹理集来减少内存消耗和通过SpriteBatchNode减少对GLDrawArray的调用来提高运行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值