【发布时间】:2017-06-12 18:21:25
【问题描述】:
我的代码有一个大问题
我有一个名为“delayCallFuntions”的函数:
function delayCallFuntions(delay: int, func: Function) {
var timer: Timer = new Timer(delay, 1);
timer.addEventListener(TimerEvent.TIMER, func);
timer.start();
}
我使用下面的这个函数在我的屏幕上的 2 点之间建立连接:
delayCallFuntions(1, function (e: Event) {timer011(wireColor);});
函数“timer011”正在建立连接:
function timer011(firstColor: int): void {
wireColor = firstColor;
//GRID is a class
//Path A to B
var PathAB: Grid;
PathAB = new Grid(4, 5, 20, 17, canvas, wireColor);
this.addChild(PathAB);
}
我的问题是: 我有几个这样的功能,比如“timer012”,“timer013”,......他们需要一个接一个地执行。 当我走出这个场景再回来的时候,这些仍然是其中一些功能在起作用,而我需要它们从头开始,一个一个地去。
例如:当我回来时,“timer011”正在启动,而“timer016”也在同时完成。
希望有人可以帮助我,因为这个问题让我很沮丧。
【问题讨论】:
-
您能否更好地解释一下您的程序要完成的工作。听起来您只想在延迟链中排队一些功能?所以一个执行,然后 1 秒后下一个执行等等。如果用户移出场景/帧,您希望能够停止该链吗?
-
@BadFeelingAboutThis 函数“timer011”、“timer012”等是为了在我的网格中的不同单元格之间建立不同的连接。它们需要基于计时器执行。例如:timer011 在 100ms 后执行,timer012 在 3000ms 后执行,直到结束。当用户想去另一个场景时,我希望它们停止。
-
您需要保存对初始 Timer 对象的引用,并在不再需要时停止并销毁它。另外,我通常创建一个字段 destroyed:Boolean 并使用 if (destroyed) return; 启动方法,所以当我不再需要某些内容并且无法确保其立即处理(如延迟调用、侦听器等),然后我设置 destroyed = true; 以防止这些方法在错误的时间执行。
-
@Organis 你能举个实际的例子吗?我曾尝试为其设置标志,但没有成功!
标签: actionscript-3 flash