2009-08-07 3 views
0

Ich stehe vor einem Problem. Ich habe einige Codierungen gemacht, um cpSegmentShapeNew zu drehen, aber es funktioniert nicht. Schauen Sie sich folgenden Code an:Wie kann ich Körper drehen, wenn Benutzer den Bildschirm in cocos2d berühren

//**creating shape 
testBody = cpBodyNew(INFINITY, INFINITY); 
cpShape* testShape = cpSegmentShapeNew(testBody, cpv(230, 82), cpv(193, 46), 0.0f); 
testShape->e = 0.0; 
testShape->u = 0.0; 
testShape->data = flipper; 
testShape->collision_type = 2; 
cpSpaceAddStaticShape(space, testShape); 

//Body moving when user touch 
-(BOOL) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
//event that starts when a finger touchs the screen 
UITouch *touch = [touches anyObject]; 
CGPoint tmpLoc = [touch locationInView: [touch view]]; 
CGPoint location = [[Director sharedDirector] convertCoordinate:tmpLoc]; 

ball.position = location; 
ballBody->p = location; 
[flipper runAction:[RotateTo actionWithDuration:0.1f angle:60]]; 

cpBodySetAngle(testBody, 60); 

cpvrotate(testBody->rot, cpv(100000,0)); 

return kEventHandled; 
} 

Bitte sagen Sie mir jemand, dass, wo ich falsch liege.

Danke.

Antwort

1

Grüße,

Das Problem ist, dass Sie beide Objekte (Sprite + Körper) drehen sich durch den Code.

Was Sie brauchen, ist eine drehen, und lassen Sie das andere Objekt wissen, dass es passiert ist, so kann es auch tun.

Zum Beispiel, wenn Sie den Körper bewegen, dann ist die Methode, die den Sprites aktualisiert sollte so aussehen:

void updateShapes(void* ptr, void* unused) 
{ 
cpShape* shape = (cpShape*)ptr; 
Sprite* sprite = shape->data; 
if(sprite) 
{ 
    cpBody* body = shape->body; 
    [sprite setPosition:cpv(body->p.x, body->p.y)]; 
    [sprite setRotation: (float) CC_RADIANS_TO_DEGREES(-body->a)]; 
} 
} 

Die letzte Zeile Code aktualisiert die Rotation. Das ist die Zeile, die Sie vermissen.

Ich hoffe, dass Ihnen oder jemand anderen in der Zukunft hilft.

Viel Glück cocos2d Kumpel!

Yohann T.

Verwandte Themen