1

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

4

1 回答 1

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);
    }
于 2012-12-12T05:08:29.663 回答