我正在 LibGdx 中使用 Box2D 来创建平台游戏。我有一个将图 block 转换为固定装置的算法。我正在使用接触监听器来确定玩家是否在空中,但问题是,因为我使用的是彼此相邻的固定装置,
(P)-->
|平铺| |瓷砖| |平铺|
当我通过相邻的图 block 并将 MOB_AIR 值设置为 true 时,在调用 contact begin 后,contact 监听器会调用 contact end,结果即使我在地面上,我也无法跳跃。
代码的其他部分(mob 和 box2d 世界)工作正常,因为当我新着陆或在图 block 之间时我可以跳跃。
如果你之前遇到过同样的问题,有没有好的方法来实现这个跳转?
抱歉我的英语不好,任何帮助将不胜感激。
PS:问题也不在于 box2d 多边形-多边形碰撞故障,我使用链形作为玩家,使用多边形作为图 block 。 `
public void beginContact(Contact contact) {
Fixture x1 = contact.getFixtureA();
Fixture x2 = contact.getFixtureB();
if(x1.getUserData()!=null && x2.getUserData()!=null){
if(x1.getUserData().equals("sensor") && x2.getUserData().equals("x")){
mob.setState(Mob.ON_AIR, false);
}
else if(x2.getUserData().equals("sensor") && x1.getUserData().equals("x")){
mob.setState(Mob.ON_AIR, false);
}
}
}
@Override
public void endContact(Contact contact) {
Fixture x1 = contact.getFixtureA();
Fixture x2 = contact.getFixtureB();
if(x1.getUserData()!=null && x2.getUserData()!=null){
if(x1.getUserData().equals("sensor") && x2.getUserData().equals("x")){
mob.setState(Mob.ON_AIR, true);
}
else if(x2.getUserData().equals("sensor") && x1.getUserData().equals("x")){
mob.setState(Mob.ON_AIR, true);
}
}
}`
最佳答案
不要在开始/结束接触时简单地设置状态,而是尝试增加和减少计数器来跟踪传感器接触的物体数量。
关于java - LibGdx Box2d Platformer Jump 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21420161/