0

我有一个带有五个按钮的菜单。菜单始终可见。每个菜单项都有点击事件。从左到右滑动相应的影片剪辑。每个影片剪辑都有不同的自然事件和各自的动画和活动。例如选项卡 1 带来视频页面。在该电影剪辑中,我有视频事件,例如播放暂停音量和完成等事件和代码。选项卡 2 具有时间按钮组和另一个按钮组功能。根据用户选择代码将计算并在动画计数器上显示值。选项卡 3 具有 Time 按钮组和 Source 按钮组。根据用户选择,它将计算值并将其显示为动画图。等等。

现在我有所有单独的选项卡影片剪辑都有自己的时间线代码用于自己的事件。以及一些交叉变量和与其他选项卡的引用。一切都按预期工作。没问题。我知道时间线代码不是完成任何复杂项目的最佳方式。

因此,如果这是正确的方法,我希望将整个编码作为一个类或多个类。就课堂逻辑而言,我是初学者。我已经将 Main 创建为文档类,并且可以控制选项卡的一般导航及其初始外观。但卡在特定选项卡的特定按钮事件和其他此类独特事件中。

任何帮助是极大的赞赏。提前致谢。任何类似的例子或建议。

首先,非常感谢您的及时回复。看来我什至不是初学者。我需要大量阅读并可能彻底掌握所有基本概念。我已经浏览了您评论中建议的两个链接。我试着慢慢消化这些东西。我没有任何关于 OOP 或任何类型编程的正式非正式教育。老实说,我很难理解您建议的代码。不是因为你的代码,而是因为我的水平。我将不得不花一些时间让自己更清楚地了解事件和序列等。不同的选项卡内容作为主时间线的电影剪辑并且已经放在舞台上。它来来去去其相应的选项卡按钮单击事件。我没有将您的答案标记为是,因为根据您的建议,我仍然需要自己做作业。再次非常感谢。

4

1 回答 1

0

这就是我的设计方式:

我有一个菜单类,它只包含按钮并将它们的点击“转换”为更具体的事件。这可能看起来像这样:

公共类菜单扩展 Sprite {
     受保护的 var 按钮:矢量。= 新向量.();
     公共功能菜单(){
         极好的();
         var loops:int = numChildren;
         for (var i:int=0; i<loops; i++) {
            var button:SimpleButton = getChildAt(i) as SimpleButton;
            如果(按钮){
                按钮[buttons.length] = 按钮;
                button.addEventListener(MouseEvent.CLICK, broadcastMenuEvent);
            }
         }
     }
     公共功能广播菜单事件(e:事件):无效{
         var button:DisplayObject = e.currentTarget as DisplayObject;
         dispatchEvent(new Event(button.name, true));//冒泡,可以在任何级别捕获
     }
}

这种构建方式,您可以通过更改您在舞台上为按钮实例提供的名称来更改正在调度的事件。请注意,如果您未选中“自动声明实例”,则需要将 Menu 作为基类而不是 Class 才能工作,因为这样做允许编译器以您的基类的方式为您生成这些实例名称不必知道。

此时,您可以在另一个地方处理这些事件——无论是您的主文档类还是您有单独的控制器。

我也会将您描述的每个视图定义为一个单独的类。如果您有物体在舞台上来来去去,您可以使用此处描述的一种技术来处理它。否则,从基类而不是时间线代码处理时间线实例相当简单。同样,您可以在主文档类或专用控制器中侦听这些事件——重点是确保您的视图没有做出任何重要的决定,并且通常它们不应该编辑数据。

您可以选择让您的主文档编排如何添加和删除选项卡(我非常喜欢将时间线与 goToAndStop 一起使用,但不是每个人都共享此偏好),或者,您可以再次将此逻辑分离为专用控制器。我建议,如果可以概括您的 Views 如何让它们实现单个Interface。这样,您可以给它们一个实例名称并使用相同的 getter/setter 对来管理它们(假设您走的是时间线路线)。

请注意,Flash 编译器在这方面并不是非常复杂,因此如果您这样做并且您的视图扩展了不同的父类,您将收到编译器警告。忽略这些——它们没有任何意义。

您应该尝试完全根除代码的是视图相互引用的部分。唯一可以让一个 View 了解另一个 View 的情况是它的父母知道它的孩子。即便如此,尽量少掌握具体知识。请注意,在我作为示例编写的菜单视图中,父级只知道可能有一些 SimpleButtons,但它不知道它们在舞台上的位置,具体是什么,甚至是实例名称是什么。

与其让您的视图相互了解,不如让第三方(同样,您可以选择使用或不使用主文档类)将状态更改请求(以事件的形式)从一个转移到另一个。

于 2013-04-07T18:10:39.790 回答