2012-06-13 29 views
1

我有一个cpBody,带有单个cpShape,漂浮在我的场景中与其他物体碰撞等。我怎样才能轻松地将这个身体留在一个地方,并像一个静止的障碍一样呆在一个地方,所以它不再移动,但仍然与其他身体碰撞。阻止身体移动。花栗鼠在iPhone上

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

+0

我没有使用花栗鼠,但应该有一个选项指定静态身体的地方。 – nhahtdh

+0

您可以添加静态主体,而不是将动态主体转换为静态主体。我不想删除动态主体,然后添加具有相同参数的静态主体。我只是问,也许有一种我不知道的快速方法。 – RaffAl

回答

1

您可以拨打cpBodySetMass INFINITY,并强制对象睡cpBodySleep。这是如何在内部实现一个静态对象(至少关于质量)。

编辑

我不知道你是否需要调用后这还是不cpBodySleep,但我不认为它伤害打电话。

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

EDIT 2

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

+0

我认为这是个好主意。但那么重力呢?我的物体开始下降,因为我的空间有重力? – RaffAl

+0

@RafałSroka:你想要一个修改源代码的解决方案吗?无论如何,修改并不多。 – nhahtdh

+0

好吧,我不想修改花栗鼠的代码。有没有任何选项可以在不改变花栗鼠代码的情况下进行。 – RaffAl

5

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

+0

Slembcke制作花栗鼠,所以希望这个解决方案应该可以工作。 :-) +1 –