所以我正在使用SpriteKit开发游戏。为了让游戏更有趣,我决定使用UIDynamicAnimator为我游戏中的UIKit元素添加一些物理。除了有一个主要问题外,一切都很好。我像这样分配/初始化UIDynamicAnimator的那一刻:
animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
我游戏中的物理体完全抵消了。即使我没有指定参考视图,物理学仍会得到偏移。
奇怪的是,我在一个完全独立的ViewController中创建了UIDynamicAnimator,因此它并不喜欢它共享相同的参考视图或类似的东西。
更新:即使是这样简单地创建UIDynamicItemBehavior的行为:
UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init];
弄乱了我的场景物理。
我假设这是SpriteKit和UIDynamics共享的物理引擎的内部错误。
有人有任何建议吗?
答案 0 :(得分:2)
好的,我发现了一个非常糟糕的解决方案。您需要做的就是在展示SKScene之前以某种方式使用UIDynamics框架。例如,在呈现场景之前简单地运行这一行代码将消除同时使用SpriteKit和UIDynamics引起的奇怪的物理错误:
UIDynamicBehavior* a = [[UIDynamicBehavior alloc] init];
我在内部假设这样做物理引擎的方式是sprite kit物理将正常运行。不幸的是,我不相信这个解决方案,因为有一天它可能无法工作,因此我的整个游戏都会受到影响。
因此,作为UIDynamics框架的替代方案,我决定使用UIView Animation来复制我在UIDynamics框架中获得的一些有趣的物理效果。
编辑IOS 8 根据doctordoder的说法,这个bug仍然存在于iOS 8中,这种解决方法仍然有效。
答案 1 :(得分:0)
请注意,在iOS 9中:@Epic Byte的解决方案仍然采用半解决方法。
它提前启动了物理引擎(在initialize
SpriteKit
游戏等之前)但不幸的是将它混合。
在allocation
游戏中,init
和UIDynamicAnimator
SpriteKit
会导致physicsWorld
及其gravity
等属性的行为不同。< / p>
在physicsWorld
初始化期间,似乎UIDynamicAnimator
被删除了很短的时间(切换引擎?)。
结论:
Alloc和init UIDynamicAnimator
尽快处理您的物理世界,例如:致电
[UIDynamicAnimator new];
didFinishLaunchingWithOptions
或强>