2011-10-05 22 views
2

我是一名新的Android開發人員,他正在開發GPS運動的Tron遊戲簡單轉彎,但我在實現玩家相交時遇到了問題。在Android中通過路徑創建地區

現在,我的球員的足跡是我移動來協調的路徑,並將座標差異畫成畫布上的一條線。

路徑類沒有提供這樣的交集方法,我可以找到,所以我使用了區域,我測試了一個交集以使用2個常規矩形,但是我無法使用Region.setPath爲Region一些原因。根據我的理解,這條道路需要封閉以形成一個區域,以創建一個區域,這不完全是我需要的。

有沒有辦法從路徑創建區域,而不是路徑創建的區域?即:如果路徑是10px厚的直線,我如何製作一個10px厚度的區域?

這裏是一個簡短的代碼示例我做:

Path p1path = new Path(); 
p1path.moveTo(startPos,startPos); 
p1path.lineTo(newPos,newPos); 
p1path.moveTo(newPos, newPos); 
Region p1region = new Region(); 
p1region.setPath(p1path, new Region(0,0,480,800); // this is where the region isn't setting as I thought it would... 

// do same for p2 
if(p1.quickReject(p2)) // checks for intersection 

謝謝:)

+0

哦,我現在明白爲什麼setPath不適合我在做什麼。一條只是一條直線的路徑,而不是一個矩形的構造,沒有區域,因此無法制作區域。我感到困惑,因爲我的油漆寬度有一個寬度,並且混淆了路徑本身的繪製路徑。我想我會在每次製作路徑時創建一個區域。 – micnguyen

+0

你能成功嗎? – deeJ

+0

嗨deeJ, 看到我的答案在下面(600個字符被詛咒!) – micnguyen

回答

2

所以我這一段時間就解決這個問題,而是幫助那些誰最終碰上這一點,並希望一些類似的功能:

這篇文章是相當一段時間前 - 所以讓我記住發生了什麼。

在路徑周圍創建一個區域實際上確實有效,但對於一組非常有限的路徑。我的意思是「在路徑周圍創建一個區域」,對於從x1,y1到x2的路徑,y2創建一個矩形區域,其覆蓋(例如)x1-50,y1-50到x2 + 50,y2 +50其中,50是路徑的像素權重描邊。

如果你能想象它,它基本上會創建一個覆蓋路徑的矩形區域,它是50px的筆畫,所以你可以使用區域「僞造」路徑交集。無論路徑是哪裏,區域都是這樣,當兩條路徑「相交」時,你可以檢查區域交集(你可以做但是我忘記了方法名稱)。

然而,這證明只適用於幾個路徑。雖然我想認爲我的數學能力是足夠的,但我無法得到它,因此無論路徑走向哪個方向,該地區都可以工作。不同的角度,不同的方向等導致該區域不能正確繪製在路徑下。我上面使用50筆畫寬度的例子只適用於特定的方向。

我的參與者和我偶然發現的解決方案是創建一個映射到屏幕上的2D整數數組。無論路徑進入某個方向,我們都會將映射到路徑的每個數組單元填充一個特定值(1)。我們會爲另一個路徑做同樣的事情,但有不同的值(2)。你做的每一個動作都會根據Path座標來檢查二維數組,看它是否被佔用。有一個重要的數學公式可以推斷當你從x1,y2去到x2,y2時訪問過哪些單元格,這被證明是非常有用的 - 我相信它被稱爲沿着Brasenheim公式的東西,或者什麼。

這不是最優雅的解決方案,但它最終僞造了Path交叉口。如果有人對更好的解釋感興趣,可以給我發消息。

祝你好運!