2012-01-29 207 views
4

我有許多圖像需要長時間放置在畫布上,以使它們看起來隨機。但是,我不希望任何圖像相互重疊。到目前爲止,我的解決方案是將圖像隨機放置在畫布上的某處。如果它重疊,我會生成一個新的隨機位置來嘗試。Android中的2D矩形碰撞檢測

現在棘手的部分是看看我將要在哪裏放置圖像將與另一圖像重疊。

我打算做一個1和0的大數組,並手動標記我放置圖像的位置。但是,我想知道是否有人知道如果我將要放置圖像的地方與現有圖像重疊,使用某種方法「自動檢測」的方法?或者如果有一種方法可以使用某些Android功能來執行碰撞檢測?

回答

5

檢查,看看兩個矩形重疊非常簡單,只需使用Rect.intersect()

退房的Rect文檔的更多信息: http://developer.android.com/reference/android/graphics/Rect.html

雖然我會建議你嘗試的東西比你所描述什麼不同以上。一開始碰撞的可能性將非常低。但是,隨着屏幕填滿碰撞概率的上升。這導致很多碰撞和浪費的計算能力。

你應該使用一些更有效的,把我的頭頂部,你可以嘗試這樣的事:

  1. 分割畫面劃分成大小爲MxN
  2. 的網格將所有無人居住的網格位置的列表
  3. 選擇一個隨機網格位置爲新的圖像i
  4. 選擇一個隨機的寬度和高度爲圖像i
  5. 如果i相交一個已經填充的網格位置,或者,如果熄滅屏幕縮水了
  6. 繪製i
  7. 如果所有網格位置採取退出,否則到3
4

一個簡單的2D isinbox功能,可以是:

bool IsInBox(int x1, int y1, int width1, int height1, int x2, int y2, int width2, int height2) { 
    int right1 = x1 + width1; 
    int right2 = x2 + width2; 
    int bottom1 = y1 + height1; 
    int bottom2 = y2 + height2; 

    // Check if top-left point is in box 
    if (x2 >= x1 && x2 <= right1 && y2 >= y2 && y2 <= bottom1) return true; 
    // Check if bottom-right point is in box 
    if (right2 >= x1 && right2 <= right1 && bottom2 >= y2 && bottom2 <= bottom1) return true; 
    return false; 
} 

不知道,如果作品雖然XD

或者你可以使用Rect.Intersect()

+0

這可以工作,但每次我想添加一個新的圖像,我必須檢查所有以前的圖像。我希望有一種方法可以做到這一點,在我放下某個圖像後,我可以標記該區域。然後下一次我想放下一張圖像時,我可以檢查它是否與標記區域相撞。 – Alexis 2012-01-29 21:14:40