0

ポンクローン

まず、お時間をいただきありがとうございます。

EdgeShape で Box2D センサーを使用してボールとの衝突条件を判断し、その条件を使用してスコア変数をインクリメントするにはどうすればよいですか?

libGDX経由でBox2Dを使用してPongクローンを作成しています! iforce2d と Ray Wenderlich から素晴らしい例とチュートリアルを見つけましたが、それらは現時点ではよく知らない言語とライブラリで書かれています。コードを理解して変換しようとしてもうまくいきません。センサーの使用に関するコードまたは Java/libGDX レンディションへのリンクを提供できれば、非常に助かります。

コードで連絡先を受信して​​いますが、パドルの長方形とアリーナの境界との接触を無視し、左または右の EdgdeShape センサーとの衝突時にスコア変数をインクリメントするアルゴリズムのレシピをまだ理解していません。

SOに投稿する前に、解決策をハックするための役立つ情報を少しずつ見つけるために、2週間Webを掃除しましたが、これには公式に困惑しています. 私はいくつかのガイダンスを使用できます。

4

1 に答える 1

1

あなたの努力がどこまで行き、libgdxで作業したことがないかはわかりませんが、進むべき道は次のようなものです:

  1. fixture.setUserData()(可能性がありますbody)あなたが持っている単一のボディ(outLeft、outRight、paddleLeft、paddleRight、ball)を認識します-これは、必要なものは何でも、整数からゲームオブジェクトインスタンス全体までの有用な情報である可能性があります

  2. 左/右の境界をセンサーとして設定しますfixture.setSensor(true)-これは、境界が衝突を誘発しないように設定する必要があります

  3. コンタクト リスナーを実装するendContact(Contact contact)(または必要に応じてコンタクトを開始する) コンタクト オブジェクトからフィクスチャ A と B を呼び出して要求しcontact.getFixtureA/B()、指定されたコリジョンがニーズに関連しているかどうかを判断します。

-

public void endContact(Contact contact) {
  Fixture fixtureA = contact.getFixtureA();
  Fixture fixtureB = contact.getFixtureB();
  Object userDataA = fixtureA.getBody().getUserData();
  Object userDataB = fixtureB.getBody().getUserData();
  // check if one is ball
  if (userDataA instanceof Ball) {
    checkBallCollision(userDataB);
  } else if (userDataB instanceof Ball) {
    checkBallCollision(userDataA);
  }
}

private void checkBallCollision(Object userData) {
  if (userData instanceof outLeft) {
    //add points to right player
  } else if (userData instanceof outRight) {
    //add points to left player
  }
}

-4. あなたの ContactListener をあなたに追加してくださいWorld.setContactListener()

前述のように、これが機能するかどうかは 100% 確信が持てません。andengine でセンサーを処理する別のリンクを次に示します: http://www.matim-dev.com/creating-sensors.html

于 2013-07-22T22:47:36.927 に答える