我目前正在XNA中撰寫平臺遊戲。 我的碰撞測試是通過運行一個foreach循環來測試玩家的邊界框與每個瓦片的邊界框。但是,我無法弄清楚如何測試玩家是不是觸摸任何塊。在XNA中測試所有非碰撞瓷磚
我該如何運行我的陣列並測試他們的球員是否沒有觸及任何阻擋,以便我可以檢查他是否處於半空中?任何幫助或建議將不勝感激。先謝謝你!
/////////////////////////////////////
我碰撞的代碼是
if (personRectangle.TouchTopOf(newRectangle))
{
onGround = true;
test = false;
test2 = true;
}
相應的布爾測試是
public static bool TouchTopOf(this Rectangle r1, Rectangle r2)
{
return (r1.Bottom >= r2.Top - 1 &&
r1.Bottom <= r2.Top + (r2.Height/2) &&
r1.Right >= r2.Left + (r2.Width/5) &&
r1.Left <= r2.Right - (r2.Width/5));
}
這一塊代碼測試碰撞在Game1.cs更新。
foreach (CollisionTiles tile in map.CollisionTiles)
player.Collision(tile.Rectangle);
這是在我的地圖類瓷磚的列表
private List<CollisionTiles> collisionTiles = new List<CollisionTiles>();
我不確定我是否明白你的意思。我目前正在使用rectangle.Top等方法來測試邊界。但是它會對每個塊進行測試,並且會因爲觸及某些塊而不是其他塊而導致混淆,導致觸發真(true)和其他(false)。我正在測試它是否觸及任何塊... – Brecon 2013-02-27 19:59:46
@Brecon請參閱我的編輯 – 2013-02-28 08:46:09