暂停Sprite Kit场景

27
@property (SK_NONATOMIC_IOSONLY, getter = isPaused) BOOL paused;
我发现了一行代码可以添加到我的项目中,如何暂停整个游戏?
例如:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
for (UITouch *touch in touches)
{
    SKSpriteNode *pause = (SKSpriteNode*)[self childNodeWithName:@"pause"];
    CGPoint location = [touch locationInNode:self];
    // NSLog(@"** TOUCH LOCATION ** \nx: %f / y: %f", location.x, location.y);

    if([pause containsPoint:location])
    {
        NSLog(@"PAUSE GAME HERE SOMEHOW");
    }
}

正如您所看到的,我已经设置好了按钮。当我选择它时,我应该如何暂停整个场景?然后在有人按下恢复按钮时再恢复它。

好的,我得到了一些建议要调用

  self.scene.view.paused = YES;

但问题在这里,就在我的应用程序代理中。

- (void)applicationWillResignActive:(UIApplication *)application{


SKView *view = (SKView *)self.window.rootViewController.view;
view.paused = YES;}

- (void)applicationDidBecomeActive:(UIApplication *)application{

    SKView *view = (SKView *)self.window.rootViewController.view;
    view.paused = NO;

我将其定义为SKView类型,但实际上它是SKScene类型。有什么方法可以修复吗?您是否建议我通过重新输入所有代码将所有场景都转换为视图?

我把它定义成了SKView类型,但实际上它应该是SKScene类型。有没有办法可以解决这个问题?您是否建议我重新输入所有代码,将所有场景都转换为视图?


您似乎对场景(Scenes)和视图(Views)感到困惑。在一个 SKView 上播放您的 SKScene。暂停 SKScene 或 SKView 将会暂停游戏,但是像 Andrey 在下面所建议的那样是最好的方法。 - ZeMoon
3个回答

64

使用 SKViewisPaused 属性:

Swift:

scene.view?.isPaused = true

Objective C:

目标-C
self.scene.view.isPaused = YES;

这将停止所有动作和物理模拟。


2

使用场景暂停功能

self.scene?.view?.paused = true

0

属性'paused'已更名为'isPaused'

scene?.view?.isPaused = true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接