我有一个带有单个 cpShape 的 cpBody,它漂浮在我的场景中,与其他物体等碰撞。我怎样才能轻松地让这个身体停留在一个地方,并像一个静止的障碍物一样呆在一个地方,这样它就不再移动但仍然与其他身体发生碰撞。
当用户点击它时,我只想阻止身体移动。这就是我问的原因。我不是花栗鼠方面的专家,但我认为这一定很容易。
我有一个带有单个 cpShape 的 cpBody,它漂浮在我的场景中,与其他物体等碰撞。我怎样才能轻松地让这个身体停留在一个地方,并像一个静止的障碍物一样呆在一个地方,这样它就不再移动但仍然与其他身体发生碰撞。
当用户点击它时,我只想阻止身体移动。这就是我问的原因。我不是花栗鼠方面的专家,但我认为这一定很容易。
使用公共 API 执行此操作的方式是从空间中移除身体和形状。创建一个与旧动态体具有相同位置/旋转的新静态体。使用 cpShapeSetBody() 将 body 更改为新的静态,然后将 shape 读取到空间中。
您可以调用cpBodySetMass
INFINITY,并强制对象与cpBodySleep
. 这就是静态对象在内部实现的方式(至少在质量方面)。
编辑
我不确定您是否需要cpBodySleep
在此之后打电话,但我认为打电话没有什么坏处。
修改cpBody.h
放在#define CP_ALLOW_PRIVATE_ACCESS 1
开头。然后从cpBody*
,访问->node.idleTime
并将其设置为 INFINITY。
编辑 2
上述解决方案是一个可行的解决方案,但在 SE 实践方面不是很好。最好定义一个使对象成为静态或动态的函数,这样您就可以在不禁用整个对象的私有属性的情况下调用。