AS3我的代码延迟无法正常工作

时间:2014-01-11 01:13:37

标签: actionscript-3 setinterval

在一个函数中,我试图通过以下方式延迟代码的执行:

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来接受属性或函数! : - /

2 个答案:

答案 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值。

希望这有帮助,如果您有任何疑问,请在下面发表评论。