2014-05-04 276 views
1

我一直在使用這種碰撞響應,現在已經很長時間了。我想我會問你們一些指導。BabylonJS:碰撞檢測

http://jsbin.com/qoyuciti/1 編輯鏈接:http://jsbin.com/qoyuciti/1/edit?html(只知道,你不能使用jsbin編輯模式下的移動鍵(據我所知))

這JSBin顯示我有什麼的時刻。我可以四處走動,當我打開盒子時,我不會走低谷,我滑過盒子。有兩個問題:

  1. 向左滑動,一切順利,向右滑動開始「跳躍」;
  2. 有時在碰撞了20秒之後,球體會穿過箱子..我認爲這可能需要做一些事情,我正在經歷滑行時的「跳躍」。

我的方法的簡單說明

用戶開始步行,只要我相交其中i開始在球體(方向上的用戶的前方180度的錐形測試對於相交的框正在前往)。只要它找到一個空的地方,它就會把玩家放在那裏。

如果有人有更好的方法,請讓我知道。正如我解釋我的代碼似乎這可能會更有效率,但讓我知道:)

在此先感謝!

回答

2

我固定在我遇到的問題。這是誰需要它的代碼:)

var intersect = box.intersectsPoint(player.position); 
if (intersect) { 
    var x = prevX, 
     z = prevZ, 
     slideSpeed = speed * 0.7; 


    for (var angle = 0; angle > -90; angle -= 1) { 

     x = prevX - Math.sin((direction - angle) * Math.PI/180) * slideSpeed; 
     z = prevZ - Math.cos((direction - angle) * Math.PI/180) * slideSpeed; 

     var intersect = box.intersectsPoint(new BABYLON.Vector3(x, player.position.y, z), true); 
     if (!intersect) { 
      break; 
     } 

     x = prevX - Math.sin((direction + angle) * Math.PI/180) * slideSpeed; 
     z = prevZ - Math.cos((direction + angle) * Math.PI/180) * slideSpeed; 

     var intersect = box.intersectsPoint(new BABYLON.Vector3(x, player.position.y, z), true); 
     if (!intersect) { 
      break; 
     } 

    } 

    player.position.x = x; 
    player.position.z = z; 

} 
2

您也許可以使用內部碰撞系統,但創建一個假的freecamera並將您的球體添加爲相機的子項。然後你就可以使用鍵來移動攝像頭和自動babylonjs將計算碰撞你

否則,你也可以使用私有函數scene._getNewPosition使用碰撞引擎直接

+0

感謝您的回覆:)使用內部phsyics系統的問題是,它不支持我將在遊戲中使用的heightmaps。我一直試圖通過查看babylonjs的源代碼來使用scene._getNewPosition。你能給我一些關於如何使用它的指針嗎? –