Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocos2d iphone 将花栗鼠身体移动到雪碧位置_Cocos2d Iphone_Collision_Chipmunk - Fatal编程技术网

Cocos2d iphone 将花栗鼠身体移动到雪碧位置

Cocos2d iphone 将花栗鼠身体移动到雪碧位置,cocos2d-iphone,collision,chipmunk,Cocos2d Iphone,Collision,Chipmunk,我有一个花栗鼠的形状,有一个身体,在一个空间里。我将身体从空间中移除,这样我就可以定位它,而不会让它由于重力等原因掉落。我需要能够使这个身体移动,所以我不会使它静止 我需要身体根据Cocos2D精灵在场景中的位置+偏移来更新它的位置 我用以下方法设置身体位置: collShape->body->p=collSprite.position;-这似乎不起作用,不是编译错误,它会运行,但碰撞形状不会移动 在我的勾选方法中,是否可以根据精灵的位置移动碰撞体?您所做的应该是可能的 最干净的方法是创建一个从

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

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

我用以下方法设置身体位置:

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


在我的勾选方法中,是否可以根据精灵的位置移动碰撞体?

您所做的应该是可能的

最干净的方法是创建一个从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
    }
}

调用cpSpaceStep时,将创建活动形状的列表,并为每个形状调用cpShapeUpdateFunc。该函数看起来像:

void
cpShapeUpdateFunc(cpShape *shape, void *unused)
{
    cpBody *body = shape->body;
    cpShapeUpdate(shape, body->p, body->rot);
}
…将形状更新为其附着的实体位置和旋转。如果没有发生这种情况,可能你的形状没有添加到空间中,或者没有添加到身体中