Reputation: 39
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
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
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
Reputation: 630
Have a read of that article by iForce2D. This should explain quite a bit.
iForce2D - Box2D Tutorials - Jumping
Upvotes: 1