gpt4 book ai didi

旋转矩形的Java碰撞检测?

转载 作者:搜寻专家 更新时间:2023-10-31 20:06:20 28 4
gpt4 key购买 nike

我正在编写我的第一个 java 游戏,到目前为止:

我制作了一个可以用WSAD四处走动的矩形,他总是面向鼠标所指的地方。此外,如果您单击,他会向您鼠标指向的位置发射子弹(并且子弹会旋转以朝向该方向)。我还制造了跟随你的敌人,他们旋转以面对你的角色。我遇到的问题是,我编写的碰撞检测仅检测对象(角色、敌人和子弹)在旋转之前的碰撞(使用 .intersects())。这意味着绘制时他们 body 的某些部分会重叠。

我一直在四处寻找,但没有找到任何我理解或可以适用于我的情况的解决方案。到目前为止,我一直在为每个对象旋转我的 Graphics2D 网格,所以它们实际上并没有被旋转,只是被拉出来了。有没有一种方法可以实际旋转它们的形状,然后使用类似 .intersects() 的方法?

如有任何帮助或建议,我们将不胜感激。

这是我用来查看它是否会通过在 x 轴上移动而发生碰撞的方法:

public boolean detectCollisionX(int id, double xMove, double rectXco, double rectYco, int width, int height)
{
boolean valid=true;
//create the shape of the object that is moving.
Rectangle enemyRectangleX=new Rectangle((int)(rectXco+xMove)-enemySpacing,(int)rectYco-enemySpacing,width+enemySpacing*2,height+enemySpacing*2);
if (rectXco+xMove<0 || rectXco+xMove>(areaWidth-width))
{
valid=false;
}
if(enemyNumber>0)
{
for (int x=0; x<=enemyNumber; x++)
{
if (x!=id)
{
//enemies and other collidable objects will be stored in collisionObjects[x] as rectangles.
if (enemyRectangleX.intersects(collisionObjects[x])==true)
{
valid=false;
}
}
}
}
return valid;
}

最佳答案

您或许可以使用 AffineTransform 类来旋转各种对象,前提是这些对象的类型是 Area。

假设你有两个对象a和b,你可以像这样旋转它们:

  AffineTransform af = new AffineTransform();
af.rotate(Math.PI/4, ax, ay);//rotate 45 degrees around ax, ay

AffineTransform bf = new AffineTransform();
bf.rotate(Math.PI/4, bx, by);//rotate 45 degrees around bx, by

ra = a.createTransformedArea(af);//ra is the rotated a, a is unchanged
rb = b.createTransformedArea(bf);//rb is the rotated b, b is unchanged

if(ra.intersects(rb)){
//true if intersected after rotation
}

并且您拥有原始对象,以防万一这就是您想要的。使用 AffineTransform 可以轻松组合变换、反转变换等。

关于旋转矩形的Java碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5920638/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com