我可以使用暂停按钮(SKSpriteNode)和一个简单的方法暂停和取消暂停SKScene。
-(void) pauseGame {
SKView *view = (SKView *) self.view;
if(!view.paused){
view.paused = YES;
}else{
view.paused = NO;
[pauseLabel removeFromParent];
}
}
并在touchesBegan方法
中调用它-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
// If game is paused allow the button to be touched
if (isGamePaused == NO) {
//if pause button touched, pause the game
if (node == pauseButton) {
[self pauseGame];
}
}
}
这种方式很好。我可以按下按钮暂停游戏并再次按下以取消暂停游戏。但是,我想让用户知道游戏暂停,然后屏幕被冻结,所以我尝试了这个:
我创建了这个SKLabel。
-(void) addPauseLabel {
// Creating label
pauseLabel = [SKLabelNode labelNodeWithFontNamed:universalFont];
pauseLabel.text = @"Game is Paused";
pauseLabel.fontSize = 42;
pauseLabel.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2 + 60);
pauseLabel.zPosition = 6;
[self addChild:pauseLabel];
}
然后我创建了一个序列,我在其中添加标签然后暂停游戏
-(void) pauseSequence{
SKAction *pauseSequence = [SKAction sequence:@[
[SKAction performSelector:@selector(addPauseLabel) onTarget:self],
[SKAction performSelector:@selector(pauseGame) onTarget:self],
]];
[self runAction:pauseSequence];
}
最后,在touchesBegan方法中,我调用[self pauseSquence];最后而不是[self pauseGame];
当我按下暂停按钮时,标签被添加并且游戏被暂停,但是再次按下按钮以取消游戏并没有做任何事情。这是为什么?任何帮助将不胜感激。谢谢。
答案 0 :(得分:0)
您的取消暂停按钮无法正常工作的最可能原因是暂停后,无法检测到任何触摸。你基本上把自己锁定在场景之外,这意味着场景无法完成任务。
暂停SpriteKit游戏的普遍接受的方法是不暂停场景,而是创建多个节点。一个节点将包含您的游戏玩法("游戏图层"),另一个节点将包含暂停元素("暂停图层")。当您的场景检测到按下暂停按钮时,将游戏层中的所有内容设置为暂停,然后调出暂停层。按下恢复按钮时,隐藏暂停图层并取消暂停游戏图层。
答案 1 :(得分:0)
你应该知道这个序列在这里没有用处。最好只打电话:
[self addPauseLabel];
[self pauseGame];
由于这是主要的变化,奇数和不必要地使用序列可能导致这种行为。
答案 2 :(得分:0)
视图暂停时您无法执行操作,因此如果视图未暂停,则应致电[self pauseSequence]
;如果视图暂停,则应[self pauseGame]
。
在touchesBegan
方法
if (!self.view.paused) {
// Add label and pause
[self pauseSequence];
}
else {
// Resume game
[self pauseGame];
}