getContactList
返された連絡先の一部が実際には連絡先ではないようで、問題が発生しています。
関連コード:
List < Contact > contacts = theBall.body.getWorld().getContactList(); //get all contacts in current world
if (contacts.size() == 0) selected = -1; // if there are no contacts, set selected to -1, meaning no menu item is selected
/* loop through all contacts */
for (Contact con: contacts) {
Fixture fixtureA = con.getFixtureA();
Fixture fixtureB = con.getFixtureB();
LogapPlatform lplat = LogapUtils.cast(fixtureA.getBody().getUserData(), fixtureB.getBody().getUserData(), LogapPlatform.class);
LogapBall lball = LogapUtils.cast(fixtureA.getBody().getUserData(), fixtureB.getBody().getUserData(), LogapBall.class);
/* check if the contact is between a LogapBall object and a LogapPlatform object */
if (lball != null && lplat != null) {
/* if true, determine which of the five menu platforms the ball has been placed on top of */
for (int i = 0; i < LogapLevel.ctrPlat.size(); i++) {
if (lplat.equals(LogapLevel.ctrPlat.get(i)) && (lball.getPos().y > lplat.getPos().y)) {
selected = (int) Math.floor(i / 5); // set selected to the "id" of the selected menu platform
}
}
} else {
selected = -1; // if false, set selected to -1
}
}
/* "NEW GAME" is the only menu item currently implemented. its "id" = 2 */
if (selected == 2)
LogapGame.font.setColor(Color.YELLOW); // if the ball is placed on top of the menu platform for NEW GAME, set the font color of the text to yellow
else
LogapGame.font.setColor(Color.PINK); // else, keep the text pink
/* draw the text on the screen */
if (logLev.menuLevel) {
LogapGame.font.draw(batch, "NEW GAME", 135, 150);
LogapGame.font.setColor(LogapGame.GRAY_192);
}
このコードの動作 (および私が抱えている問題) を確認するために、説明するビデオ サンプルを次に示します (私は Box2DDebugRenderer を有効にしています)。
http://www.youtube.com/watch?v=RcHwt4b4lt0
すでにお気づきかもしれませんが、私が抱えている問題は、ボールがまだプラットフォームに接触していないにもかかわらず、テキストが黄色に変わることです。ボールがプラットフォームに接触したときにのみ、テキストが黄色に変わるはずです。彼らが実際に接触していないかどうか疑問がある場合は、ここにクローズアップがあります:
サンプル http://static.rateyourmusic.com/lk/l/w/02413fc8b4aef5d9f37c3b12420d4a2d/4870735.png
2 つのオブジェクトがまだ接触していないのに、テキストの色が変わる理由について何か考えはありますか?
PS - なぜ私が衝突リスナーを使用しないのか疑問に思っている人のために、まあ、私はそうです。この特定のロジックではありません。コリジョン リスナーでいくつかの癖に遭遇したので、ゲーム内のオブジェクトの動作の一部について、このように連絡先を手動でクエリすることにしました。