2013-09-04 1 views
0

Я новичок в игровом мир я оштукатурен, чтобы сделать прыжок физика тела ..
вот как я определил телоделают физику тело скачок в cocos2d-Box2d

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); 

и прикосновения началось я подаю линейный импульс, как

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

так может любой орган, скажите мне, что я делаю неправильно ..
заранее спасибо ..

+0

что вы хотите достичь, что у вас сейчас? добавьте некоторые подробности другим, чтобы понять вашу проблему. – Morion

+0

прыжок = одноразовая восходящая сила. Если он не прыгает, попробуйте изменить силу. – LearnCocos2D

+0

@ LearnCocos2D Я сделал это с этим: // Работа в горизонтальном направлении b2Vec2 locationWorld; locationWorld = b2Vec2 (0.0f, 8.0f); double Force = body-> GetMass(); body-> ApplyLinearImpulse (Force * locationWorld, body-> GetWorldCenter()); но сила применяется в горизонтальном направлении, я хочу, чтобы она была вертикальной .... –

ответ

0

Помните положение вашего спрайта и тела (bodyDef) должна быть такой же, в этом коде позиция вашего спрайта не показан. И похоже, что это вызывает проблему. После этого используйте методы setLinearVelicoty() или ApplylinearForce() вместо использования ApplyLinearImpulse().

0

Вы делаете может прыгать за счет изменения скорости Y вашего тела, как этот

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