使物理体在cocos2d-Box2d中跳跃

时间:2013-09-04 06:21:48

标签: ios cocos2d-iphone box2d-iphone

我是游戏世界的新手我被粉刷成物理身体跳跃。
这是我如何定义身体

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

所以任何人都可以告诉我,我做错了什么 提前谢谢..

3 个答案:

答案 0 :(得分:0)

阅读iForce2D的那篇文章。这应该解释一下。

iForce2D - Box2D Tutorials - Jumping

答案 1 :(得分:0)

记住你的精灵和身体(bodyDef)的位置应该相同,在这段代码中你的精灵的位置不会显示。而这似乎导致了这个问题。在此之后使用setLinearVelicoty()或ApplylinearForce()方法而不是使用ApplyLinearImpulse()。

答案 2 :(得分:0)

你可以通过改变身体的Y速度来跳跃

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