我正在尝试创建一个形状,使船的中心位于中间。两个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