cocos2d-x,共享或重用CCTexture2D

时间:2012-11-22 06:01:47

标签: cocos2d-x

在我的游戏中,每个角色都有相同的纹理。 因此,如果一个场景中有100个字符, 应该有100个带纹理的精灵, 并且可能存在记忆问题。


所以我认为如果可以共享一个CCTexture2D,(我的意思是一个内存分配) 内存使用量将大幅下降。

是否可以使用静态或全局声明?

任何评论plz~

3 个答案:

答案 0 :(得分:4)

相同的精灵,相同的纹理。一个不能优化这种情况的游戏引擎无法真正称自己为游戏引擎。

如果你有一个使用“tex.png”的精灵,那么tex.png将被加载到内存中。如果你还使用tex.png添加了更多的sprite,那么只有sprite对象本身会使用更多的内存(几百个字节),但是一旦加载了纹理就会重新使用。也就是说,你将拥有数以万计的精灵,所有精灵都来自相同的纹理。

使用精灵批处理节点来提高使用相同纹理的精灵的渲染速度仍然适用,强烈建议使用,但不会影响内存使用。

答案 1 :(得分:2)

CCSpriteBatchNode将是您最好的朋友。

首先,使用您想要使用的纹理文件创建BatchNode。

然后只需将100+精灵添加到您的批次中。它们只使用一个复制纹理。

答案 2 :(得分:1)

有了m.ding的回答, 我解决了我的问题。

这是解决方案。

步骤1)将纹理定义为批处理节点。

batchNode = CCSpriteBatchNode::create("mans.pvr.ccz");
this->addChild(batchNode);
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("mans.plist");

步骤2)使用批处理节点的纹理创建精灵并将其添加到场景中。

CCSprite *man = CCSprite::createWithSpriteFrameName("body_black.png");
batchNode->addChild(man, 1, 1000);

步骤3)如果你想改变纹理,只需使用批处理节点的缓存纹理。

((CCSprite *)this->getChildByTag(1000))->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("body_red.png""));

就是这样〜。希望这有帮助!

更新:添加到批处理节点,而不是“此”。 :)