gpt4 book ai didi

actionscript-3 - AS3 : Run methods in an ordered sequence

转载 作者:行者123 更新时间:2023-12-04 23:31:50 25 4
gpt4 key购买 nike

我有一个包含多种方法的类,我必须按特定顺序运行。所以,我创建了一种链,其中每个人在最后一句话中调用下一个(有时是调用,有时是调度事件):

internal function a(evt:SwapEvent):void {   //started from custom event
...
b();
}

private function b():void {
...
bTimer = new Timer(bTime*1000,1);
bTimer.addEventListener(TimerEvent.TIMER, bEnd);
bTimer.start();
}

private function bEnd(evt:TimerEvent):void {
bTimer.removeEventListener(TimerEvent.TIMER, bEnd);
bTimer = null;
c();
}

private function c():void {
...
dispatchEvent(new CustomEvents(CustomEvents.NEXT_FRAME,1));
}
....
private function g():void {
// tell the second class the sequence finished
}

问题出在某个时刻,在到达最后一个方法之前,我需要再次运行一个子序列,比如说从函数 c() 到 e()。它以函数之间延迟增加的形式导致问题(我有 2 个计时器)

我想解决方案是这样的:
a();
b();
...
if (some condition) {
c();
...
e();
}
...
f();
g();

但是,据我所知,Flash Player 不会同步执行。即,它不会等到方法 a() 完成才执行 b()

关于干净和防弹实现的任何想法/建议?此应用程序将 24x7 无限循环运行

提前致谢,

最佳答案

正确阅读您的代码后,是的,您是对的。 b() 在到达该代码行时执行。

我可能很想创建一个方法队列来执行。执行一个,检查是否有时间在框架需要更新之前执行另一个,然后重复。您始终可以随时向队列中插入新命令,因此 b() 可以在队列中插入 endB() 下一个。

http://www.dpdk.nl/opensource/running-tasks-in-order-with-a-task-based-sequence-manager 处的两个音序器和 http://as3.casalib.org/docs/org_casalib_time_Sequence.html应该做你需要的。前者可能有点矫枉过正,因为看起来您需要为每个任务创建单独的类,这可能有点过多的开销。另一方面,条件任务看起来正是您所需要的。后者更简单,因为您可以指定要执行的方法。但是,似乎没有内置的方法来调节任务,但这可能就像创建一个有条件地添加任务的任务一样简单。

了解更多条件如何工作可能会有所帮助。

其他要点:

尾调用在 AS 中效率不高。将其视为每次调用方法时向堆栈添加更多内容。一旦该方法返回(即使您没有明确使用 return ),该方法就会被从堆栈中剔除,并且之前调用的方法将继续执行。所以尾调用越多,堆栈越大,需要清理的越多。

一旦您开始执行代码,播放器就会挂起,直到代码完全运行并且执行返回给播放器。在玩家杀死您的脚本之前,您有大约 15 秒的执行限制,因此在无休止地执行代码时您必须考虑到这一点。解决方案是执行一些代码,然后等到下一帧执行更多代码。

您不必重新创建您的计时器,您可以将它们作为实例变量创建一次,然后调用 start。计时器将执行返回给玩家(如果没有更多的方法调用)。

一个稍微简化的版本,但我相信你明白了。

附录:我认为您应该查看命令模式 ( http://en.wikipedia.org/wiki/Command_pattern )。您可以存储一组要执行的命令(同步或异步),当一个命令返回或调度完整事件时,您将执行下一个命令。我认为您可以创建命令模式的简单实现来完成您需要的操作,而无需我之前提到的音序器的所有开销,但是了解其他人是如何做到的总是好的。

关于actionscript-3 - AS3 : Run methods in an ordered sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com