2014-09-01 1 views
2

Я хочу приостановить и отключить сцену в SpriteKit, используя 2 кнопки в том же положении. Пока Сцена работает, я хочу показать кнопку «Пауза». Пока сцена остановлена, я хочу скрыть кнопку «Пауза» и показать кнопку «Воспроизвести». В SpriteKit вы можете использовать self.scene.view.paused, который определен в SpriteKit.SpriteKit Пауза и возобновление SKView

Мой код:

@implementation MyScene { 

SKSpriteNode *PauseButton; 
SKSpriteNode *PlayButton; 

} 

-(id)initWithSize:(CGSize)size { 
if (self = [super initWithSize:size]) { 

[self Pause]; 

} 
return self; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
/* Called when a touch begins */ 

UITouch * touch = [touches anyObject]; 
CGPoint location = [touch locationInNode:self]; 

SKNode * Node = [self nodeAtPoint:location]; 

if([Node.name isEqualToString:@"PauseButton"]){ 

    self.scene.view.paused = YES; 

    [PauseButton removeFromParent]; 
    [self Resume]; 
} 

if([Node.name isEqualToString:@"PlayButton"]){ 

    self.scene.view.paused = NO; 

    [PlayButton removeFromParent]; 
    [self Pause]; 
} 
} 

-(void)Pause{ 

PauseButton = [SKSpriteNode spriteNodeWithImageNamed:@"Pause.png"]; 
PauseButton.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/1.04); 
PauseButton.zPosition = 3; 
PauseButton.size = CGSizeMake(40, 40); 
PauseButton.name = @"PauseButton"; 

[self addChild:PauseButton]; 

} 

-(void)Resume{ 

PlayButton = [SKSpriteNode spriteNodeWithImageNamed:@"Play.png"]; 
PlayButton.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/1.04); 
PlayButton.zPosition = 3; 
PlayButton.size = CGSizeMake(60, 60); 
PlayButton.name = @"PlayButton"; 
[self addChild:PlayButton]; 

} 

Он делает паузу на сцене, но есть еще кнопка паузы, и если я еще раз нажмите кнопку Pause, Сцена продолжается. Поэтому теперь только изображения не будут меняться. Как я могу это исправить?

+0

Вам необходимо вручную обновить кнопку до типа воспроизведения, где вы приостанавливаете сцену и наоборот. – Woodstock

+0

И как мне это сделать наилучшим образом? Я подумал, что с BOOL он получит уведомление. – 2014-09-01 16:18:12

+1

Проблема заключается в том, что метод init вызывается только один раз! На init! Вам нужно переместить код, который обрабатывает обновление bool, методу, который вызывается каждый раз при возникновении паузы/воспроизведения. Вы понимаете? – Woodstock

ответ

5

Вы не можете обновить кнопку (или что-либо еще на сцене), пока SKView приостановлен. В вашем методе touchesBegan вы приостанавливаете просмотр перед обновлением кнопки (изменение порядка не будет работать). Вам нужно будет вернуться в цикл выполнения, чтобы ваша кнопка была обновлена ​​до приостановки игры. Вот один из способов сделать это:

Это вызывает метод приостановки просмотра после короткой задержки. Добавьте это после вашего [self Resume] в touchesBegan и удалите self.scene.view.paused = YES.

[self performSelector:@selector(pauseGame) withObject:nil afterDelay:1/60.0]; 

Этот метод останавливает SKView. Добавьте это в свой MyScene.m.

- (void) pauseGame 
{ 
    self.scene.view.paused = YES; 
} 
+0

Большое спасибо. – 2014-09-02 08:27:01

 Смежные вопросы

  • Нет связанных вопросов^_^