将Chipmunk Body移动到Sprite位置

时间:2010-07-31 08:58:44

标签: cocos2d-iphone collision chipmunk

我在一个空间里有一个带有身体的花栗鼠形状。我正在从空间中移除身体,以便我可以定位它,而不是因为重力等而使它掉落。我需要能够使这个身体移动,所以我不会让它静止。

我需要根据场景中Cocos2D精灵的位置+偏移来更新它的位置。

我正在设置身体位置:

collShape-> body-> p = collSprite.position; - 这似乎不起作用,不编译错误,它运行,但碰撞形状不会移动。

是否可以根据刻度方法中精灵的位置移动碰撞体?

2 个答案:

答案 0 :(得分:0)

你应该做什么。

最干净的方法是创建一个派生自CCSprite的新类,然后覆盖setPosition方法以更新sprite的主体。

这样做的好处是,无论何时更改精灵的位置(由你或任何动画序列明确),花栗鼠体都会自动更新。

-(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
    }
}

答案 1 :(得分:0)

当您调用cpSpaceStep时,会创建一个活动形状列表,并为每个形状调用cpShapeUpdateFunc。该功能如下:

void
cpShapeUpdateFunc(cpShape *shape, void *unused)
{
    cpBody *body = shape->body;
    cpShapeUpdate(shape, body->p, body->rot);
}

...将形状更新为身体位置和附着的旋转。如果没有发生这种情况,你的形状可能还没有被添加到空间中或者还没有被添加到身体中?