【问题标题】:SpriteKit loading new scene but sprite immediately dropsSpriteKit 加载新场景但精灵立即下降
【发布时间】:2016-07-11 17:28:07
【问题描述】:

我正在关注这个 (https://www.raywenderlich.com/100560/video-tutorial-how-to-make-a-game-like-flappy-bird-in-swift-part-6-collision-detection) 视频教程系列来了解 SpriteKit,但是使用 Xcode 7.2 似乎存在一个错误,在精灵掉落后,用户点击屏幕并调用 switchToNewGame,但是精灵立即掉到地上,我不知道为什么。下面是 switchToNewGame 和这个 gist 中的完整代码:https://gist.github.com/gesabo/2e585f22c2860af13e099590a2e00e47

 func switchToNewGame() {
        runAction(popAction)
        let newScene = GameScene(size: size)
        let transition = SKTransition.fadeWithColor(SKColor.blackColor(), duration: 1.0)
        view?.presentScene(newScene, transition: transition)
    }

我认为这可能与 RW 使用的 didMoveToView 中的 physicsWorld.gravity = CGVector(dx: 0, dy: 0) 这一行有关,因为他说他想控制重力而不是 SpriteKit,但删除它似乎并没有影响这个问题。

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    他为什么不摔倒?你的默认 GameState 是 .Play,所以一旦你的场景加载,你的小鸟就会开始摔倒。现在,当您过渡时,您的场景正在运行,因此您的鸟可能会因此而下降。

    我会推荐

    1) 将 gameState 更改为 play 以外的内容,然后在您准备好时将其更改为 play

    2)在过渡期间暂停场景,查看SKTransition文档以达到您想要的效果

    3) 使用 dispatch_async(dispatch_get_main_queue()) 加载你的新场景,这样加载时间不会影响场景时间。 (基本上,您从场景中获得的第一次更新时间可能会很长,会扭曲过渡)

    注意:从 9.3 开始,paused 变量存在错误,由于某种原因它也会改变所有子项的暂停状态,因此在转换时,您可能会得到一些不希望的效果

    【讨论】:

    • 感谢您的回答,但是 (1) 尝试不同的游戏状态似乎没有帮助,但是我不确定哪种生命周期方法适合设置为 .Play?我在 didMoveToView 中尝试过,但结果相同(2)暂停传入场景默认设置为 true,因此无法在那里找到任何帮助(3)很好的想法,但在主队列中加载新场景 = 相同的结果。
    • sprite kit 和 pause 有一个 bug,所以你可能认为场景暂停了,但可能不是
    • 我建议将游戏状态设置为在 didmovetoview 上播放,我很确定转换完成后会调用它
    • 谢谢,这就是我尝试过的,但结果相同,我还将 pauseIncomingScene 设置为 true 但相同。
    • 在你做的移动到视图功能中,最后暂停场景,看看你得到了什么结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多