ゲームで再試行ボタンを押したときに、MainScene をリロードするようにします。私はこれをやっています:
-(void)retry
{
SKTransition *transition = [SKTransition fadeWithDuration:.4];
MainScene *gameOver = [[MainScene alloc] initWithSize:self.size];
[gameOver didMoveToView:self.view];
[self.scene.view presentScene:gameOver transition:transition];
}
ただし、これにより、再試行するたびにメモリ/CPU 使用率が (大幅に) 増加します。約 10 ~ 20 回の再試行の後、顕著な遅延が発生します。
すべての SKEmitterNode と SKSpriteNode を静的にして、メモリの問題を修正したので、スプライト、エミッタなどがメモリから解放されず、再試行するたびに再ロードされて、2 倍になっていると思われます。
次のようにスプライト/エミッターをロードしています。
@implementation MainScene {
SKEmitterNode *_bubbleEmitter;
SKSpriteNode *_sunglasses;
...
}
- (id)initWithSize:(CGSize)size
{
if (self = [super initWithSize:size])
{
_sunglasses = [SKSpriteNode spriteNodeWithImageNamed:@"sunglasses"];
[_sunglasses setPosition:CGPointMake(self.size.width/2, self.size.height + 10)];
[self addChild:_sunglasses];
...
}
return self;
}
スプライトのロードまたは再試行が間違っていますか?