2011-01-05 13 views
0

こんにちは 私は両方のフレームワークにかなり新しいです。しかし、誰かが正しい方向に私を向けることができます:cocos2dとchipmunkは衝突後にオブジェクトを回転します

基本的に私は形のボールをバウンスしようとします。 (正常に動作します) が、ボールはあまりにも、ここ

を回転させるだろうというとき、それは素晴らしいことだである私(コピー&ペースト)コード

// BallLayer.m

#import "BallLayer.h" 

void updateShape(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)]; 
    } 
} 

@implementation BallLayer 
-(void)tick:(ccTime)dt{ 
    cpSpaceStep(space, 1.0f/60.0f); 
    cpSpaceHashEach(space->activeShapes, &updateShape, nil); 
} 

-(void)setupChipmunk{ 
    cpInitChipmunk(); 
    space = cpSpaceNew(); 
    space->gravity = cpv(0,-2000); 
    space->elasticIterations = 1; 
    [self schedule: @selector(tick:) interval: 1.0f/60.0f]; 

    cpBody* ballBody = cpBodyNew(200.0, cpMomentForCircle(100.0, 10, 10, cpvzero)); 
    ballBody->p = cpv(150, 400); 
    cpSpaceAddBody(space, ballBody); 
    cpShape* ballShape = cpCircleShapeNew(ballBody, 20.0, cpvzero); 

    ballShape->e = 0.8; 
    ballShape->u = 0.8; 
    ballShape->data = ballSprite; 
    ballShape->collision_type = 1; 
    cpSpaceAddShape(space, ballShape); 

    cpBody* floorBody = cpBodyNew(INFINITY, INFINITY); 
    floorBody->p = cpv(0, 0); 
    cpShape* floorShape = cpSegmentShapeNew(floorBody, cpv(0,0), cpv(320,160), 0); 
    floorShape->e = 0.5; 
    floorShape->u = 0.1; 
    floorShape->collision_type = 0; 
    cpSpaceAddStaticShape(space, floorShape); 

    floorShape = cpSegmentShapeNew(floorBody, cpv(0,200), cpv(320,0), 0); 

    cpSpaceAddStaticShape(space, floorShape); 
} 

-(id)init{ 
    self = [super init]; 
    if(nil != self){ 
     ballSprite = [Sprite spriteWithFile:@"ball2.png"]; 
     [ballSprite setPosition:CGPointMake(150, 400)]; 
     [self add:ballSprite]; 

     [self setupChipmunk]; 
    } 
    return self; 
} 
@end 

私を助けてください。私はそれをpsoting決めたとき

答えて

0

はよく私は解決策:)

void updateShape(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)]; 
    } 
} 
を見つけました
関連する問題