1

box2d でオブジェクトを作成し、キーボード入力を使用して移動しています。次にやりたいことは、この体が持つことができる垂直方向の動きを止めることです. つまり、別のオブジェクトとの衝突が発生した場合でも、左右には移動できますが、上下には移動できません。

ボックスを作成するための私のコード:

           var fixDef2 = new b2FixtureDef;
           fixDef2.density = 1.0;
           fixDef2.friction = 0.5;
           fixDef2.restitution = 0.2;
           var bodyDef2 = new b2BodyDef;
           bodyDef2.type = b2Body.b2_dynamicBody;


           fixDef2.shape = new b2PolygonShape;
           fixDef2.shape.SetAsBox(
                 50/30 + 0.1 //half width
              ,  6/30 + 0.1 //half height
           );
        bodyDef2.position.x = Math.random() * 10;
        bodyDef2.position.y = Math.random() * 10;
        bodyDef2.fixedRotation = true;
bodies["player"]=world.CreateBody(bodyDef2);
bodies["player"].CreateFixture(fixDef2);
var direction = new b2Vec2(-100,0);

キーボード入力:

        $("body").keydown(function (e) {
             switch(e.which){
                case 37:{ left = true; break;   }
                case 38:{ up=true; break; }
                case 39:{ right=true; break; }
                case 40:{ down = true; break; }                 
             }
        });
        $("body").keyup(function (e) {
             switch(e.which){
                case 37:{ left = false; break;  }
                case 38:{ up=false; break; }
                case 39:{ right=false; break; }
                case 40:{ down = false; break; }                    
             }
        });

そして、ボディ配列の「プレーヤー」という名前のボックスが移動される私の更新機能

        if(left){
            var direction = new b2Vec2(-100,0);
            bodies["player"].ApplyForce( direction , bodies["player"].GetPosition() );
        }
        if(right){
            var direction = new b2Vec2(100,0);
            bodies["player"].ApplyForce( direction , bodies["player"].GetPosition() );
        }

だから私は自分の体[「プレーヤー」]の体で発生する可能性のあるすべての垂直方向の動きを禁止したいのですが、どうすればよいでしょうか。

現在、プリズム ジョイントを使用していますが、ボディの 1 つをスタティック ボディにしようとするとエラーが発生します。

var pj = new b2PrismaticJointDef();
pj.bodyA = bodies["left"];
pj.bodyB = bodies["player"];
pj.collideConnected = true;
prismaticJoint = world.CreateJoint(pj);

ボディの作成["左"]:

     bodyDef.type = b2Body.b2_staticBody;
     fixDef.shape = new b2PolygonShape;
     fixDef.shape.SetAsBox(2, 14);
     bodyDef.position.Set(-1.8, 13);
     bodies["left"] = world.CreateBody(bodyDef).CreateFixture(fixDef);
4

1 に答える 1