我想做的事:
我想使用精灵表来加载游戏中的所有敌人。一旦它们被好人摧毁或离开屏幕,它们就必须被移除。我有 6-7 个敌人,其中一些是动画。我将多次重复使用它们。我想从内存中有效地加载和卸载它们。
我在做什么:
我首先加载精灵表:
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Obstacles.plist"];
CCSpriteBatchNode *obstaclesspriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"Obstacles.pvr.ccz"];
[self addChild:obstaclesspriteSheet];
我有一个名为 BadBoys 的类来处理坏人。每次我想创建一个坏人时,我都会创建一个类的实例。在类中,我创建了精灵并将其添加到图层中。
baddies[x] = [[BadBoys alloc] init];
//INSIDE THE CLASS
baddie = [CCSprite spriteWithSpriteFrameName:@"cannonball-hd.png"];
当精灵被破坏时,我从图层中删除它,然后释放该类的实例。
[self removeChild:[baddies[x] getBaddie] cleanup:YES]; //getBaddie returns the sprite
[baddies[x] release];
我知道这是一个很好的方法。我想知道的是这是否是最有效的方法?我想到了另一种加载图像的方法:
将图像异步加载到 CCTextureCache。然后使用缓存中的纹理创建一个精灵。将它添加到一个 NSMutableArray 中,它将容纳所有活着的敌人然后当我不再需要它时,我可以通过以下方式摧毁它:
CCTexture2D * texture = spriteName.texture;
[spriteName.parent removeChild:spriteName cleanup:YES];
[[CCTextureCache sharedTextureCache] removeTexture:texture];
[backgroundSprites removeObject:spriteName];
这是更好的方法吗?请分享您的观点和建议。谢谢。