0

我需要从 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];
}

谢谢

4

1 回答 1

1

总的来说,我倾向于远离“即时”加载:即我在开始场景(或过场动画)之前预加载所有纹理,通常是在过渡期间。当卡住时,我必须动态加载(因为预加载纹理的内存占用太高),我将使用 pvr 纹理(未压缩),牺牲包大小来获得加载过程中的加载速度和内存使用情况。YMMV,取决于您需要“动态”切换的各个纹理的大小。

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

于 2014-04-10T17:52:11.867 回答