2010-05-09 61 views
0

切换到AS3之后,我一直在摸索出管理影片剪辑的最佳方法,这些影片剪辑的UI元素分布在多个框架中,只有一个类。我正在处理的一个示例是一个简单的电子邮件表单。我有两个帧的电影剪辑:如何最好地管理带有类的多帧影片剪辑?

  • 第一帧的形式元素(文本输入,提交按钮)
  • 第二架有“谢谢”的字样和一个按钮返回到第一框架(发送另一封电子邮件)

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

  • Emailer注册了一个框架变化(addEventListener("frame 2", onFrameChange)
  • 在影片剪辑的第二帧我打电话dispatchEvent(new Event("frame 2"));事件侦听器(我宁愿不有框架的代码,但我不知道自己还能做些什么)

我的两个投诉该方法是,首先我要addEventListener在不同类的方法传播出去(我宁愿有电话所有UI事件监听器都在一个方法中注册),其次我必须调度h那些自定义的“onFrameChange”事件。对于超过2帧的影片剪辑,第二宗投诉呈指数增长。

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

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

回答

2

我觉得不幸的是,你最好的做法是抛弃你的多帧编码风格。就像你说的那样,在不同的框架上有这样的东西只会导致你的问题,指数地增加你拥有的更多框架。

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

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

希望我没有误解你的问题,并认为这可能是一些帮助:)

得不

+0

你根本没有误解:)我已经完成了你的快速和肮脏的解决方案之前,当它工作,我不喜欢在第一帧(第一帧我担心资源hogging/slow down)。如果我排除了多帧编码风格,你会推荐采取什么样的方式? MC的每一帧会变成一帧MC上的相应类吗? – 2010-05-09 16:50:56

+0

是的,这将是我的另一个建议,但我不确定如何最好地建议您以可管理的方式工作该解决方案。取决于有多少不同的帧有不同的信息,它可能会失去控制。但根据您显示的信息,您可能会将许多帧浓缩为仅有的一个基本类,其中包含可根据要显示的内容调整大小和重新定位的动态文本框。使用多个框架的更复杂的示例是什么? – debu 2010-05-09 21:18:42

+0

我同意。使用多个框架对动画很有用,但对定义UI和应用程序流程很不利。只要让两种不同的形式成为不同的动画片段,并根据需要创建/销毁(或隐藏/取消隐藏)即可。 – davr 2010-05-11 01:32:26

1

您可以创建应用程序的每个部分就像得不建议的影片剪辑元件,并为每个人创建一个类,这样你就可以随时随地添加Child/ removeChild(只要你在主类中为这些类声明对象)

我正在使用这种方式,而且我不觉得有什么脏东西,如你所知,第一帧将只包含你想要在那里的东西,所以你实例化其他部分和列表en到构造函数方法中的ADDED_TO_STAGE事件。