2011-07-19 7 views
0

私はいくつかの衝突検出が必要な小さなwpfゲームを作成しています。私は表現のブレンドで描かれたいくつかの魚を持っている、と彼らは衝突時を知る必要があります。しかし、私は実際にこれを実装する方法を知らない。描画されたユーザーコントロールの1ピクセルあたりの衝突検出

私は、ピクセル単位の衝突検出を使用し、カットオフとして外接矩形を使用したいと考えています(外側の衝突を検出しないでください)。

これはすべて衝突検出を実装する最もスマートな方法ですか?私はそれぞれの人物の道を持っています、この情報は有用です。私はそれを見るように、私はそれが直線ではなく、湾曲しているので、それから多くを達成しません。

すべてのヘルプは本当に理解されるであろう:)

答えて

1

これはテストが、何かしようとしていません。

public bool CollidsWith(FrameworkElement sprite1, FrameworkElement sprite2, bool pixelPerfect) 
{ 
    try 
    { 
     Rect r1 = Bounds(sprite1); 
     Rect r2 = Bounds(sprite2); 

     if (r1.IntersectsWith(r2)) 
     { 
      if (!pixelPerfect) 
       return true; 
      else 
      { 
       Point pt = new Poin();        
       for (int x = (int)r1.Left; x < (int)r1.Right; x++) 
       { 
        for (int y = (int)r1.Top; y <(int)r1.Bottom; y++) 
        { 
         pt.X = x; 
         pt.Y = y; 
         if (VisualTreeHelper.HitTest(sprite2, pt) != null) 
          return true; 
        } 
       } 
       return false; 
      } 
      else 
       return false; 
     } 
    } 
    catch { } 
    return false; // we should not get here 
} 

public Rect Bounds(FrameworkElement sprite) 
{ 
    get 
    { 
     Point ptBottomRight = new Point(sprite.Position.X + sprite.RenderSize.Width, sprite.Position.Y + RenderSize.Height); 
     return new Rect(sprite.Position, ptBottomRight); 
    } 
}