【问题标题】:Strange SpriteKit + UIDynamics Bug奇怪的 SpriteKit + UIDynamics 错误
【发布时间】:2014-03-06 06:50:24
【问题描述】:

所以我正在使用 SpriteKit 开发游戏。为了让游戏更有趣,我决定使用 UIDynamicAnimator 为我的游戏中的 UIKit 元素添加一些物理效果。一切都很好,除了有一个主要问题。当我像这样分配/初始化 UIDynamicAnimator 时:

animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

我游戏中的物理实体完全抵消了。即使我没有指定参考视图,物理仍然会偏移。

奇怪的是,我在一个完全独立的 ViewController 中创建 UIDynamicAnimator,所以它不像共享相同的参考视图或类似的东西。

更新:甚至像这样简单地创建 UIDynamicItemBehavior 的行为:

UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init];

弄乱了我场景的物理特性。

我假设这是 SpriteKit 和 UIDynamics 共享的物理引擎的内部错误。

有人有什么建议吗?

【问题讨论】:

  • 在 WWDC 2013 视频中Getting Started with UIKit Dynamics Apple 讨论了何时可以使用一种,何时可以使用另一种。显然,Apple 将它们视为替代品(在幕后使用相同的物理引擎,请参阅 Simulating Physics),而不是您同时使用的两种技术。
  • 伙计,我也有同样的错误

标签: ios ios7 sprite-kit uikit-dynamics uidynamicbehavior


【解决方案1】:

请注意,在 iOS 9 中:@Epic Byte 的解决方案仍然可以解决一半问题。

它更早地启动了物理引擎(在我们initializeSpriteKit 游戏等之前),但不幸的是它混合了它

allocationinitSpriteKit 游戏中的UIDynamicAnimator 将导致physicsWorld 和它的属性如gravity 的行为不同。

另外,physicsWorld 似乎在 UIDynamicAnimator 初始化期间被删除了一小段时间(切换引擎?)。

结论:

  • Alloc 和 init UIDynamicAnimator 尽快以不同方式处理您的物理世界,例如打电话

    代表didFinishLaunchingWithOptions中的[UIDynamicAnimator new];

  • 不要混合使用 UIKit Dynamics 和 SpriteKit

【讨论】:

    【解决方案2】:

    好的,我找到了一个非常老套的解决方案。您需要做的就是在展示您的 SKScene 之前以某种方式使用 UIDynamics 框架。例如,在呈现场景之前简单地运行这行代码将消除同时使用 SpriteKit 和 UIDynamics 导致的奇怪的物理错误:

    UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init];
    

    我假设在内部这会以这样一种方式准备物理引擎,即 sprite kit 物理会正常运行。不幸的是,我不相信这个解决方案,因为它可能有一天会不起作用,我的整个游戏都会因此而受到影响。

    因此,作为 UIDynamics 框架的替代方案,我决定只使用 UIView Animation 来复制我通过 UIDynamics 框架获得的一些有趣的物理效果。

    为 IOS 8 编辑 根据 Doctordoder 的说法,这个 bug 在 iOS 8 中仍然存在,而且这个解决方法仍然有效。

    【讨论】:

    • HAHAHAH WTF 为什么这到底行得通?它也完全修复了我的错误!
    • @doctordoder 是的,这是一个非常奇怪的解决方法。我想在 iOS 8 上测试一下,看看这个 bug 是否已经修复。当我有机会时,我会编辑我的答案以包含它。
    • 这个错误实际上是在 iOS 8 中发生在我身上的,你的修复仍然有效。
    • @doctordoder 哦,真的。好的,我会用这些信息更新答案。
    • iOS 9 中的相同错误,并且解决方案不起作用(至少不适用于冲动等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多