2015-03-21 2 views
0

Я новичок в SpriteKit game dev. В моей игре, когда персонаж коснется врага, он покажет игру поверх сцены и перезапустит ее.Double Tap делает краш SpriteKit Game

Однако после игры над сценой, двойная игра делает крушение приложения. Вот мои коды в MainGameScene.

- (void)gameOver 
{ 
    GameOver *over = [[GameOver alloc] initWithSize:self.size]; 
    SKTransition *trans = [SKTransition flipHorizontalWithDuration:0.5]; 
    [self.view presentScene:over transition:trans]; 
} 

И вот сцена GameOver.

- (instancetype)initWithSize:(CGSize)size 
{ 
    self = [super initWithSize:size]; 
    { 
     SKLabelNode *lblGameOver = [[SKLabelNode alloc] initWithFontNamed:@"Chalkduster"]; 
     lblGameOver.text = @"Game Over"; 
     lblGameOver.position = CGPointMake(self.size.width/2, self.size.height/2); 
     lblGameOver.fontSize = 35; 
     lblGameOver.fontColor = [UIColor whiteColor]; 
     lblGameOver.zPosition = 2; 
     [self addChild:lblGameOver]; 
    } 

    return self; 
} 

- (void)didMoveToView:(SKView *)view 
{ 
    [super didMoveToView:self.view]; 

    UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc] 
             initWithTarget:self action:@selector(newGame)]; 
    [view addGestureRecognizer:tapper]; 
} 

- (void)newGame 
{ 
    GameScene * scene = [[GameScene alloc] initWithSize:self.size]; 
    SKTransition *trans = [SKTransition flipHorizontalWithDuration:0.5]; 
    [self.view presentScene:scene transition:trans]; 
} 

Это делает крушение моего приложения, когда я дважды касаюсь новой сцены игры. Сообщение об ошибке

Thread 1 : EXC_BAD_ACCESS (code=1,address=0x0) 

Как я могу это исправить?

+1

Это было чувство, пока я играл с диам жестов, но моя догадка, что вы никогда не удалить старую водопроводную жест с точки зрения и пытается для вызова метода, который исчез. Возможно, вам понадобится создать свойство для этого жестов tap и удалить его из представления, прежде чем представить следующую сцену. –

ответ

0

Попробуйте это в методе didMoveToView:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(newGame)]; 
[self.view addGestureRecognizer:tapRecognizer]; 
tapRecognizer.numberOfTapsRequired = 2; // 1 for a single tap or 2 for a double tap