SpriteKit 加载新场景但精灵立即下降
Posted
技术标签:
【中文标题】SpriteKit 加载新场景但精灵立即下降【英文标题】:SpriteKit loading new scene but sprite immediately drops 【发布时间】: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,但删除它似乎并没有影响这个问题。
【问题讨论】:
【参考方案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 但相同。
在你做的移动到视图功能中,最后暂停场景,看看你得到了什么结果。以上是关于SpriteKit 加载新场景但精灵立即下降的主要内容,如果未能解决你的问题,请参考以下文章
Spritekit -- 保持场景以高于特定高度的精灵为中心
如何在 SpriteKit 中从 Web API 加载精灵表