如何使用类最好地管理多帧MovieClip?

时间:2010-05-09 16:21:59

标签: flash actionscript-3

在切换到AS3之后,我一直在寻找管理MovieClip的最佳方法,这些MovieClip的UI元素分布在多个帧中,只有一个类。我现在正在处理的一个例子是一个简单的电子邮件表单。我有一个有两个框架的MovieClip:

  • 第一帧具有表单元素(文本输入,提交按钮)
  • 第二帧有一条“谢谢”消息和一个返回第一帧的按钮(发送另一封电子邮件)

在库中,我已将MovieClip链接到自定义类(Emailer)。我当前的问题是如何在第二帧的按钮上分配MouseEvent.CLICK事件?我现在应该注意,我正在努力避免在时间轴上放置代码(stop()调用除外)。这就是我现在“解决”问题的方法:

  • Emailer为帧更改(addEventListener("frame 2", onFrameChange)
  • 注册一个事件侦听器
  • 在MovieClip的第二帧,我正在调用dispatchEvent(new Event("frame 2"));(我希望框架上没有此代码,但我不知道还能做什么)

我对这种方法的两个抱怨是,首先我调用addEventListener分散不同的类方法(我宁愿在一个方法中注册所有UI事件监听器),其次我必须发送那些自定义的“onFrameChange”事件。对于只有2帧以上的MovieClip,第二个投诉呈指数级增长。

我所谓的解决方案感觉让我感到肮脏,让我的大脑受伤。我正在寻找有关以不同方式做什么的任何建议。也许我应该看一下设计模式?即使我的应用程序的其余部分是用类文件编写的(并且我厌恶Flash IDE代码编辑器),我是否应该吞下自己的骄傲并编写时间轴代码?

我非常喜欢这个事件系统,并且没有使用它编写应用程序的问题,但我觉得在使用mutl-frame动画片段和代码时,我不得不考虑AS2。任何和所有的帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

不幸的是,我认为你最好的举动就是放弃你的多帧编码风格。在不同的帧上拥有这样的东西只会导致你的问题,就像你说的那样,指数增加你拥有的帧数。

避免时间线的快速而肮脏的解决方案可能是将每个帧的内容都放在特定的MovieClip中,然后将所有这些MovieClip放在父MC的第一帧上。然后,当您想要在各部分之间切换时,您可以将其中一个MovieClip设置为透明,另一个设置为可见。因此,对于您的Emailer示例,一旦用户发送了电子邮件,您就将表单设置为不可见,并使用后退按钮显示感谢屏幕。

通过这种方式,您可以在调用类的构造函数时将按钮的事件监听器设置为其他框架内的按钮,而不用担心您设置的所有事件以检测框架更改。就像我说的,这可能是一个肮脏的解决方案,它实际上取决于你想要做什么。

希望我没有误解你的问题,这可能会有所帮助:)

得不

答案 1 :(得分:1)

您可以使用应用程序的每个部分的元素创建MovieClip,就像debu建议的那样,并为每个部分创建一个Class,这样您就可以随时addChild / removeChild(只要在主类中声明这些类的对象) )

我正在使用这种方式,并且我感觉不到任何脏,并且如您所知,第一帧将仅包含您想要的那些,因此您实例化其他部分并听取{{1要生成的构造函数方法的事件。