0

我正在尝试将这个很棒的寻路 php 函数从http://granularreverb.com/a_star.php转换为 javascript。

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是否理解 for() 没有所有元素?如果我尝试执行 javascript 函数,我的浏览器会冻结。

Ps 我对预先编写的 js pathdindings 不感兴趣,因为我需要相同的 php 和 js 函数。

提前致谢

4

1 回答 1

0

您可以for在没有类似于 PHP 的 javascript 中的所有元素的情况下使用。所以这不是问题。

我认为问题在于返回给 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;

}
于 2013-05-29T10:39:48.747 回答