所以我正在使用 SpriteKit 开发游戏。为了让游戏更有趣,我决定使用 UIDynamicAnimator 为游戏中的 UIKit 元素添加一些物理效果。除了有一个主要问题外,一切都很好。我像这样分配/初始化 UIDynamicAnimator 的那一刻:
animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
我游戏中的物理体完全抵消了。即使我没有指定引用 View ,物理仍然会得到偏移。
奇怪的是,我在一个完全独立的 ViewController 中创建 UIDynamicAnimator,所以它不像共享相同的引用 View 或类似的东西。
更新 :即使是像这样简单地创建 UIDynamicItemBehavior 的行为:
UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init];
弄乱了我场景的物理特性。
我假设这是 SpriteKit 和 UIDynamics 共享的物理引擎的内部错误。
有人有什么建议吗?
最佳答案
好的,我找到了一个非常hacky的解决方案。您需要做的就是在展示您的 SKScene 之前以某种方式使用 UIDynamics 框架。例如,在呈现场景之前简单地运行这一行代码将消除同时使用 SpriteKit 和 UIDynamics 导致的奇怪的物理错误:
UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init];
我在内部假设这会以这样一种方式准备物理引擎,即 Sprite 套件物理将正常运行。不幸的是,我不相信这个解决方案,因为它可能有一天不起作用,我的整个游戏都会因此而受到影响。
因此,作为 UIDynamics 框架的替代方案,我决定只使用 UIView Animation 来复制我使用 UIDynamics 框架获得的一些有趣的物理效果。
针对 IOS 8 的编辑
根据doctordoder的说法,这个bug在iOS 8中仍然存在,这个解决方法仍然有效。
关于ios - 奇怪的 SpriteKit + UIDynamics 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21651807/