当您使用闪存从头开始构建闪存片段时,它主要是 AS3,并且您使用所有外部 .as 类文件,您如何构建您的软件?您使用什么类型的全局变量结构?你的顶级类(class)看起来总是一样吗?您使用哪行代码来编程将主要子显示对象附加到根 MovieClip?
最佳答案
在 OOP Flash 中处理架构问题基本上有两种方法。任何严肃的开发人员都应该熟悉使用自定义事件的标准模型。在上面的示例中,您的 windowKnob 不知道窗口 - 它只知道它是否已被按下。当按下时,它会调度“knobPressed”事件。 Car 对象捕获该事件,然后告诉 WindowManager 打开关联的窗口。
事件一开始使用起来有点棘手,因为如何使用它们发送数据负载并不明显。也许您的旋钮可以向上或向下按下,但只能发送一个事件。那么,汽车如何知道你要打开还是关闭车窗呢?因为您将 Event 类扩展为创建的 WindowKnobEvent,并且在 WindowKnobEvent 上您公开了一个名为“direction”的公共(public)属性,该属性可以设置为向上或向下。当该事件触发并传递到您的 WindowManager 时,也许您在那里设置了一个 switch 语句,以根据“方向”属性表现不同 - 这有意义吗?
因此,95% 的情况下您会希望使用事件模型在整个应用程序中传播数据。
但有时,使用回调可能是合适的。换句话说,您将向 WindowKnob 对象传递对 WindowManager 中 OpenWindow 函数的引用。由于函数都是对象,因此您只需说 var openWindowFunction:Function = WindowManager.openWindow,然后将 openWindowFunction 传递给您的旋钮类。
这通常是一个坏主意:这意味着您的代码是紧密耦合的。这意味着您不能将那个旋钮放入另一辆车中 - 您会破坏它,因为它将不再能够保存对第一辆车的 WindowManager 的引用。但是,在某些情况下,回调可能会更有效。例如,在移动设备优化中,通常最好尽量减少创建的对象数量。您调度的每个事件都使用内存。建立一次回调引用然后让它运行,而不是每次有人按下旋钮时都创建一个新的事件对象,这样会更有效。
这有帮助吗?我的意思是,AS3 OOP 架构很难用单个 SO 响应来轻松概括 - 但我想要点是:了解事件如何工作,一切都会就位。除非您了解其含义,否则请勿使用回调。
干杯,希望有帮助! MYK
关于Flash CS AS3 OOP 软件架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344850/