Flash CS AS3 OOP 软件架构

标签 flash actionscript-3 oop architecture

当您使用闪存从头开始构建闪存片段时,它主要是 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/

相关文章:

python - 如何定义当用户在 TextInput 中输入文本并在 Kivy 中按 Enter 时会发生什么?

apache-flex - 使用鼠标滚轮的 Flex 列表滚动速度

actionscript-3 - 如何将 FlashVars 传递给 Loader.loadBytes 加载的 swf?

c# - 在 C# WebBrowser 控件中触发 JavaScript

html - 避免滚轮劫持嵌入式 youtube/flash 视频

java - 比较两个音频文件。声音匹配

java - 在工厂类中使用字段/变量,以便在通过工厂创建的对象之间使用

ios - 子类中 self 和 super 之间的混淆

flash - red5 vs wowza vs FMS

java - 使用flash.net.Socket类从java读取自定义对象时是否需要使用AMF库?