Chocolate..
Chocolate..

Reputation: 39

make physics body jump in cocos2d-Box2d

I am a newbie to the gaming world i am stuccoed to make a physics body jump..
here is how i defined the body

Cycle = [CCSprite spriteWithFile:@"Panda.png"];
        [self addChild:Cycle z:3];

    // Create a world
    b2Vec2 gravity = b2Vec2(0.0f, -8.0f);
    world = new b2World(gravity);

    // Create edges around the entire screen
    b2BodyDef groundBodyDef;
    groundBodyDef.position.Set(0,0);

    b2Body *groundBody = world->CreateBody(&groundBodyDef);
    b2EdgeShape groundEdge;
    b2FixtureDef boxShapeDef;
    boxShapeDef.shape = &groundEdge;

    //wall definitions
    groundEdge.Set(b2Vec2(0,0), b2Vec2(screenSize.width/PTM_RATIO, 0));
    groundBody->CreateFixture(&boxShapeDef);

    groundEdge.Set(b2Vec2(0,0), b2Vec2(0,screenSize.height/PTM_RATIO));
    groundBody->CreateFixture(&boxShapeDef);

    groundEdge.Set(b2Vec2(0, screenSize.height/PTM_RATIO),
                   b2Vec2(screenSize.width/PTM_RATIO, screenSize.height/PTM_RATIO));
    groundBody->CreateFixture(&boxShapeDef);

    groundEdge.Set(b2Vec2(screenSize.width/PTM_RATIO, screenSize.height/PTM_RATIO),
                   b2Vec2(screenSize.width/PTM_RATIO, 0));
    groundBody->CreateFixture(&boxShapeDef);

    // Create ball body and shape
    b2BodyDef ballBodyDef;
    ballBodyDef.type = b2_dynamicBody;
    ballBodyDef.position.Set(300/PTM_RATIO,100/PTM_RATIO);
    ballBodyDef.userData = Cycle;
    body = world->CreateBody(&ballBodyDef);


    b2PolygonShape dynamicBox;
    dynamicBox.SetAsBox(.5f, .5f);//These are mid points for our 1m box

    // Define the dynamic body fixture.
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &dynamicBox;
    fixtureDef.density = 1.0f;
    fixtureDef.friction = 0.3f;
    body->CreateFixture(&fixtureDef);

and in touches began i am applying linear impulse as

b2Vec2 force = b2Vec2(30, 30);
body-> ApplyLinearImpulse(body->GetPosition(),force);

so can any body tell me what am i doing wrong..
thanks in advance..

Upvotes: 0

Views: 1419

Answers (3)

Umair Malik
Umair Malik

Reputation: 9

You make can jump by changing the Y velocity of your body like this

    b2Vec2 velocity = body_->GetLinearVelocity();
    velocity.y = 20;
    velocity.x = 0;//upwards - don't change x velocity
    body_->SetLinearVelocity( velocity );

Upvotes: 0

Ali Raza
Ali Raza

Reputation: 613

Remember position of your sprite and body (bodyDef) should be same, In this code the position of your sprite is not shown. And it seems that this is causing the problem. After this use the setLinearVelicoty() Or ApplylinearForce() methods instead of using ApplyLinearImpulse().

Upvotes: 0

North-Pole
North-Pole

Reputation: 630

Have a read of that article by iForce2D. This should explain quite a bit.

iForce2D - Box2D Tutorials - Jumping

Upvotes: 1

Related Questions