我在LibGdx中使用Box2D来创建一个平台游戏。我有一个算法将瓷砖转换为灯具。我正在使用Contact Listener来判断玩家是否在空中,但问题是,因为我我正在使用彼此相邻的灯具,
(P)-->
|瓦片| |瓷砖| |瓦片|
当我通过相邻的磁贴并将MOB_AIR值设置为true时,联系侦听器呼叫联系人在呼叫联系人开始之后联系结束,因此即使我在地面也无法跳转。
代码的其他部分(mob和box2d世界)工作正常,因为我可以在我新登陆时或在瓷砖之间跳转。
如果你之前遇到过同样的问题,有没有一种很好的方法来实现这种跳跃?
http://i.imgur.com/v8ny3sO.png
http://i.imgur.com/yWcDsZb.png
抱歉我的英语不好,任何帮助都将不胜感激。
PS:问题还不在于由于box2d多边形 - 多边形碰撞故障,我使用了玩家的链形状和瓷砖的多边形。 `
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);
}
}
}`
答案 0 :(得分:1)
当您获得开始/结束联系时,不要简单地设置状态,而是尝试递增和递减计数器以跟踪传感器接触的数量。