Я хочу приостановить и отключить сцену в 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, Сцена продолжается. Поэтому теперь только изображения не будут меняться. Как я могу это исправить?
Вам необходимо вручную обновить кнопку до типа воспроизведения, где вы приостанавливаете сцену и наоборот. – Woodstock
И как мне это сделать наилучшим образом? Я подумал, что с BOOL он получит уведомление. – 2014-09-01 16:18:12
Проблема заключается в том, что метод init вызывается только один раз! На init! Вам нужно переместить код, который обрабатывает обновление bool, методу, который вызывается каждый раз при возникновении паузы/воспроизведения. Вы понимаете? – Woodstock