2010-07-31 44 views
1

J'ai une forme de Chipmunk, avec un corps, dans un espace. Je retire le corps de l'espace pour que je puisse le positionner et ne pas le faire tomber en raison de la gravité, etc. Je dois pouvoir faire bouger ce corps, donc je ne le rends pas statique.Déplacer le corps du tamia vers la position du sprite

J'ai besoin du corps pour mettre à jour sa position en fonction de la position d'un sprite Cocos2D dans la scène + un décalage.

Je réglage de la position des corps avec:

collShape-> corps-> p = collSprite.position; - Cela ne semble pas fonctionner, pas compiler les erreurs, il s'exécute, mais la forme de la collision ne bouge pas.

Est-il possible de déplacer un corps de collision en fonction de la position d'un sprite dans ma méthode tick?

Répondre

0

Ce que vous faites devrait être possible. La méthode la plus propre consiste à créer une nouvelle classe dérivée de CCSprite, puis à remplacer la méthode setPosition pour mettre à jour le corps de l'image-objet. L'avantage de ceci, est que chaque fois que la position de l'image-objet est changée (soit explicitement par vous ou par n'importe quelle séquence d'animation) le corps de Chipmunk sera automatiquement mis à jour.

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

Lorsque vous appelez cpSpaceStep, une liste des formes actives est créé et cpShapeUpdateFunc est appelé pour chacun. Cette fonction ressemble à:

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

... qui met à jour la forme de l'emplacement du corps et la rotation à laquelle il est attaché. Si ce n'est pas le cas, votre forme n'a peut-être pas été ajoutée à l'espace ou n'a pas été ajoutée au corps?