我想在我的SpriteKit游戏中实现一个暂停菜单,我总是遇到代码
self.scene.view.paused == YES
然而,它会暂停游戏中的所有内容,甚至是touchesBegan方法。因此,当我在暂停游戏之前显示菜单时,我无法与之交互,因为触摸不会起作用。我已经搜索了这个问题,有些人只是说将菜单添加为SKNode,但由于它在暂停状态下忽略了触摸输入,因此仍然没有帮助。
答案 0 :(得分:3)
正如您所说,您无法暂停现场并继续使用它。所以你有两个选择:
如果要使用暂停属性,则应将包含暂停按钮的暂停菜单添加为包含场景的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
另一种方法是使用您自己的暂停标记在场景内手动管理暂停状态,而不是更新您的游戏。如果您使用了很多操作,这可能不是最佳解决方案。好处是你可以创造暂停的效果而不会冻结你看起来更酷的游戏:)
答案 1 :(得分:2)
点击暂停按钮后,设置self.pause=YES;
带上您的"暂停菜单触摸检查"到触摸事件的开始。在这些检查之后,直接添加:
if(self.pause == YES)
return;
这样可以防止触发其他触摸事件。
将此行添加到更新方法的最开头,以便在您应该暂停时停止更新时间。
这是如何基本上冻结时间和物理,同时仍然能够触摸暂停菜单项。
答案 2 :(得分:1)
在我的申请中我也发现了 self.scene.view.paused == YES 确实暂停一切,包括触摸事件和动画。但是,我也发现了 self.scene.paused == YES 将暂停场景中的所有节点及其动作/动画,但不会影响触摸事件,例如暂停菜单中的任何节点/按钮。我认为暂停视图会影响触摸事件,但暂停场景不会。