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