暂停游戏并在SpriteKit中显示菜单

时间:2014-10-12 10:24:41

标签: ios objective-c sprite-kit pausing-execution

我想在我的SpriteKit游戏中实现一个暂停菜单,我总是遇到代码

self.scene.view.paused == YES
然而,它会暂停游戏中的所有内容,甚至是touchesBegan方法。因此,当我在暂停游戏之前显示菜单时,我无法与之交互,因为触摸不会起作用。我已经搜索了这个问题,有些人只是说将菜单添加为SKNode,但由于它在暂停状态下忽略了触摸输入,因此仍然没有帮助。

3 个答案:

答案 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 将暂停场景中的所有节点及其动作/动画,但不会影响触摸事件,例如暂停菜单中的任何节点/按钮。我认为暂停视图会影响触摸事件,但暂停场景不会。