-1

アンドエンジンで簡単なゲームを開発しています。画面上でランダムに動く 10 個のボールがあります。ボールをスプライトの画像としてインポートしています。ボールが同じ座標で動く場合、ボールは自分の内部を通過します。しかし、同じ座標で動く場合、ボールは彼らの方向を変えるべきです.彼らは彼らの内部を通り抜けることができません.どうすればそれを行うことができますか?

   private Runnable mStartCircle = new Runnable() {
      public void run() {
        int i = circleNumber++;
        Scene scene = Level1Activity.this.mEngine.getScene();
        float startY = -64.0f;
        float startX = randomNumber.nextFloat()*(CAMERA_WIDTH-70.0f);
        float a= randomNumber.nextFloat()*(CAMERA_WIDTH-70.0f);
        circles[i] = new Sprite(startX, startY, textRegCircle[i]);
        circles[i].registerEntityModifier(
                (IEntityModifier) new SequenceEntityModifier (
                            new MoveModifier(10.0f, circles[i].getX(),  a, 
                                    circles[i].getY(),CAMERA_HEIGHT+64.0f)));
        }
        scene.getLastChild().attachChild(circles[i]);
        if (circleNumber < 10){
            mHandler.postDelayed(mStartCircle,1000);
        }
    }
 };
4

2 に答える 2

2

各オブジェクト (ボール) には、バウンディング ボックス、またはあなたの場合はスプライトのサイズに等しいバウンディング サークルが必要です。

ゲームが更新され、ボールの位置が変更された場合、衝突をテストする必要があります。

円から円への衝突テストは、実行する最も簡単なタイプです。(ball1.pos + ball2.pos) 間の距離が (ball1.radius + ball2.radius) = 衝突より小さい場合。

次に、速度を逆にしたり、新しい運動量などを計算したりして、衝突を処理します。(オブジェクトが衝突しないように、オブジェクトを離す必要もあります)

于 2012-04-24T19:16:18.953 に答える
0

ボール間に物理コネクタを適用するだけです:

だから衝突して跳ね返る。

final FixtureDef boxFixtureDef = PhysicsFactory.createFixtureDef(0.1f, 0.5f, 0.5f);
final Body ballBody = PhysicsFactory.createBoxBody(this.mPhysicsWorld, circles[i],BodyType.DynamicBody, boxFixtureDef);
this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(circles[i], ballBody, true, true));
this.mScene.attachChild(circles[i]);
于 2014-02-18T11:57:03.487 に答える