2015-05-24 91 views
2

我在隨機生成的地牢迷宮遊戲中遇到了碰撞問題。所以基本上,我的遊戲隨機在它們之間產生房間和路徑。然而,我發現衝突的方式是矩形:Java複雜路徑碰撞

public Rectangle getBounds(){ 
    return new Rectangle(x, y, w, h); 
} 

由於我使用矩形來檢測碰撞,每當我試圖離開房間,進入一個途徑,房間的碰撞矩形阻止我這樣做。 Dungeon Generation 我Me(藍色方框)試圖進入綠色通道(但我不能因爲房間的碰撞矩形),紅色方框是房間,藍色方框是碰撞方塊。

有沒有辦法讓我解決這個問題,或更好的方法來檢測碰撞?

+0

您可以隨時修改你的碰撞代碼忽略碰撞時,你是在邊界上。的或直接在綠色通道上。 – hexafraction

回答

1

您需要將您的碰撞代碼更改爲不使用Rectangle s,而是使用Line s。在java中的Rectangle s方便地具有用於Line的碰撞檢測方法,其中Rectangles。

Line2D.interects(Rectangle r) 

通過播放機具有矩形碰撞掩蓋,這是一種怎麼會看在球員class注:代碼丟失例如像水平一流的更新玩家面具和List<Line2D.Float> walls聲明(或任何你擁有它)

Rectangle mask = new Rectangle.Float(x, y, width, height); 

protected boolean wallCollision() { 
    for (Line2D.Float l : level.walls) { 
      if (l.intersects(this.mask) 
       return true; 
    } 
    return false; 
} 
+0

至於你的關卡生成器,我建議查找一些java的迷宮生成器算法,它不應該太難找到。 –