2013-07-08 38 views
0

我正在制作一款游戏,使用LibGDX和LibGDX,它附带的Box2D包装器。具体来说,我的游戏是一个2D sidescroller。与对象碰撞时,Sprite不会掉下来吗?

我的问题是我的玩家精灵。我需要为玩家进行非常精确的移动,所以我决定将其设置为当玩家按下箭头键时,它会调用playerBody.setLinearVelocity(),然后当他们停止按下键时,它会将其线速度重置为0.

在我的比赛中,我有引力。为了确保在移动左,右玩家落下,我创建的方法run()

public void run(float x) { 
    playerBody.setLinearVelocity(x, playerBody.getLinearVelocity().y); 
} 

这工作得很好,当我的球员是自由下落。但是,当我的玩家在任何静态物体(包括垂直墙壁)上移动时,只要我按住将箭头贴在墙上的箭头键,它们就会停止坠落。

有谁知道这可能是为什么?提前致谢。

而且,这里是我的摩擦,密度,并为playerBody恢复原状:

friction = 0.1f 
restitution = 0.01f 
density = 0.4f 

回答

1

我考虑到你的球员的身体是动态的,动态的主体具有所有的静态物体发生碰撞的性质。所以,如果你看一下你的跑步方法,你可以将当前选手LinearVelocity()中的前一个LinearVelocity().y传递给你。 所以,当你的球员的身体与一个静态物体碰撞时,它的速度变成0,如果它的Velocity()。y变成0,并且你继续在你的playerBody.setLinearVelocity中传递那个0,你的身体不会移动。有些事情正在发生。

public void run(float x) { 
    playerBody.setLinearVelocity(x, 0); 
} 

发生碰撞后。 我想如果你通过你的velocity().y位置的重力。我认为它会解决你的问题。

public void run(float x) { 
    playerBody.setLinearVelocity(x, gravity.y); 
} 
+0

这将工作,除了我的精灵似乎在使用您的代码时会变慢。可能是因为它没有考虑到我身体的质量?我尝试了mass * gravity.y,但是这会让它下降得太快。 – user2029675

+0

你正在接受重力的价值是什么?你的box2d世界以米或像素为单位? –

+0

重力是0,-30,我不确定这是米或像素,但它似乎使我的精灵下降到我想要的速度。 – user2029675