Java 改变速度方向不起作用

Java 改变速度方向不起作用,java,libgdx,box2d,Java,Libgdx,Box2d,我身体的速度变化有问题。 正常情况下,直线度为3f,当物体与墙壁碰撞时,速度应在-3f处变化。但当它这样做时,它会在0左右 代码如下: private void createPlayer(){ ... bdef.velocity.set(-3f,0); ... } private void render(){ ... world.step(V.STEP, V.VELOCITYITERATIONS, V.POSITIONITERATIONS); if(cHandler.changeVel

我身体的速度变化有问题。 正常情况下,直线度为3f,当物体与墙壁碰撞时,速度应在-3f处变化。但当它这样做时,它会在0左右

代码如下:

private void createPlayer(){
...
bdef.velocity.set(-3f,0);
...
}

private void render(){
...
world.step(V.STEP, V.VELOCITYITERATIONS, V.POSITIONITERATIONS);
    if(cHandler.changeVelocity())
  ball.getBody().setLinearVelocity(-ball.getBody().getLinearVelocity().x,   0);
...
    }
我已经在beginContact、endContact、presolve和endsolve中尝试过了,但它总是在0左右

当我将碰撞检测设置为beginContact并手动将其设置为-3f时,它就是-3f,但跳跃不再正常工作,我的意思是重力不再将球抓向地面

当我手动设置时:

if(cHandler.changeVelocity()){
        ball.getBody().setLinearVelocity(-3f, 0);
    }
之前的日志:

velocityX: 3.0022564 velocityY: -5.261436
及之后:

velocityX: -3.0 velocityY: 0.0
p、 世界引力是(0,-10) 我希望你能帮助我


谢谢

有什么原因不想让box2d为您处理碰撞吗?它会产生你想要的结果。你不需要检测碰撞并手动更改速度,box2d将为你应用碰撞力。这不起作用,因为球应该继续向右/向左移动,当我设置恢复时,它反弹正常,但它会向右移动,不会从右向左移动。。。或者你打算怎么做?在BeginContact中,你可以记下碰撞开始时速度的方向。然后在EndContact中,您可以将速度设置为与之相反的速度。这可能会演示我的意思,在应用程序运行后单击box2d,然后您可以将身体四处抛。