我有一个花栗鼠的形状,有一个身体,在一个空间里。我正在将身体从空间中移出,以便我可以定位它并且不会因为重力等而使其掉落。我需要能够使这个身体移动,所以我没有让它静止。
我需要身体根据场景中 Cocos2D 精灵的位置 + 偏移量来更新它的位置。
我正在设置身体位置:
collShape->body->p = collSprite.position; - 这似乎不起作用,不会编译错误,它会运行,但碰撞形状不会移动。
是否可以根据我的刻度方法中精灵的位置移动碰撞体?
我有一个花栗鼠的形状,有一个身体,在一个空间里。我正在将身体从空间中移出,以便我可以定位它并且不会因为重力等而使其掉落。我需要能够使这个身体移动,所以我没有让它静止。
我需要身体根据场景中 Cocos2D 精灵的位置 + 偏移量来更新它的位置。
我正在设置身体位置:
collShape->body->p = collSprite.position; - 这似乎不起作用,不会编译错误,它会运行,但碰撞形状不会移动。
是否可以根据我的刻度方法中精灵的位置移动碰撞体?
你所做的应该是可能的。
最干净的方法是创建一个从 CCSprite 派生的新类,然后重写 setPosition 方法来更新精灵的主体。
这样做的好处是,无论何时更改精灵的位置(无论是由您明确还是通过任何动画序列),Chipmunk 的身体都会自动更新。
-(void) setPosition:(CGPoint) p{
[super setPosition:p];
if (self->body != nil) {
self->body->p.x = p.x;
self->body->p.y = p.y;
//Note: also call cpSpaceRehash to let Chipmunk know about the new position
}
}
当您调用 cpSpaceStep 时,会创建一个活动形状列表,并为每个形状调用 cpShapeUpdateFunc。该函数如下所示:
void
cpShapeUpdateFunc(cpShape *shape, void *unused)
{
cpBody *body = shape->body;
cpShapeUpdate(shape, body->p, body->rot);
}
...它将形状更新为身体位置和它所附着的旋转。如果这没有发生,可能您的形状尚未添加到空间或未添加到主体?