我正在使用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。我不知道为什么
答案 0 :(得分:1)
PreSolve回调可让您在计算碰撞响应脉冲之前立即执行某些操作。传感器没有碰撞响应,因此不会为它们调用PreSolve。