2016-07-31 22 views
-1

我使用GetBounds方法作爲遊戲的碰撞檢測的一部分,它正在做一些相當奇怪的事情。 GetBounds爲我的多邊形的原始位置返回一個邊界框,但不是我移動到的當前位置。這是非常令人困惑的,因爲當我畫出我的多邊形時,它出現在正確的位置。我覺得這可能是我在移動我的多邊形時犯的一個錯誤,所以我包含了我如何移動它的詳細描述。Java GetBound給出原始多邊形位置不是當前

我改變多邊形位置的方法是修改從類多邊形繼承的數組「xpoints」和「ypoints」。通過將多邊形的所需位置添加到包含位置0,0處的多邊形的不同陣列並替換該陣列來修改xpoints和ypoints數組。

下面是代碼:

Public Class Sword extends Polygon{ 

int[] SwordXPoints, SwordYPoints 

public void main(int DesiredLocation){ 
for(int i = 0; i < super.ypoints.length; i++){ 
super.ypoints[i] = SwordXPoints + DesiredLocation; 
} 
for(int i = 0; i < super.xpoints.length; i++){ 
super.xpoints[i] = SwordYPoints + DesiredLocation; 
} 
} 
} 

我希望這個解釋更容易理解和更簡單。

謝謝,山姆。

+0

這甚至不是完整的,您使用的是自己的劍類等於是HEC怎麼辦,我們沒什麼兩樣東西,你在那裏做? – gpasch

+0

對不起,這似乎對我有意義。我會重寫它,並儘量避免使用從我的遊戲中抽取的任何特定代碼,並將其重寫爲易於閱讀。 –

回答

0

的調用getBounds()運行這段代碼:

if (bounds == null) { 
    calculateBounds(xpoints, ypoints, npoints); 
} 
return bounds.getBounds(); 

第一次通過,bounds爲null,並且calculateBounds被調用。這遍歷你的觀點,計算X和Y的最小值和最大值,並創建bounds。在後續調用bounds不爲空,並返回緩存的值。

在完成所有點的更新後,您需要做的是添加一個電話到invalidate()

或者,您可以使用AffineTransform更改Graphics2D的原點和比例,按原樣繪製多邊形,然後恢復原始原點和比例。調用的粗糙順序是:

AffineTransform origAT = g2.getTransform(); // Save original 
AffineTransform newAT = new AffineTransform(); 
newAT.concatenate(origAT); 
newAt.translate(newX, newY); 
g2.setTransform(newAt); 
g2.draw(polygon); 
g2.setTransform(origAt); // restore original 
+0

謝謝Devon_C_Miller。這是爲什麼它不工作的完美解釋。我想知道你真的在哪裏找到這些代碼,我花了很長一段時間瀏覽oracle的網站,並找不到任何代碼如何獲得邊界的工作。 –

+0

@SamChapman安裝JDK時,安裝過程中的某個地方是一個'src.zip',它包含Java源代碼。在捏,你可以解壓,看看。但是IDE應該讓你控制點擊一個符號並查看源代碼。我還沒有嘗試過Eclipse,但我知道它在NetBeans和IntelliJ IDEA中都可以工作。 –