Java box2d联系人侦听器订单

Java box2d联系人侦听器订单,java,box2d,Java,Box2d,我试图了解它是如何工作的 在我的游戏中,我使用box2d physics来处理联系人,我使用联系人侦听器,例如: ContactListener contactListener = new ContactListener() { @Override public void beginContact(Contact contact) { final Fixture x1 = contact.getFixtureA(); final Fixtu

我试图了解它是如何工作的

在我的游戏中,我使用box2d physics来处理联系人,我使用联系人侦听器,例如:

ContactListener contactListener = new ContactListener()
{
    @Override
    public void beginContact(Contact contact)
    {
        final Fixture x1 = contact.getFixtureA();
        final Fixture x2 = contact.getFixtureB(); 

        if (x1.getBody().getUserData() != null && x2.getBody().getUserData() != null)
        {                   
            if (x1.getBody().getUserData().equals("player"))
            {                                               
                player.increaseFootContacts();
            }
        }
    }

这里有个问题,这些装置有什么顺序吗?(x1或x2)经过2次测试,我发现在这种情况下,我的播放器将是x1,而其他对象是x2,我是否也应该检查相反的顺序?(如果x2是播放器,依此类推)

否,无法保证哪个夹具是哪个。您必须检查这两种可能性,如下所示:

if ( (userdataA.equals("player") && userDataB.equals("ground")) ||
     (userdataA.equals("ground") && userDataB.equals("player")) )
         player.increaseFootContacts();

谢谢你的回答,这就是为什么我现在有点困惑的原因,从你所说的,我可以得出结论,我的方式有时根本不起作用(我会说50%的可能性),因为我只是记录了哪个赛程将是我的球员,而后者使用了单次检查,不知怎么的,它起了作用。。。总是(我在大约20台设备上测试了我的游戏,[android]并且在开发过程中在我自己的设备上进行了数百次测试),你认为这一额外检查会对性能产生显著影响吗?假设在我的联系人侦听器上,我比较了大约15个不同的对象,以执行不同的操作。谢谢在实践中,你可以根据你在世界上创造事物的顺序,对哪个装置是哪个装置做出有根据的猜测。如果你创建的所有东西都完全相同,那么在任何设备上都会得到相同的结果。但依赖这种假设不是一个好主意。关于优化,我首先要指出的是,如果这实际上不是性能问题,就不要碰它:)我认为提高速度的最好方法是用比较快的整数或枚举值替换字符串用户数据。谢谢,所以现在我将继续使用“有根据的猜测”。此外,我一直在考虑改进contact listener中的代码,正如您所说,将其替换为例如int。目前,即使在较旧的设备上(约57 fps),我也没有性能问题,但我相信,在某些地方我们可以稍微提高性能总是好的。我明白了。请记住,只有在两件事发生冲突时才会调用此代码:)