(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性能问题(一)减少内存的使用、纹理的渲染及glDrawArray的访问
最新推荐文章于 2021-06-03 15:12:01 发布