1

2 つの画像 (バーと greenBall1) があります。バーは、ユーザーの応答に応じて上下に移動できます。その間、greenBall1 は画面上を動き回っています。両方の画像が互いに接触している場合、画像の衝突を行いたいのですが、greenBall1 はその速度を変更します。greenBall1 のコードは次のとおりです。

 private void OnUpdate(object sender, object e)
 {
         Canvas.SetLeft(this.GreenBall1, this.greenBallVelocityX + Canvas.GetLeft(this.GreenBall1));
         Canvas.SetTop(this.GreenBall1, this.greenBallVelocityY + Canvas.GetTop(this.GreenBall1));



        var greenBallPositionX1 = Canvas.GetLeft(this.GreenBall1);
         var greenBallPositionY1 = Canvas.GetTop(this.GreenBall1);



        var maximumGreenBallX = ActualWidth - this.GreenBall1.ActualWidth;
         var maximumGreenBallY = 400 - this.GreenBall1.ActualHeight; //Improvise: Instead of 360, get maximum height of canvas



        if (greenBallPositionX1 > maximumGreenBallX || greenBallPositionX1 < 0)
         {
             this.greenBallVelocityX *= -1;
         }



        if (greenBallPositionY1 > maximumGreenBallY || greenBallPositionY1 < 0)
         {
             this.greenBallVelocityY *= -1;
         }
      }
4

3 に答える 3

0

コードに bar オブジェクトへの参照がありません。しかし、衝突の検出は、衝突を処理する物理学よりもはるかに簡単です。Pong 衝突のような単純なものにはいくつかの考え方があり、それをどのように処理するかは、必要なゲームプレイによって異なります。

壁の衝突を処理するのと同じように X 速度を無効にするだけで、衝突を検出して処理する簡単な方法を次に示します。

if(greenBallPositionX1 < leftBar.X || greenBallPositionX1 > rightBar.X)
{
    this.greenBallVelocityX *= -1;
}

画像に対する座標の位置に応じて、バーまたはボールの幅も考慮する必要があることに注意してください。例えば:

if(greenBallPositionX1 < (leftBar.X + leftBar.Width) || greenBallPositionX1 > rightBar.X)
{
    this.greenBallVelocityX *= -1;
}

この時点で、衝突が複数回検出されるのを避けるために、ボールをパドルから 1 ステップ離すこともできます。

これがあなたの質問に答えてくれることを願っていますが、衝突検出に対するより複雑な反応を探している場合は、Pong タイプの衝突に関する次の説明を確認してください

于 2013-06-27T02:19:03.760 に答える
0

2つの四角形が衝突するかどうかの値を与えるクラスを作成します

    public bool Intersects(Rect r1,Rect r2)
    {
      r1.Intersect(r2);

      if(r1.IsEmpty)
      {
        return false;
      }
      else 
      {
        return true;
      }
    }

その後、使用できます

if(Intersects(r1,r2))
{
  MessageBox.Show("Collison Detected");
}
于 2013-07-04T05:01:56.227 に答える