3

ゲームで再試行ボタンを押したときに、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;
}

スプライトのロードまたは再試行が間違っていますか?

4

1 に答える 1