阻止身体移动。 iPhone上的花栗鼠

时间:2012-06-13 10:29:20

标签: iphone ios cocoa-touch chipmunk

我有一个单独的cpShape的cpBody,浮在我的场景中与其他身体相撞等。我怎样才能轻松地将这个身体留在一个地方,并且像一个静止的障碍物一样停留在一个地方,所以它不再移动但仍然与其他身体相撞。

我只想在用户点击它时阻止身体移动。这就是我要问的原因。我不是花栗鼠的专家,但我认为这一定很容易。

2 个答案:

答案 0 :(得分:5)

使用公共API执行此操作的方法是从空间中删除正文和形状。创建一个与旧动态体具有相同位置/旋转的新静态体。使用cpShapeSetBody()将主体更改为新的静态主体,然后将形状读取到空间。

答案 1 :(得分:1)

您可以将cpBodySetMass调用到INFINITY,并强制该对象与cpBodySleep一起休眠。这就是静态对象在内部的实现方式(至少关于质量)。

修改

我不确定你是否需要在此之后拨打cpBodySleep,但我认为打电话不会很痛。

修改cpBody.h并将#define CP_ALLOW_PRIVATE_ACCESS 1放在开头。然后从cpBody*开始访问->node.idleTime并将其设置为INFINITY。

编辑2

上述解决方案是一种有效的解决方案,但在SE实践方面并不是很好。最好定义一个使对象静态或动态的函数,以便您可以在不禁用整个对象的私有属性的情况下调用。