私は並べ替えようとしている奇妙な論理エラーがありますが、壁に当たっています。多分ここの集団的な心が助けることができます!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
}
});
最初の衝突検出は意図した通りに機能します。ディスクがグランドボックスに衝突し、削除され、スタートステップと新しいディスクがワールドステップの外で作成されます。なぜこのコードが発射されないのか分かりません。
私は、このコード行をどれだけ長く見つめているかは分かりません。それは私がそれを直視してとてもシンプルだった!私の間違いをキャッチしてくれてありがとう。私はちょうどそれにハハの目の第二のセットが必要だったと思う。 –
私はお手伝いできることを嬉しく思います。 –