gpt4 book ai didi

java - 使用矩形时的碰撞检测

转载 作者:行者123 更新时间:2023-12-01 14:14:34 24 4
gpt4 key购买 nike

所以我知道我目前并没有以最好的方式进行编码;这是一种测试运行。我想做的是使用矩形和 intersects 属性进行墙壁碰撞(抱歉,如果我没有使用正确的术语)。到目前为止,我在屏幕上有 2 个矩形。 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() 方法是我遇到麻烦的地方。是的,我的代码现在非常困惑,但这只是一个测试。

谢谢大卫。

最佳答案

您可以通过在此处执行额外的逻辑来实现您所描述的内容(即检测一个为假而另一个为真的情况):

if(!rect1.intersects(rect2))
{
validX = true;
validY = true;
}
else
{
validX = false;
validY = false;
}

但是,似乎您一开始就不应该让矩形处于“碰撞”状态。例如,您可以更改 Move 方法来执行类似的操作

public void Move()
{
int oldX = x, oldY = y;
x += dx;
y += dy;
if (Collision()) {
x = oldX;
y = oldY;
}
}

关于java - 使用矩形时的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231685/

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