1

我的任务是在帧中绘制一个精灵 100 次。例如,我需要画一行由一个精灵“sprite.png”组成。我这样做:

CCSprite *spriteArr[ 100 ];

for ( unsigned int i = 0; i < 100; i++ ) {

    spriteArr[ i ] = new cocos2d::CCSprite();
    spriteArr[ i ]->initWithFile( "sprite.png" );
    spriteArr[ i ]->setPosition( cocos2d::CCPoint( i * 10, 100 ) );

    this->addChild( spriteArr[ i ] );

}

这就是问题所在。我只为一个精灵分配内存 100 次,但我不知道如何以不同的方式进行。我该如何优化它?Cocos2d 中是否有一种方法可以使用坐标(x 和 y)绘制精灵,但不为每个相同的精灵分配内存?

4

2 回答 2

6

因为所有 100 个精灵都使用相同的纹理,所以最好的方法是使用CCSpriteBatchNode. 它将在 1 个单一的 OpenGL 调用中绘制它们。

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create("sprite.png", 100);
batchNode->setPosition(CCPointZero);
this->addChild(batchNode);

for(int i = 0;i < 100;++i)
{
   CCSprite* sprTest = CCSprite::createWithTexture(batchNode->getTexture());
   sprTest->setPosition(ccp(i*10,100));
   batchNode->addChild(sprTest);
}
于 2013-04-05T04:25:53.183 回答
4

你很厉害。所有 100 个精灵都将引用同一个纹理对象,因此它只是内存中的一个纹理。每个 sprite 实例在此之上添加的内存少于 500 字节。

节省内存的最佳选择是使用 .pvr.ccz 格式的图像。

于 2013-04-05T08:04:49.900 回答