我正在研究簡單的進化AI。我需要動態生成一個匿名函數。對於它,我具有條件和動作的列表:動態創建匿名函數?
var conditions = [
function() { return enemyNear(), },
function() { return mySpeed() > 5; },
function() { return 1 === 1; }];
var actions = [
function() { return alert('walk'); },
function() { return alert('jump'); }
function() { return alert('attack'); } ]
該代碼選擇每一個,以產生一個新的功能:
condition = conditions [Math.floor(Math.random()*conditions .length)];
actions = conditions [Math.floor(Math.random()*actions .length)];
只要所選擇的條件是enemyNear()
和所選擇的動作是walk()
,我怎樣才能生成簡單的匿名函數?
behavior = function() {
if(enemyNear()) {
walk();
}
}
我可以根據需要更改數組的保存方式。如何才能做到這一點?
所有字符behaviors
被稱爲像這樣的循環中:
for(i=0,i<chars.length,i++) {
chars[i].behavior.call();
}
問題是,當您將它們放入數組中時,您已經調用了函數。 'walk'是對函數的引用,而'walk()'調用函數並使用返回值。 – kapa
我想像過這些函數沒有正確保存在數組中,我可以根據需要更改它們的保存方式。 – lisovaccaro