Cocos2d-x:如何从100个相同的精灵中优化内存?

Jav*_*ner 1 cocos2d-iphone ccsprite cocos2d-x ccspritebatchnode

我的任务是在帧中绘制一个精灵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 ] );

}
Run Code Online (Sandbox Code Playgroud)

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

Pea*_*der 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果不使用批处理,将会有滞后而不是因为内存,而是因为大量的绘制调用.我想你们都知道=)所以减少内存 - 是的,JavaRunner可以使用pvr.ccz格式.要删除由于绘制数百个精灵而造成的滞后 - 他应该使用批处理节点=) (5认同)