我想在我的SpriteKit游戏中添加暂停菜单,但我总是遇到这段代码
self.scene.view.paused == YES
然而,它会暂停游戏内的所有事物,包括touchesBegan方法。因此,在我暂停游戏之前显示菜单时,我无法与其交互,因为touchesBegan不起作用。我已经在谷歌上搜索了这个问题,有些人只是建议将菜单添加为SKNode,但即使这样也没有帮助,因为它会忽略暂停状态下的触摸输入。
我想在我的SpriteKit游戏中添加暂停菜单,但我总是遇到这段代码
self.scene.view.paused == YES
然而,它会暂停游戏内的所有事物,包括touchesBegan方法。因此,在我暂停游戏之前显示菜单时,我无法与其交互,因为touchesBegan不起作用。我已经在谷歌上搜索了这个问题,有些人只是建议将菜单添加为SKNode,但即使这样也没有帮助,因为它会忽略暂停状态下的触摸输入。
正如您所说,您不能暂停场景并继续使用它。所以你有两个选择:
如果您想使用pause属性,则应将包含暂停按钮的暂停菜单作为子视图添加到包含场景的SKView
中。即:
-(void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
SKView * skView = (SKView *)self.view;
UIView *pauseMenu = [[UIView alloc] initWithFrame:rect]; // This should be the pause menu with the pause button
[skview addSubview:pauseMenu];
}
暂停按钮将触发一个方法,该方法应取消暂停SKView
另一种方法是在场景内手动管理暂停状态,使用自己的暂停标志而不更新游戏。如果您使用了许多动作,则此方法可能不是最佳解决方案。好处是您可以创建暂停效果,而不会冻结游戏,看起来更酷:)
self.pause=YES;
将“暂停菜单触摸检查”移到触摸事件的开始位置。在这些检查之后,添加:if(self.pause == YES)
return;
这将防止其他触摸事件的触发。
在您的更新方法的最开始添加此行,以便在暂停时停止时间的更新。
这就是如何基本上冻结时间和物理效果,同时仍然能够触摸暂停菜单项。
self.pause=YES;
不会阻止触摸事件。我进行这些检查是为了在与我的菜单交互时不触发其他与游戏相关的触摸事件。菜单触摸将位于检查之上,因此即使游戏已暂停,您也可以触摸它们。我将检查添加到更新中,以防止时间更新。如果您有一个SKAction并且在时间运行时暂停,当您恢复时,对象将出现,就好像游戏从未暂停并一直运行。 - meisenman