我有一个以我的播放器为中心的 SKEmitterNode 以留下粒子痕迹。我的玩家有一个物理体,它是由物理移动的,而不是通过手动更新它的位置。
我遇到的问题是,当我的玩家速度增加时,粒子会从玩家身后的某个点发射出来。我发现这是因为粒子是在帧周期的“评估动作”部分发射的。我的播放器随后被“模拟物理”部分移动。
我找到的解决方法是将 SKEmitterNode(在更新回调中)移动到我的玩家将在物理计算之后所在的位置。这是我使用的代码:
particleEmitter.position = CGPointMake(
player.position.x + player.physicsBody!.velocity.dx * dt,
player.position.y + player.physicsBody!.velocity.dy * dt
)
更新
起初我将发射器作为播放器的子节点,然后是我观察到问题的时候。
我还尝试将发射器位置精确地同步到玩家位置,而不考虑自上次更新以来移动的距离(速度 * dt),同样的问题。
我的问题是,解决这个问题的正确方法是什么?
更新 2
我创建了一个游乐场来演示这个问题。在这里,我将发射器作为玩家的孩子。玩家速度增加得越多,玩家和发射粒子之间的间隙就越大。
https://github.com/ovidiupruteanu/SKEmitterNodeTest-Playground
这是来自苹果文档的帧周期