使用Box2D跳转角色

时间:2011-07-05 09:48:32

标签: iphone cocos2d-iphone box2d

我正在使用box2d和cocos2d进行基于跳跃的游戏。我需要在平台上跳转角色。

有关如何使用box2d进行操作的任何想法吗?

2 个答案:

答案 0 :(得分:2)

你试试这个:

//OBSTACLE_1:
    {
        CCSprite *sprite = [CCSprite spriteWithFile:@"hungObstacle1_C2H18.png"];
        sprite.position = ccp(1568,704);
        sprite.tag = 4;
        [self addChild:sprite];

        //SHAPE :
        {
            b2BodyDef bodyDefinition;
            bodyDefinition.type = b2_dynamicBody;
            bodyDefinition.position.Set(1568/PTM_RATIO, 704/PTM_RATIO);
            bodyDefinition.userData = sprite;

            body = world->CreateBody(&bodyDefinition);//body is a b2Body

            // Create body shape
            b2PolygonShape bodyShape;
        //row 1, col 1
        int num = 8;
        b2Vec2 verts[] = {
            b2Vec2(14.5f / PTM_RATIO, -27.0f / PTM_RATIO),
            b2Vec2(19.5f / PTM_RATIO, -11.0f / PTM_RATIO),
            b2Vec2(19.5f / PTM_RATIO, 11.0f / PTM_RATIO),
            b2Vec2(16.5f / PTM_RATIO, 24.0f / PTM_RATIO),
            b2Vec2(-14.5f / PTM_RATIO, 24.0f / PTM_RATIO),
            b2Vec2(-19.5f / PTM_RATIO, 16.0f / PTM_RATIO),
            b2Vec2(-19.5f / PTM_RATIO, -13.0f / PTM_RATIO),
            b2Vec2(-12.5f / PTM_RATIO, -26.0f / PTM_RATIO)
        };
        bodyShape.Set(verts, num);

            // Create shape definition and add to body
            b2FixtureDef bodyFixtureDefinition;
            bodyFixtureDefinition.shape = &bodyShape;
            bodyFixtureDefinition.density = 5000.0f;
            bodyFixtureDefinition.friction = 1.0f;
            bodyFixtureDefinition.restitution = 1.0f;//*        
            fixture=body->CreateFixture(&bodyFixtureDefinition);            
        }           
    }

*注意:通过将恢复原状设置为1个身体将一直保持跳跃只需要很小的力量

答案 1 :(得分:0)

要模拟跳跃,您可以使用cpBodyApplyImpulse方法并沿直线方向施加力。假设你已经启用了重力,这应该提供精确的模拟,尽管你可能需要调整它。例如,这是我最近的一个项目的一行。

cpBodyApplyImpulse(charBody, cpv(0.0, -25 * scale), charBody->p);

这使得由charBody表示的精灵跳跃。