使用矩形时的java冲突检测
所以我明白,目前我并没有以最好的方式编写代码;这是一种试运行。我想做的是使用矩形和intersects属性进行墙碰撞(如果我没有使用正确的术语,很抱歉)。到目前为止,我在屏幕上有两个矩形。1玩家控制游戏中与之相撞的另一方。当它们相撞时,玩家停止移动。问题是,如果玩家试图在已经发生碰撞的情况下移动到矩形中,那么玩家就不能在垂直于移动的任何方向上移动,即如果玩家按住向右箭头键移动到矩形中,那么他们就不能向上或向下移动。游戏的前提是,如果你的x或y坐标无效,那么你将被移回上次记录的有效坐标,但我无法分别检测有效的x和y坐标。以下是代码:
public void Collision()
{
if(x < 0)
x = 0;
if(x > 400 - width)
x = 400 - width;
if(y < 0)
y = 0;
if(y > 300 - height)
y = 300 - height;
rect1 = new Rectangle(x, y, 16, 16);
rect2 = new Rectangle(sx, sy, wid, hei);
if(!rect1.intersects(rect2))
{
validX = true;
validY = true;
}
else
{
validX = false;
validY = false;
}
if(validX)
{
lastValidX = x;
}
if(validY)
{
lastValidY = y;
}
if(!validX)
{
x = lastValidX;
}
if(!validY)
{
y = lastValidY;
}
}
Guy类中的Collision()方法就是我认为存在问题的地方。是的,我的代码现在很混乱,但这只是一个测试
谢谢,大卫
# 1 楼答案
您可以通过在这里执行额外的逻辑来实现您所描述的内容(即,当一个为假,另一个为真时检测案例):
然而,似乎你不应该让矩形一开始就处于“碰撞”状态。例如,可以将
Move
方法更改为