【问题标题】:Box2d contact listener doesnt work right at presolveBox2d 联系侦听器在预解析时无法正常工作
【发布时间】:2014-06-12 19:20:27
【问题描述】:

我正在使用 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。我不知道为什么

【问题讨论】:

    标签: android box2d collision-detection


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2017-06-08
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多