cocos2d и бурундук вращают объект после столкновения - PullRequest
0 голосов
/ 05 января 2011

привет, я новичок в обеих платформах.но, может быть, кто-то может указать мне правильное направление:

В основном я пытаюсь отскочить шар формы.(отлично работает), но было бы здорово, если бы мяч вращался тоже

вот мой код (скопировать и вставить)

// 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

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 05 января 2011

хорошо, когда я решил сделать это, я нашел решение:)

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 )]; 
    }
}
...