Box2d联系人监听器在presolve上无法正常工作

时间:2014-06-12 19:20:27

标签: android box2d collision-detection

我正在使用box2d制作游戏。我有球,当球通过传感器时我需要增加分数...... 现在,当我在beginContact中解决联系时,一切正常

public ContactListener createContactListener() {
        return new ContactListener() {
            @Override
            public void beginContact(Contact contact) {

                if(contact.getFixtureA().getUserData() == "ball" && contact.getFixtureB().getUserData() == "cup_sensor"){
                    //contact.getFixtureA().setUserData("ball_inactive");
                    Constants.LC.score++;

                    //contact.getFixtureA().getFilterData().maskBits = 0xffff & 0x0002;
                    //contact.setEnabled(false);
                }

                if(contact.getFixtureB().getUserData() == "ball" && contact.getFixtureA().getUserData() == "cup_sensor"){
                    //contact.getFixtureB().setUserData("ball_inactive");
                    Constants.LC.score++;
                    //contact.getFixtureB().getFilterData().maskBits = 0xffff & 0x0002;
                    //contact.setEnabled(false);
                }
            }

            @Override
            public void endContact(Contact contact) {

            }

            @Override
            public void preSolve(Contact contact, Manifold oldManifold) {

            }

            @Override
            public void postSolve(Contact contact, ContactImpulse impulse) {
            }
        };
    }

每件事都像魅力

但出于某种原因,我想在presolve中做到这一点

return new ContactListener() {
    @Override
    public void beginContact(Contact contact) {


    }

    @Override
    public void endContact(Contact contact) {

    }

    @Override
    public void preSolve(Contact contact, Manifold oldManifold) {
        if(contact.getFixtureA().getUserData() == "ball" && contact.getFixtureB().getUserData() == "cup_sensor"){
            //contact.getFixtureA().setUserData("ball_inactive");
            Constants.LC.score++;

            //contact.getFixtureA().getFilterData().maskBits = 0xffff & 0x0002;
            //contact.setEnabled(false);
        }

        if(contact.getFixtureB().getUserData() == "ball" && contact.getFixtureA().getUserData() == "cup_sensor"){
            //contact.getFixtureB().setUserData("ball_inactive");
            Constants.LC.score++;
            //contact.getFixtureB().getFilterData().maskBits = 0xffff & 0x0002;
            //contact.setEnabled(false);
        }
    }

    @Override
    public void postSolve(Contact contact, ContactImpulse impulse) {
    }
};

}

现在它不起作用......它没有通过if条件......因此得分不会增加......

请支持我解决这个问题

编辑:我做了一些调试。似乎在presolve contact.getFixtureA()。传感器的getUserData()返回null。我不知道为什么

1 个答案:

答案 0 :(得分:1)

PreSolve回调可让您在计算碰撞响应脉冲之前立即执行某些操作。传感器没有碰撞响应,因此不会为它们调用PreSolve。