2014-01-11 34 views
0

工作在函數我試圖通過拖延代碼的執行:AS3我的代碼遲遲不正常

var thinkTimer = setInterval(Actions(opp), C.THINK_TIME); 

,其中操作是一個簡單的(測試工作)功能,OPP是一個小整數和C.THINK_TIME是一個常數= 3000(3秒)。

但使用的setInterval我得到這個問題:該功能操作立刻運行(不等待的時間間隔),並每3秒我在輸出這樣的信息:

類型錯誤:錯誤#1009:Impossibile accedere一個UNAproprietà o un metodo di un riferimento oggetto null。 在SetIntervalTimer /計時器觸發() 在flash.utils ::定時器/ _timerDispatch() 在flash.utils ::定時器/蜱()

這是怎麼回事?我不想試圖用引用對象null來加入屬性或函數! : -/

回答

0

你必須換你Actions(opp)呼叫到嵌套功能,並提供的那名到您的setInterval調用,就像這樣:

private var opp:int; // place this outside if you ever want to change opp at runtime 
// without changing the setInterval statement 
function actOpp():void { Actions(opp); } // wrapper 
var thinkTimer:uint = setInterval(actOpp, C.THINK_TIME); 

實際的錯誤是setInterval想要一個Function對象,你正試圖爲它提供一個功能輸出Actions(opp)。最有可能你的Actions函數返回void,這會導致你的錯誤出現。

如果你不想改變你的opp在運行時,說你希望你的AI在設定的時間段檢查一次一定OPP,使用setInterval這樣的擴展語法:

var thinkTimer:uint = setInterval(Actions, C.THINK_TIME, opp); 

然後你在你的函數中使用arguments[0]語法檢索傳遞opp值,或者,如果你宣佈在函數中的參數,使用它的名稱像往常一樣。請注意,這個語法,如果你改變別處變量的值傳遞給Actionsopp值不會改變。要覆蓋,可以使用包裝函數opp,將的名稱(或引用)作爲參數傳遞給setInterval,然後接受Actions中的引用,調用該函數並接收當前的opp值。

希望這會有所幫助,如果您有任何疑問,請評論如下。

+0

它完美的作品,謝謝你的Vesper! – user3161756

0

不是每個人都說你的語言,但是從錯誤代碼,事情是引用空對象,該對象爲null,跟蹤物體這一行之前,看看哪一個是「空」。