2016-12-05 91 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