0
我有一個奇怪的邏輯錯誤,我正在嘗試排序,但是我打了一面牆,似乎無法找到我的方式。也許這裏的集體思想可以幫助!檢測到libgdx傳感器發生碰撞,但條件代碼未被觸發
那麼究竟發生了什麼:我在Box2D中創建了一張光盤,並在box2D中創建了一個傳感器盒。如果光盤與傳感器碰撞,邏輯很簡單。你贏了!問題是,我可以檢測到球和傳感器之間的碰撞,但是條件是,您贏得的代碼不會觸發。這是我正在使用的代碼。
//instantiating the disc, ground, start platform, and win sensor
disc = createCircleBody("Circle", 20, camera.viewportWidth/2, 450, 0);
disc.setUserData("disc");
floor = createGround(tmpFloor);
floor.setUserData("floor");
platform = createPlatform(initPlatform);
platform.setUserData("platform");
winSensor = createWinSensor(tmpWinSensor);
winSensor.setUserData("winSensor");
//... Code omitted for clarity ...
world.setContactListener(new ContactListener() {
@Override
public void beginContact(Contact contact) {
Body fixtureA = contact.getFixtureA().getBody();
Body fixtureB = contact.getFixtureB().getBody();
// if the disc and the floor collide.
if((fixtureA.getUserData() == disc.getUserData() && fixtureB.getUserData() == floor.getUserData()) || (fixtureA.getUserData() == floor.getUserData() && fixtureB.getUserData() == disc.getUserData())) {
newDisc.add(tmpDisc);
newDisc.add(tmpPlatform);
bodiesForDeletion.add(disc); // destroy the current disk
}
// if contact is detected between disc and WinSensor
if (fixtureA.getUserData() == winSensor.getUserData() && fixtureB == disc.getUserData()) {
Gdx.app.log("WIN_CONDITION", "You won!"); // This line won't fire.
//TODO: Create alert Box to notify user that they have won the game!
}
Gdx.app.log("beginContact", "between " + contact.getFixtureA().getBody().getUserData() + " and " + contact.getFixtureB().getBody().getUserData() + ".");
}
@Override
public void endContact(Contact contact) {
Body fixtureA = contact.getFixtureA().getBody();
Body fixtureB = contact.getFixtureB().getBody();
Gdx.app.log("endContact", "between " + contact.getFixtureA().getBody().getUserData() + " and " + contact.getFixtureB().getBody().getUserData() + ".");
}
@Override
public void postSolve(Contact arg0, ContactImpulse arg1) {
// TODO Auto-generated method stub
}
@Override
public void preSolve(Contact arg0, Manifold arg1) {
// TODO Auto-generated method stub
}
});
第一次碰撞檢測按預期工作。碟片與地面盒碰撞,被刪除,在世界之外創建啓動平臺和新碟片。我無法弄清楚爲什麼這段代碼沒有被解僱。
我不能告訴你我盯着那行代碼多久了。這很簡單,我看着它!謝謝你抓住我的錯誤。我想我只需要第二組眼睛哈哈。 –
不客氣,很高興我可以幫助:) –