2011-07-19 34 views
0

我正在創建一個小型wpf遊戲,在那裏我需要一些碰撞檢測。我有一些魚,它們是用表情混合繪製的,我需要知道它們什麼時候碰撞。但我真的不知道如何實現這一點。繪製用戶控件中每個像素的碰撞檢測

我想使用每像素碰撞檢測,並使用邊界矩形作爲截止(不要在外面尋找碰撞)。

但是,這是否是最聰明的方式來實現碰撞檢測?我在每個圖上都有一個路徑,這個信息是否有用。正如我所看到的那樣,我並沒有從中獲得太多,因爲它不是直線,而是彎曲的。

任何幫助真的會感謝:)

回答

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); 
    } 
}