2013-03-17 135 views
0

我目前使用的收集檢測方法可以解釋碰撞,但會根據方向產生奇怪的效果。它會:Slick2D碰撞檢測 - 奇怪的運動

  • 如果玩家擊中對象的右側,總是可以工作。
  • 如果玩家擊中物體的頂部或底部,將玩家推到一邊。
  • 如果玩家第一次擊中物體的左側,但會在下一次在左側檢測到碰撞時將玩家傳送到物體的另一側。

這是當前碰撞檢測代碼:

if(player.playerBounds.intersects(portal.bounds)&&player.isMovingLeft){ 
     player.playerX=(portal.x+portal.width); 
     player.playerX++; 
    } 
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingRight){ 
     player.playerX=(portal.x-player.width); 
     player.playerX--; 
    } 
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingUp){ 
     player.playerY=(portal.y+portal.height); 
     player.playerY--; 
    } 
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingDown){ 
     player.playerY=(portal.y+player.height); 
     player.playerY++; 
    } 

回答

0

你可以試試下面的代碼,看看它是否工作?

bool collide = player.playerBounds.intersects(portal.bounds); 

if(collide && player.isMovingLeft){ 
    player.playerX = (portal.x + portal.width) + 1; 
} 
else if(collide && player.isMovingRight){ 
    player.playerX = (portal.x - player.width) - 1; 
} 
else if(collide && player.isMovingUp){ 
    player.playerY = (portal.y + portal.height) + 1; 
} 
else if(collide && player.isMovingDown){ 
    player.playerY = (portal.y + player.height) - 1; 
} 

可能的原因是:

  • 檢查碰撞多次。
  • 移動球員正在改變運動方向。
  • 其他一些代碼與此代碼衝突。
  • isMovingX無法正常工作。
+0

它運行,但它最終具有與原始代碼相同的效果。 – oracleCreeper 2013-03-19 00:40:47

0

在這裏回答我自己的問題。進入方向的標誌永遠不會從真實變爲標準,這是問題的根源。一個方向是正常的,因爲它與我通常會移動的第一個方向對齊。