2013-04-10 119 views
-1

我打算製作一個2d自上而下的RPG,所以我決定在開始之前玩弄一些東西。舉一個例子,我從母親3拿到this map

我原本計劃有一個Rectangle數組,每次調用Update()函數時都會檢查它以檢查精靈是否與它們發生碰撞,但其中一些形狀是方式太複雜了。有另一種方法我應該做碰撞檢測?因爲這種方式在大規模上似乎不可行。2.5d地圖與玩家碰撞

回答

1

您可以根據對象使用不同種類的邊界形狀。簡單地讓他們都實現一個共同的接口:

public interface IBoundingShape 
{ 
    // Replace 'Rectangle' with your character bounding shape 
    bool Intersects(Rectangle rect); 
} 

然後你就可以有一個CircleRectanglePolygon都實現IBoundingShape。對於更復雜的對象,你可以引入一個複合邊界形狀:

public class CompoundBoundingShape : IBoundingShape 
{ 
    public CompoundBoundingShape() 
    { 
     Shapes = new List<IBoundingShape>(); 
    } 

    public List<IBoundingShape> Shapes { get; private set; } 

    public bool Interesects(Rectangle rect) 
    { 
     foreach (var shape in Shapes) 
     { 
      if (shape.Intersects(rect)) 
       return true; 
     } 

     return false; 
    } 
} 

此外,您可以使用CompoundBoundingShape爲邊界層次早早放棄的對象。

在遊戲中,您只需遍歷所有遊戲對象並檢查玩家的邊界形狀是否與風景相交。

+0

是否可以通過一組頂點定義多邊形? – jae 2013-04-10 13:52:36

+0

當然,只是相應地設計你的交集方法。搜索*矩形多邊形交集*或類似的東西。 [點多邊形算法](http://en.wikipedia.org/wiki/Point_in_polygon)也可能是你感興趣的。 – Lucius 2013-04-10 14:55:52

相關問題