2016-08-17 10 views
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 
     } 
    }); 

最初の衝突検出は意図した通りに機能します。ディスクがグランドボックスに衝突し、削除され、スタートステップと新しいディスクがワールドステップの外で作成されます。なぜこのコードが発射されないのか分かりません。

答えて

0

あなたfixtureB.getUserData()が欠落しているの文

if (fixtureA.getUserData() == winSensor.getUserData() && fixtureB == disc.getUserData()) {

場合、それはあなたのように思えます。

+0

私は、このコード行をどれだけ長く見つめているかは分かりません。それは私がそれを直視してとてもシンプルだった!私の間違いをキャッチしてくれてありがとう。私はちょうどそれにハハの目の第二のセットが必要だったと思う。 –

+0

私はお手伝いできることを嬉しく思います。 –

関連する問題