当您使用闪存从头开始构建闪存片时,它主要是AS3并且您正在使用所有外部.as类文件,您如何构建软件?你使用什么类型的全局变量结构?你的顶级课程总是看起来一样吗?您使用什么代码行来编写将主要子显示对象附加到根MovieClip?
答案 0 :(得分:2)
在OOP Flash中基本上有两种处理架构问题的方法。任何认真的开发人员都应该习惯的标准模型使用自定义事件。在上面的例子中,你的windowKnob然后不知道窗口 - 它只知道它是否被按下。按下时,它会调度“knobPressed”事件。 Car对象捕获该事件,然后告诉WindowManager打开关联的窗口。
首先使用事件有点棘手,因为如何使用它们发送数据有效负载并不明显。也许您的旋钮可以向上或向下按,但只发送一个事件。那么,汽车如何知道您是要打开还是关闭窗户?因为您将Event类扩展为创建的WindowKnobEvent,并且在WindowKnobEvent上展示了一个名为“direction”的公共属性,可以将其设置为up或down。当该事件触发并传递给您的WindowManager时,可能您在那里设置了一个switch语句,根据“direction”属性的不同行为 - 这有意义吗?
因此,95%的时间您希望使用事件模型在整个应用程序中传播数据。
但有时候,使用回调可能是合适的。换句话说,您将传递WindowKnob对象对WindowManager中OpenWindow函数的引用。由于函数是所有对象,你只需要说var openWindowFunction:Function = WindowManager.openWindow,然后将openWindowFunction传递给你的旋钮类。
这通常是一个糟糕的想法:这意味着你的代码是紧密耦合的。这意味着你不能把它旋转到一辆不同的车里 - 你会打破它,因为它不再能够保持对第一辆车的WindowManager的引用。但是,在某些情况下,回调可能更有效。例如,在移动设备优化中,通常最好最小化正在创建的对象的数量。您发送的每个事件都使用内存。建立一次回调引用然后让它在没有每次有人按下旋钮的情况下创建一个新的Event对象时运行会更有效率。
这有帮助吗?我的意思是,AS3 OOP架构很难在一个SO响应中轻松总结出来 - 但我想这就是:了解事件是如何运作的,一切都将落实到位。除非您了解其含义,否则不要使用回调。
欢呼,我希望有所帮助! MYK
答案 1 :(得分:1)
编程AS3在大多数方面应该类似于使用C#,Java或其他OO语言进行编程。
顶级课程保持非常相似,并以Adobe Practices为模型。它看起来像这样:
package
{
import flash.display.Sprite;
public class FirstCircle extends Sprite
{
public function FirstCircle( )
{
}
}
}
通过在Flash中的主要属性中输入类的名称,可以在IDE中完成将代码附加到根MovieClip。
不要使用全局变量,使用像在C#或Java中那样的属性:
private var _prop:String;
public function get prop():String {
return _prop;
}
希望这有帮助。