2013-05-29 62 views
0

我試圖將這個令人敬畏的尋路功能從http://granularreverb.com/a_star.php轉換爲javascript。將php轉換爲javascript#1

PHP函數

function path_float(&$heap, &$values, $i, $index) { 
     for (; $i; $i = $j) { 
      $j = ($i + $i%2)/2 - 1; 
      if ($values[$heap[$j]] < $values[$index]) 
       break; 
      $heap[$i] = $heap[$j]; 
     } 
     $heap[$i] = $index; 
} 

JavaScript函數

var $path_f; 
var $path_h; 
var $path_g; 
var $path_open_heap; 


function path_float($path_open_heap, $path_f, i, index) { // return heap & values 

    var j; 

    for (; i; i = j) { 

     j = (parseInt(i) + parseInt(i)%2)/2 - 1; 

      if($path_f[$path_open_heap[j]] < $path_f[index]){ 
      break; 
     } 

     $path_open_heap[i] = $path_open_heap[j]; 

    } 
    $path_open_heap[i] = index; 

} 

我不知道如果JavaScript能夠理解爲()沒有所有的元素?如果我嘗試執行JavaScript功能,我的瀏覽器會凍結。

P.s.我對預先寫好的js pathdindings不感興趣,因爲我需要完全相同的php和js函數。

在此先感謝

+0

它會建議你有一個無限循環回事。你有沒有試過調試過?添加一些'console.debug()'行來查看哪些值是?如果瀏覽器不喜歡你的語法,那麼它會給你一個解析錯誤。 –

+0

我沒有得到js錯誤,我想它是關於無限循環的。 – fshock

回答

0

您可以使用for沒有所有的JavaScript類似於PHP的元素。所以這不是問題。

我認爲問題是返回到J的浮點數。它可能是它永遠不會是0,但可能是一些大的浮點數,如0.00000000001或某事,因此從不計算爲假。不幸的是我不能測試它,因爲你沒有提供任何輸入值。

嘗試以下操作:

var $path_f; 
var $path_h; 
var $path_g; 
var $path_open_heap; 


function path_float($path_open_heap, $path_f, i, index) { // return heap & values 

    var j; 

    for (; i; i = parseInt(j)) { 

     j = (parseInt(i) + parseInt(i)%2)/2 - 1; 

      if($path_f[$path_open_heap[j]] < $path_f[index]){ 
      break; 
     } 

     $path_open_heap[i] = $path_open_heap[j]; 

    } 
    $path_open_heap[i] = index; 

} 
+0

感謝您的建議,我會盡快嘗試:] – fshock