Box2d没有力量的边界框

时间:2012-12-12 00:20:07

标签: static cocos2d-iphone box2d bounding-box kinematics

目前,Cocos2d-Box2d项目正在使用b2Vec2为游戏边缘创建一个边界框。因此,边界框不影响运动物体,运动物体是不受力影响的物体(意味着物体通常会从屏幕上飞出)。我试图看看是否有办法让运动体与屏幕连接。如果没有,我会很感激,如果有人向我解释我应该如何使用屏幕角落的静态物体制作边界框。

1 个答案:

答案 0 :(得分:0)

这是两种方式......尝试任何一种

//方法 - 1

b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0);  
b2Body              *mGroundBody ;


mGroundBody = self.world->CreateBody(&groundBodyDef);
NSString *strId = @"Ground Body";
mGroundBody->SetUserData(strId);

b2EdgeShape groundBox;      

    //bottom
    groundBox.Set(b2Vec2(0.0f,0.0f), b2Vec2(mS.width/PTM_RATIO,0.0f));
    mGroundBody->CreateFixture(&groundBox,0);

    // top
    groundBox.Set(b2Vec2(0,mS.height/PTM_RATIO), b2Vec2(mS.width/PTM_RATIO, mS.height/PTM_RATIO));
    mGroundBody->CreateFixture(&groundBox,0);


    // left
    groundBox.Set(b2Vec2(0,mS.height/PTM_RATIO), b2Vec2(0,0));
    mGroundBody->CreateFixture(&groundBox,0);

    // right
    groundBox.Set(b2Vec2(mS.width/PTM_RATIO,mS.height/PTM_RATIO), b2Vec2(mS.width/PTM_RATIO,0));
    mGroundBody->CreateFixture(&groundBox,0);

//方法 - 2

//create 4 box2d walls...

    float bW = (IS_IPAD) ? (8) : 2 ;
    //top
    {
        b2BodyDef bodyDef;
        bodyDef.type = b2_staticBody;
        bodyDef.position.Set((mS.width*0.5f)/PTM_RATIO, (mS.height)/PTM_RATIO);
        bodyDef.linearDamping  = 0.0f;
        bodyDef.angularDamping = 0.0f;

        bodyDef.userData =  strId ;

        b2PolygonShape box;
        box.SetAsBox( ((mS.width*0.5f)/PTM_RATIO), (bW)/PTM_RATIO);

        b2FixtureDef fixDef;
        fixDef.shape = &box;
        fixDef.density = 1.0f;
        fixDef.friction = 0.1f;
        fixDef.restitution = 1.0f;
        fixDef.isSensor = false;

        b2Body *topBody = self.world->CreateBody(&bodyDef);
        topBody->CreateFixture(&fixDef);

    }

    //bottom
    {
        b2BodyDef bodyDef;
        bodyDef.type = b2_staticBody;
        bodyDef.position.Set((mS.width*0.5f)/PTM_RATIO, 0);
        bodyDef.linearDamping  = 0.0f;
        bodyDef.angularDamping = 0.0f;

        bodyDef.userData =  strId ;

        b2PolygonShape box;
        box.SetAsBox( ((mS.width*0.5f)/PTM_RATIO), (bW)/PTM_RATIO);

        b2FixtureDef fixDef;
        fixDef.shape = &box;
        fixDef.density = 1.0f;
        fixDef.friction = 0.1f;
        fixDef.restitution = 1.0f;
        fixDef.isSensor = false;

        b2Body *topBody = self.world->CreateBody(&bodyDef);
        topBody->CreateFixture(&fixDef);

    }

    //left
    {
        b2BodyDef bodyDef;
        bodyDef.type = b2_staticBody;
        bodyDef.position.Set(0, (mS.height*0.5f)/PTM_RATIO);
        bodyDef.linearDamping  = 0.0f;
        bodyDef.angularDamping = 0.0f;

        bodyDef.userData =  strId ;

        b2PolygonShape box;
        box.SetAsBox( ((bW)/PTM_RATIO), (mS.height*0.5f)/PTM_RATIO);

        b2FixtureDef fixDef;
        fixDef.shape = &box;
        fixDef.density = 1.0f;
        fixDef.friction = 0.1f;
        fixDef.restitution = 1.0f;
        fixDef.isSensor = false;

        b2Body *topBody = self.world->CreateBody(&bodyDef);
        topBody->CreateFixture(&fixDef);

    }

    //right
    {
        b2BodyDef bodyDef;
        bodyDef.type = b2_staticBody;
        bodyDef.position.Set((mS.width)/PTM_RATIO, (mS.height*0.5f)/PTM_RATIO);
        bodyDef.linearDamping  = 0.0f;
        bodyDef.angularDamping = 0.0f;

        bodyDef.userData =  strId ;

        b2PolygonShape box;
        box.SetAsBox( ((bW)/PTM_RATIO), (mS.height*0.5f)/PTM_RATIO);

        b2FixtureDef fixDef;
        fixDef.shape = &box;
        fixDef.density = 1.0f;
        fixDef.friction = 0.1f;
        fixDef.restitution = 1.0f;
        fixDef.isSensor = false;

        b2Body *topBody = self.world->CreateBody(&bodyDef);
        topBody->CreateFixture(&fixDef);
    }