我需要从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];
}
感谢
答案 0 :(得分:1)
我倾向于远离装载'大体上:即我在开始场景(或切割场景)之前预加载所有纹理,通常是在过渡期间。当卡住时,我必须动态加载(因为预加载纹理的内存占用太高),我将使用pvr纹理(未压缩),牺牲捆绑大小来获得加载期间的加载速度和内存使用量。 YMMV,取决于你需要动态切换的单个纹理的大小'。
此外,如果您只需要精灵或动画,请不要使用批处理节点。没有任何收获,但清理和清理成本很高。