3

I'd like to implement a pause menu to my SpriteKit game and I always come across the code

self.scene.view.paused == YES

however it pauses everything inside the game, even the touchesBegan method. So when I display a menu before I pause the game, I can't interact with it since touchesBegan doesn't work. I've googled this problem and some people just say to add the menu as an SKNode, but that still doesn't help since it ignores touch inputs in the pause state.

4

3 回答 3

3

正如你所说,你不能暂停场景并继续使用它。所以你有两个选择:

如果要使用 paused 属性,则应将包含暂停按钮的暂停菜单添加为SKView包含场景的子视图。IE:

-(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

另一种方法是使用您自己的暂停标志在场景中手动管理暂停状态,而不是更新您的游戏。如果您使用大量操作,这可能不是最佳解决方案。好消息是您可以创建暂停而不是冻结游戏的效果,这看起来更酷:)

于 2014-10-12T11:02:43.190 回答
2

当您单击暂停按钮时,设置self.pause=YES;

将“暂停菜单触摸检查”带到触摸事件的开始。在这些检查之后,直接添加:

if(self.pause == YES)
     return;

这将防止触发其他触摸事件。

将此行添加到更新方法的最开始,以便在您应该暂停时停止更新时间。

这就是如何在本质上冻结时间和物理,同时仍然能够触摸暂停菜单项。

于 2014-10-12T23:09:09.697 回答
1

在我的应用程序中,我还发现 self.scene.view.paused == YES 会暂停所有内容,包括触摸事件和动画。但是,我还发现 self.scene.paused == YES 将暂停场景中的所有节点及其动作/动画,但不会影响触摸事件,例如暂停菜单中的任何节点/按钮。我相信暂停视图会影响触摸事件,但暂停场景不会。

于 2015-07-03T19:49:46.173 回答