我正在嘗試創建一個形狀,使船的中心位於中間。兩個Shape對象似乎在錯誤的位置相交?
one.x
和one.z
是該船的X和Z位置。在X上的船大小約爲100,在Z上爲50。
Shape my = new Rectangle(
(int) one.x - disToLeft, // upper-left corner X
(int) one.z - disToTop, // upper-left corner Y
disToLeft + disToRight, // width
disToTop + disToBottom // height
);
然後我旋轉Shape,當然要面對正確的方法。這似乎工作:
int rectWidth = (disToLeft + disToRight);
int rectHeight = (disToTop + disToBottom);
AffineTransform tr = new AffineTransform();
// rotating in central axis
tr.rotate(
Math.toRadians(one.rotation),
x + (disToLeft + disToRight)/2,
z + (disToTop + disToBottom)/2
);
my = tr.createTransformedShape(my);
我然後做與另一個形狀完全相同的東西,並測試相交。這工作。
但是,感覺形狀是不正確的尺寸。或者其他的東西。我的船在很遠的一側(在圖形存在的地方)碰撞,但從另一側,我幾乎可以在發現任何碰撞之前穿過船舶!
基本上,形狀只是在錯誤的位置相交。我無法弄清楚爲什麼。形狀,位置或旋轉必須錯誤。
int disToLeft = 100;
int disToRight = 100;
int disToTop = 150;
int disToBottom = 100;
這些是從中心到左側,右側,頂部和底部的距離。
我使用的是Z
而不是Y
,因爲我的遊戲處於3D世界,海平面幾乎相同(因此我不必擔心Y軸碰撞!)。
更新:
做了很多的測試後,我發現,矩形的頂部是在中間!我做了很多亂七八糟的事情,但是沒有能夠以圖形的方式看到正方形,這很難測試。 這意味着框在船的一側,像這樣:
顯然,當左邊的船旋轉到是什麼感覺在這張圖片中,檢測到衝突。
我注意到我的代碼中的一些未使用的變量或不好的做法。請不要將它們指出來,只要我有一些實際可行的東西,我會盡快解決它們。 – Joehot200 2015-04-06 10:23:52
你應該隔離一個測試用例,然後用一個調試器遍歷它。 – 2015-04-06 11:06:23
@OliverCharlesworth有一些公然錯誤的東西,我只是沒有注意到和其他人。 – Joehot200 2015-04-06 16:33:09