-1
我打算製作一個2d自上而下的RPG,所以我決定在開始之前玩弄一些東西。舉一個例子,我從母親3拿到this map。
我原本計劃有一個Rectangle數組,每次調用Update()函數時都會檢查它以檢查精靈是否與它們發生碰撞,但其中一些形狀是方式太複雜了。有另一種方法我應該做碰撞檢測?因爲這種方式在大規模上似乎不可行。2.5d地圖與玩家碰撞
我打算製作一個2d自上而下的RPG,所以我決定在開始之前玩弄一些東西。舉一個例子,我從母親3拿到this map。
我原本計劃有一個Rectangle數組,每次調用Update()函數時都會檢查它以檢查精靈是否與它們發生碰撞,但其中一些形狀是方式太複雜了。有另一種方法我應該做碰撞檢測?因爲這種方式在大規模上似乎不可行。2.5d地圖與玩家碰撞
您可以根據對象使用不同種類的邊界形狀。簡單地讓他們都實現一個共同的接口:
public interface IBoundingShape
{
// Replace 'Rectangle' with your character bounding shape
bool Intersects(Rectangle rect);
}
然後你就可以有一個Circle
,Rectangle
,Polygon
都實現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
爲邊界層次早早放棄的對象。
在遊戲中,您只需遍歷所有遊戲對象並檢查玩家的邊界形狀是否與風景相交。
是否可以通過一組頂點定義多邊形? – jae 2013-04-10 13:52:36
當然,只是相應地設計你的交集方法。搜索*矩形多邊形交集*或類似的東西。 [點多邊形算法](http://en.wikipedia.org/wiki/Point_in_polygon)也可能是你感興趣的。 – Lucius 2013-04-10 14:55:52