马里奥喜欢在box2d跳跃和降落,帮助

我一直试图在Box2d游戏中获得Mariotypes的跳跃/着陆,这给我带来了一些麻烦。

结果:玩家在着陆时失去速度

期望的结果:当玩家着陆时,它将继续以相同的速度在空中飞行。

玩家在冲击中失去速度,但迅速恢复其设定的最大速度。

我知道这是一个摩擦的问题,我试图将摩擦力设置为0,当用户按下左,右移动键,当玩家没有按下这些键时恢复到正常摩擦。 然而,这并不起作用,因为在碰撞结束之前状态不会改变,并且玩家将被卡住,直到碰撞状态改变。

我下一个最好的猜测是将摩擦力设置为零,并且模拟玩家的反作用力。

解? 提示? 嘿…也许有一个教程,我错过了。

提前致谢。

示例http://www.guioui.c​​om/saxattack/box2d_landing.png

Vector2 a = entityBody.getLinearVelocity(); float force = 0; if(Gdx.input.isKeyPressed(Keys.D)){ if(ax < 5) force = 25; //entityBody.getFixtureList().get(0).setFriction(0); //floor.entityBody.getFixtureList().get(0).setFriction(0); //entityBody.resetMassData(); //entityBody.applyLinearImpulse(new Vector2(0f,1f), entityBody.getWorldCenter()); //entityBody.applyForce(new Vector2(0f,50f), entityBody.getWorldCenter()); } else if(Gdx.input.isKeyPressed(Keys.A)){ if(ax > -5) force = -25; //entityBody.getFixtureList().get(0).setFriction(0); //floor.entityBody.getFixtureList().get(0).setFriction(0); //entityBody.resetMassData(); //entityBody.applyForce(new Vector2(0f,50f), entityBody.getWorldCenter()); } else{ entityBody.getFixtureList().get(0).setFriction(.4f); floor.entityBody.getFixtureList().get(0).setFriction(.4f); } if(Gdx.input.isKeyPressed(Keys.W)){ ay = 5; entityBody.setLinearVelocity(a); } entityBody.applyForce(new Vector2(force, 0), entityBody.getWorldCenter()); 

我只会使用物理学input来反应物理学。 只要你能跟踪固体表面和你的角色,或者利用事件,我就会写你自己的代码来处理玩家的行为,而不是试图用Box2D来实现。

创建自己的代码可能比创建Box2D更有效。