LIBGDX发现哪个物体与其固定装置相撞

时间:2013-12-22 21:33:31

标签: libgdx

我正在做一个简单的跳投游戏并且遇到碰撞问题。在项目中我有播放器和平台类。玩家覆盖了shouldCollide(Fixture fixtureA,Fixture fixtureB)方法。我的问题是,如果有一种方法来获得fixtureA和fixtureB是玩家与平台发生碰撞?我在libgdx的github上阅读了演示,但是那里的项目(Superjumper)似乎没有使用box2D,所以我很少关于如何在我的项目中正确地进行碰撞。

我现在的应用柯利德看起来像这样:

@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {
    if(fixtureA == fixture || fixtureB == fixture){
        return body.getLinearVelocity().y< 0; 
    }
    return false;
}

比较夹具(A和B)和夹具可以告诉我玩家是否是“碰撞制造者”之一(对不起,但我找不到合适的英文单词)只是因为它在Player类中的定义与方法相同。 / p>

我发现我可以在我的平台类的Fixture中添加字符串给userData,然后在shoudCollide中我必须只获得那个userData,我想知道它是否有好的方法。

1 个答案:

答案 0 :(得分:1)

  

我发现我可以在我的平台类的Fixture中添加字符串给userData,然后在shoudCollide中我必须只获得那个userData,我想知道它是否有好的方法。

实际上,您可以在用户数据中添加Object

如果您真的只有平台和播放器,您可能会执行以下操作。请注意,这只是一个快速演示,并未涵盖所有情况(如玩家与玩家碰撞,或平台与平台碰撞)。对于更复杂的场景,您可能必须找到一种使用反射的更通用的算法。

Player player = ...;
playerFixture.setUserData(player);

Platform platform = ...;
platformFixture.setUserData(platform);

...

@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {
    if (fixtureA.getUserData() != null && fixtureB.getUserData() != null) {
        Player player;
        Platform platform;
        if (fixtureA.getUserData() instanceof Player) {
            player = fixtureA.getUserData();
            platform = fixtureB.getUserData();
        } else {
            player = fixtureB.getUserData();
            platform = fixtureA.getUserData();
        }

        // now you have full access to the player and the platform
    }

    return false;
}

对于碰撞过滤器,这可能有点过于强大,但只要你必须实现碰撞处理程序,你就需要拥有真实的实体,而不是仅Strings