【问题标题】:Cannot pause sprite kit game无法暂停精灵套件游戏
【发布时间】:2014-08-16 13:39:10
【问题描述】:

我已经检查了暂停我的精灵套件游戏的其他答案。我想在精灵加载后暂停游戏,播放“READY SET GO”动画,然后取消暂停游戏。

在 viewdidload 中,我尝试了 self.view.scene.paused = YES;self.scene.view.paused = YES;[self.view.scene setPaused:YES];[self.scene.view setPaused:YES];,但它们都不起作用。

我确实在暂停之前加载了一些 NSTimer,并且有人告诉我暂停场景不会暂停计时器,但是,暂停我的场景似乎也不会暂停任何 SKAction 或物理模拟。

出于某种原因,[self.heli setPaused:YES]; 确实暂停了直升机动画,但没有暂停直升机的物理模拟。

另外,我的其他精灵是在methods中添加的,都是随机生成的障碍物,作为Children添加到self

那么为什么暂停不起作用?

【问题讨论】:

    标签: ios cocoa-touch sprite-kit


    【解决方案1】:

    你可以用这个暂停物理:

    scene.physicsWorld.speed = 0.0;
    

    根据评论编辑:

    您正在暂停您的节点,而不是您的整个场景。

    [self.heli setPaused:YES];
    

    此“...确定是否处理节点上的操作及其后代。”

    如果您想暂停整个场景,那么您应该使用:

    self.scene.view.paused = YES;
    

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

    【讨论】:

    • 这并没有改变这样一个事实,尽管我在任何“draw”或“action”调用之前调用了“pause”函数,但由于障碍物仍然出现,这些显然仍在进行中
    • 对不起,我认为您没有阅读我的整个问题。我说过我试过 self.scene.view.paused = YES;它没有用。我只是陈述了我的困惑,当我试图只暂停直升机时,它起作用了,但暂停整个场景却没有。
    【解决方案2】:

    以下是您可以从 viewDidLoad 暂停场景的一种方法。我不建议在 viewDidLoad 中暂停您的视图,但这里是如何做到这一点...

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        // Configure the view.
        SKView * skView = (SKView *)self.view;
        skView.showsFPS = YES;
        skView.showsNodeCount = YES;
    
        // Create and configure the scene.
        SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
        scene.scaleMode = SKSceneScaleModeAspectFill;
    
        // The following will NOT pause your SKView because your scene has yet to be presented,
        // so scene.view == nil
        scene.view.paused = YES;
    
        // This will pause your scene and its contents because the scene has been created
        skView.paused = YES;
    
        // Present the scene.
        [skView presentScene:scene];
    }
    

    我建议您在 SKScene 子类的 didMoveToView(在 initWithSize 中不起作用)方法中使用 self.scene.view.paused = YES 暂停您的场景。此外,您应该考虑将核心中的 NSTimers 替换为 SKActions(使用 waitForDuration、performSelector:onTarget 等),因为后者会在您暂停/恢复游戏时适当地暂停/恢复。

    【讨论】:

    • 我很好奇,为什么不使用 initwithsize 呢?我需要在我的 SkScene 中添加方法 didMoveToView 吗?编辑:我得到它的工作,谢谢,但我现在有一个新问题,我希望你能帮忙。从菜单场景到游戏场景的场景过渡有一个淡出,所以现在当我按下“播放”时,场景会立即暂停,所以看起来菜单暂停了。我想加载游戏场景,然后暂停。
    • 您不能在 initWithSize 中暂停视图,因为它尚未分配给场景,因此 self.scene.view 为 nil。您可以通过在代码中的适当位置添加 self.scene.view.paused = YES 来控制场景何时暂停。我不确定是什么问题。
    猜你喜欢
    • 1970-01-01
    • 2014-03-02
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2021-09-28
    • 2016-01-09
    相关资源
    最近更新 更多