在一个函数中,我试图通过以下方式延迟代码的执行:
var thinkTimer = setInterval(Actions(opp), C.THINK_TIME);
其中Actions是一个简单的(经过测试的工作)函数,opp是一个小整数,而C.THINK_TIME是一个常数= 3000(3秒)。
但是使用setInterval我遇到了这个问题:函数Actions立即运行(不等待间隔),每3秒我在输出中收到此消息:
TypeError:错误#1009:Impossibile加入了一个unaproprietàoun metodo di un riferimento oggetto null。 在SetIntervalTimer / onTimer() 在flash.utils :: Timer / _timerDispatch() 在flash.utils :: Timer / tick()
这是什么意思?我不是要尝试使用引用对象null来接受属性或函数! : - /答案 0 :(得分:0)
不是每个人都说你的语言,但是从错误代码中,某些东西引用了一个空对象,其中一个对象为null,在这一行之前跟踪对象并查看哪一个为“null”。
答案 1 :(得分: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在一段时间内检查某个对象,请使用setInterval
的扩展语法像这样:
var thinkTimer:uint = setInterval(Actions, C.THINK_TIME, opp);
然后使用opp
语法检索函数中传递的arguments[0]
值,或者,如果在该函数中声明了参数,则照常使用其名称。请注意,使用此语法,如果您在其他位置更改变量的值,则传递给opp
的{{1}}值不会更改。要覆盖,您可以使用Actions
的包装函数,将其名称(或引用)作为参数传递给opp
,然后在setInterval
内接受该引用},调用函数并接收当前Actions
值。
希望这有帮助,如果您有任何疑问,请在下面发表评论。