0

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


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

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

有什么意见lz~

4

3 回答 3

4

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

如果你有一个使用“tex.png”的精灵,那么 tex.png 将被加载到内存中。如果您还使用 tex.png 添加了更多的精灵,那么只有精灵对象本身会使用更多的内存(几百字节),但纹理在加载后会被重新使用。即,您将拥有一个 gazillion 加上一个 sprite,所有这些都来自相同的纹理。

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

于 2012-11-22T19:52:27.563 回答
2

CCSpriteBatchNode 将是你最好的朋友。

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

然后只需将 100 多个 Sprite 添加到您的批次中。他们只使用一种复制纹理。

于 2012-11-22T06:56:40.613 回答
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""));

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

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

于 2012-11-22T11:25:02.613 回答