Java 移动前的碰撞检测
Java Collision Detection Before You Move
我终于通过在 2 个矩形之间使用 intersects() 来进行碰撞检测,而且它似乎可以正常工作。然而,玩家只是卡在矩形中而无法移动。所以我现在试图在玩家移动之前检查碰撞。
这是我尝试过的:
if(up == true){
Rectangle futurerect = new Rectangle(px,py-=5,81,150);
if(!futurerect.intersects(wallexample)){
py-=5;
repaint();
}
}
if(down == true){
Rectangle futurerect = new Rectangle(px,py+=5,81,150);
if(!futurerect.intersects(wallexample)){
py+=5;
repaint();
}
}
if(left == true){
Rectangle futurerect = new Rectangle(px-=5,py,81,150);
if(!futurerect.intersects(wallexample)){
px-=5;
repaint();
}
}
if(right == true){
Rectangle futurerect = new Rectangle(px+=5,py,81,150);
if(!futurerect.intersects(wallexample)){
px+=5;
repaint();
}
}
我只是创建了一个新的矩形,但在玩家移动时它所在的位置,并检查它是否发生碰撞。如果是,请不要移动。
问题是,当玩家移动到矩形中时,它只会变慢。它仍然穿过墙壁,但由于某种原因移动速度较慢。
是什么导致了这个问题?
您似乎没有检查正确的区域,因为您对新 Rectangle 的实例化是递增/递减 py 或 px 并在 Rectangle 的构造函数中为其分配该值。
因此,如果您在笛卡尔坐标中的 0,0 处有一个玩家,并且您想知道他们是否向上移动,他们是否会撞墙。
if (up == true) {
Rectangle futurerect = new Rectangle(px,py-=5,81,150);
if(!futurerect.intersects(wallexample)){
py-=5;
repaint();
}
}
一旦您实例化矩形,py 现在设置为 -5。
Rectangle futurerect = new Rectangle(px,py-=5,81,150);
因为第二个参数中的py-=5。
当您执行相交检查时,它正在查看 0、-5。一旦说 "Yes, no wall here" 你将 py 递减 5。现在我们有一个玩家坐标 px,py 为 0,-10,你没有检查那个位置的墙。
尝试修复此处的逻辑,使其不会将新值分配给 px / py:
Rectangle futureRect = new Rectangle(px, py - 5, 81, 150);
我终于通过在 2 个矩形之间使用 intersects() 来进行碰撞检测,而且它似乎可以正常工作。然而,玩家只是卡在矩形中而无法移动。所以我现在试图在玩家移动之前检查碰撞。
这是我尝试过的:
if(up == true){
Rectangle futurerect = new Rectangle(px,py-=5,81,150);
if(!futurerect.intersects(wallexample)){
py-=5;
repaint();
}
}
if(down == true){
Rectangle futurerect = new Rectangle(px,py+=5,81,150);
if(!futurerect.intersects(wallexample)){
py+=5;
repaint();
}
}
if(left == true){
Rectangle futurerect = new Rectangle(px-=5,py,81,150);
if(!futurerect.intersects(wallexample)){
px-=5;
repaint();
}
}
if(right == true){
Rectangle futurerect = new Rectangle(px+=5,py,81,150);
if(!futurerect.intersects(wallexample)){
px+=5;
repaint();
}
}
我只是创建了一个新的矩形,但在玩家移动时它所在的位置,并检查它是否发生碰撞。如果是,请不要移动。
问题是,当玩家移动到矩形中时,它只会变慢。它仍然穿过墙壁,但由于某种原因移动速度较慢。
是什么导致了这个问题?
您似乎没有检查正确的区域,因为您对新 Rectangle 的实例化是递增/递减 py 或 px 并在 Rectangle 的构造函数中为其分配该值。
因此,如果您在笛卡尔坐标中的 0,0 处有一个玩家,并且您想知道他们是否向上移动,他们是否会撞墙。
if (up == true) {
Rectangle futurerect = new Rectangle(px,py-=5,81,150);
if(!futurerect.intersects(wallexample)){
py-=5;
repaint();
}
}
一旦您实例化矩形,py 现在设置为 -5。
Rectangle futurerect = new Rectangle(px,py-=5,81,150);
因为第二个参数中的py-=5。
当您执行相交检查时,它正在查看 0、-5。一旦说 "Yes, no wall here" 你将 py 递减 5。现在我们有一个玩家坐标 px,py 为 0,-10,你没有检查那个位置的墙。
尝试修复此处的逻辑,使其不会将新值分配给 px / py:
Rectangle futureRect = new Rectangle(px, py - 5, 81, 150);