切换CCSpriteBatchNode的性能方式是什么?

时间:2014-04-10 16:50:59

标签: objective-c cocos2d-iphone ccspritebatchnode

我需要从CCSpriteBatch节点切换纹理图集。我选择的方法是,在可玩角色到达特定X轴(700)之后,游戏改变它。

它在视觉上很好用,但问题是,它在更改时会冻结屏幕2-3秒,并在控制台中收到内存警告。

我不认为我是唯一一个曾经这样做的人,这让我想知道切换CCSpriteBatchNode的正确(最轻)方式是怎样的。

见下面的当前切换代码:

if(mainCharacter.x > 700)
{
    //NSLog(@"switch!");

    float oldHeroX, oldHeroY;

    oldHeroX = mainCharacter.x;
    oldHeroY = mainCharacter.y;

    [_myBatchNode removeChild:mainCharacter];
    [[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:texturePList1];
    [self removeChild:_myBatchNode];



    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:texturePList2];
    _myBatchNode = [CCSpriteBatchNode batchNodeWithFile:texturePNG2];
    [_myBatchNode.texture setAliasTexParameters];
    [self addChild: _myBatchNode z:-6];

    //this is just a method that starts the playable character sprite and add to batch node and layer
    [self startCharacter:oldHeroX :oldHeroY];
}

感谢

1 个答案:

答案 0 :(得分:1)

我倾向于远离装载'大体上:即我在开始场景(或切割场景)之前预加载所有纹理,通常是在过渡期间。当卡住时,我必须动态加载(因为预加载纹理的内存占用太高),我将使用pvr纹理(未压缩),牺牲捆绑大小来获得加载期间的加载速度和内存使用量。 YMMV,取决于你需要动态切换的单个纹理的大小'。

此外,如果您只需要精灵或动画,请不要使用批处理节点。没有任何收获,但清理和清理成本很高。