我有一个花栗鼠的身体,在空间中的形状。我正在从空间中移除身体,以便我可以定位它,并且不会由于重力等原因而跌落。我需要能够使这个身体移动,所以我没有将它变成静态的。将花栗鼠身体移动到雪碧位置
我需要身体根据场景中的Cocos2D精灵的位置+偏移来更新它的位置。
我设置机构位置:
collShape->体佩> P = collSprite.position; - 这似乎不起作用,不编译错误,它运行,但碰撞形状不移动。
是否可以根据我的tick方法中的精灵位置移动碰撞体?
我有一个花栗鼠的身体,在空间中的形状。我正在从空间中移除身体,以便我可以定位它,并且不会由于重力等原因而跌落。我需要能够使这个身体移动,所以我没有将它变成静态的。将花栗鼠身体移动到雪碧位置
我需要身体根据场景中的Cocos2D精灵的位置+偏移来更新它的位置。
我设置机构位置:
collShape->体佩> P = collSprite.position; - 这似乎不起作用,不编译错误,它运行,但碰撞形状不移动。
是否可以根据我的tick方法中的精灵位置移动碰撞体?
你在做什么应该是可能的。
最干净的方法是创建一个派生自CCSprite的新类,然后重写setPosition方法来更新Sprite的主体。
这样做的好处是,无论何时,当精灵的位置发生改变时(无论是由你还是任何动画序列),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);
}
...它将形状更新为它所附着的身体位置和旋转。如果这没有发生,也许你的形状没有被添加到空间或没有被添加到身体?