2011-01-05 2 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)]; 
    } 
} 
발견