【问题标题】:Is it possible to determine that all Sprite Kit scene collisions have played out?是否可以确定所有 Sprite Kit 场景碰撞都已结束?
【发布时间】:2014-03-21 15:10:27
【问题描述】:
我已经浏览了关于 sprite-kit、文档、可用演示的 SO 问题页面,以及我的大脑试图解决这个问题但没有完成的巨大空白。
p>
正在开发基于回合(使用 Game Center)、基于物理的游戏的概念验证。玩家轮流将一个节点放置在其他节点的集合中,并让物理效果发挥作用。我感到困惑的地方是确定所有碰撞都已经结束并且回合已经结束。
似乎节点从不停止碰撞。
【问题讨论】:
标签:
ios
2d
sprite-kit
physics
【解决方案1】:
这是物理模拟的一项棘手任务。
首先,在启用重力的情况下,您总是有一个作用在物体上的力,它可能会阻止物体静止。因此,您需要每隔几步(或者如果必须的话,每帧)测试每个物体,看看它的速度矢量长度是否小于给定的阈值。然后手动设置body的resting状态为YES。
在接触过程中,body 可能会再次唤醒,因此在didSimulatePhysics 中的接触解析后执行此步骤至关重要。
诀窍在于找到一个足够大的阈值,以确保结束“物理纠缠”,同时又不会太高以使物体在明显不应该停止的地方停止。
即便如此,您可能还需要设置一个计时器,该计时器在每个物体的速度低于另一个(更高)阈值时启动,表明这些物体无论如何都可能没有多少力,并且如果在宽限期(即 10 秒)之后) 身体还没有完全静止,但低于这个阈值,考虑解决碰撞(就游戏而言)。
此外,仍然没有静止的尸体的数量可能是结束游戏的一个指标,即如果只有 3 或 4 个尸体仍在移动,那么可能也不会发生太多事情。