【发布时间】:2014-01-29 01:08:25
【问题描述】:
我在 LibGdx 中使用 Box2D 来创建平台游戏。我有一个算法可以将瓷砖转换为固定装置。我正在使用 Contact Listener 来确定玩家是否在空中,但问题是,因为我我正在使用彼此相邻的固定装置,
(P)-->
|瓷砖| |瓷砖| |瓷砖|
当我通过相邻的瓷砖并将 MOB_AIR 值设置为 true 时,在调用 contact begin 后,contact listener 会调用 contact end,导致即使我在地上也无法跳跃。
代码的其他部分(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);
}
}
}`
【问题讨论】: