2016-12-05 44 views
0

我终于通过使用2个矩形之间的intersects()来实现碰撞检测,并且它似乎正在工作。然而,玩家只是卡在矩形中,无法移动。所以我现在试图在玩家移动之前检查碰撞。移动之前的Java碰撞检测

这是我曾尝试:

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(); 
     } 
    } 

我只是创建一个新的矩形,但在它是,如果玩家移动,并检查是否碰撞。如果有,请勿移动。

问题是,当玩家进入矩形时,它会减速。它仍然穿过墙壁,但由于某种原因以较慢的速度移动。

是什么导致了这个问题?

回答

1

看起来你并没有检查正确的区域,因为你的实例化一个新的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。一旦有人说“是的,这里没有墙”,你就可以减少另一个5.现在我们有一个玩家坐标px,py为0,-10,并且你没有在那个地方检查墙。

尝试此处固定逻辑,所以它不会将新值分配给PX/PY:

Rectangle futureRect = new Rectangle(px, py - 5, 81, 150); 
+0

啊,谢谢你,我现在看到我的错误。 – joey942