Javascript Box2dweb禁止移动

Javascript Box2dweb禁止移动,javascript,box2d,box2dweb,Javascript,Box2d,Box2dweb,我现在已经在box2d中创建了一个对象,并且正在使用键盘输入移动它。 我接下来要做的是停止这个身体的垂直运动。换句话说,它应该能够左右移动,但不能上下移动,即使在与另一个对象发生碰撞时也是如此 我创建该框的代码: var fixDef2 = new b2FixtureDef; fixDef2.density = 1.0; fixDef2.friction = 0.5; fixDef2.restitution

我现在已经在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; }                    
             }
        });
还有我的更新函数,其中Bodys数组中名为“player”的框被移动

        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() );
        }
所以我想禁止所有可能发生在我身体上的垂直运动[“玩家”]身体,我将如何做到这一点

我现在使用的是棱柱体关节,但尝试将其中一个实体设置为静态实体时出现错误:

var pj = new b2PrismaticJointDef();
pj.bodyA = bodies["left"];
pj.bodyB = bodies["player"];
pj.collideConnected = true;
prismaticJoint = world.CreateJoint(pj);
创建实体[“左”]:


使用
b2\u运动学体
而不是
b2\u动力学体

比如:

var con_body_def = new b2BodyDef;
con_body_def.type = b2Body.b2_kinematicBody;
con_body_def.position.y = con_bmp.y / SCALE;
con_body_def.position.x = con_bmp.x / SCALE;
var con_fix = new b2FixtureDef;
con_fix.restitution = SETTINGS.CON_E;
con_fix.friction = SETTINGS.CON_FR;
con_fix.shape = new b2PolygonShape;
    con_fix.shape.SetAsArray(get_shape());
con_fix.userData = 0;
var con_body = world.CreateBody(con_body_def);
con_body.CreateFixture(con_fix);
然后更新其位置:

con_body.SetLinearVelocity(direction);

(查看game.js了解一个工作示例)

我已经更新了这个问题,关节可以工作,但我没有弄对。
con_body.SetLinearVelocity(direction);