0

我有一个从 MovieClip 扩展的自定义类。该类基本上是创建一个按钮,该按钮使用 MovieClip 中的帧标签在分派鼠标事件时在按钮状态之间移动。每个状态(每个大约 20 帧长)都以时间线终止stop()

这个类已经在许多其他项目中使用过,但是在我当前的应用程序中的某个点之后,作为我的按钮类的扩展创建的任何按钮都停止执行时间轴上的代码,而只是循环播放。这包括放入时间线的任何跟踪,但类中的所有代码仍然正确执行,即使是按钮状态更改时的 gotoAndPlay 调用。

最奇怪的部分是舞台上任何行为不端的按钮实例都不会引发错误。

我需要的是关于什么可以阻止扩展某个类的任何对象执行时间线代码而不引发错误的建议。

谢谢!

更新:这仍然让我难过。我们的项目通常分为三个部分:轻量级预加载器、语言和年龄门,然后是主应用程序。每一个都被加载到前一个,每次都使用当前的应用程序域。加载主应用程序后,任何扩展 MovieClip(直接或间接)的自定义显示对象都将直接忽略其时间线上的任何动作脚本。然而,播放头仍然可以通过类来控制。

更新 2: 这是我制作的测试按钮类中的代码。注意里面什么都没有。

package com.test
{
    import flash.display.MovieClip;

    public class TestLabelButton extends MovieClip
    {
        public function TestLabelButton():void
        {

        }
    }
}

更新3: 所以我缩小了范围,但这很奇怪。看来我可以很好地将我的语言门加载到预加载器中,语言门是一个带有扩展 MovieClip 的自定义文档类的 swf。但在那之后,如果我加载更多包含扩展 MovieClip 的自定义 doc 类的 SWF,就像所有随后实例化的 MovieClip 的扩展都会丢失其时间轴上的所有代码。

4

4 回答 4

1

根据您的描述,当您在 FlashIDE 中运行 SWF 并出现编译错误时,这听起来像是。
它只会循环所有帧。
我相信您在普通闪光灯按钮闪烁之前已经看到它。

您是否尝试过将有问题的 MovieClip 单独放入一个新项目中,然后看看会发生什么?

于 2011-04-14T20:41:06.693 回答
0

我不确定我是否完全理解您的问题,但这听起来对我过去遇到的问题非常熟悉。我做同样的事情。我从不使用 Button 符号,总是选择使用 MovieClip,因为它们更灵活,并且可以立即显示所有按钮状态动画,我找到了一种更直观的工作方式。

无论如何,请确保您通过框架标签/名称调用的任何框架在该框架上都没有stop()。我曾多次犯过这个错误,在翻转动画开始时我有一个 fRollOver 帧标签,而当你 时gotoAndPlay("fRollOver"),它什么也不做。

我发现的另一件事是,而且我已经经历过无数次了,如果你stop()在第一帧立即有一个,有时事情会刹车。Flash有时只是不喜欢它,我无法解释这一点。它当然适用于我几乎所有的项目。可能是 Flash 版本问题。

于 2011-04-12T15:09:54.483 回答
0

我的建议是设计您的影片剪辑按钮,使状态所需的任何动画都发生在它们自己的剪辑中,并具有自己的循环时间线。换句话说,您的按钮的每个“状态”在您的按钮剪辑事物的时间线上都有一帧——在您的主时间线上没有普通的播放或循环。所有播放头控件都在您的外部类中,并且仅包含 * gotoAndStop *s 来控制主时间轴,可能还有 stop() 和 play() 命令来启动和停止每个按钮状态帧上动画剪辑的时间轴。

最重要的是,不要试图从多个位置控制任何剪辑的播放头,因为这样做会招致奇怪的、通常难以重现的控制冲突错误。

此外,帧脚本中的错误会阻止 Flash Player 在该剪辑上执行帧脚本。您是否收到编译时错误或警告?

于 2011-04-12T15:26:37.483 回答
0

我相信 The_asMan 是在正确的轨道上。我相信您要么遇到了导致此问题的运行时错误,要么您已经设法使用 Flash IDE 构建对象继承,从而基本上对 MovieClip 类进行了“原型化”。如果你曾经是 AS2 或 AS1 的人,你就会明白我的意思。由于您的类基本上是空的,我倾向于选项 2。我相信您已经以​​某种方式覆盖了 MovieClip 类或使用 Flash UI 对其进行原型设计。

或者

您错误地构建了对象,并在设计时在舞台上放置了多个实例。像这样:

在此处输入图像描述

问题当然是,您没有将这个库对象作为您的自定义类的 CLASS OF TYPE,而是使用唯一标识符,而是简单地将这个影片剪辑的内容链接到单个类。在这种情况下,使用设计 UI 在舞台上创建多个实例在技术上会产生错误,因此在运行时 flash 可能会通过将这些对象声明为它们自己的动态生成的类来自动补偿此错误,这会破坏您在一种异常的方式。执行此操作的正确方法是将您的导出操作保留为操作脚本配置并在代码中创建此类的实例,或者将对象的基类设置为您的自定义类并给它一个唯一标识符(如果您想设计视图中的布局,示例如下)。

在此处输入图像描述

因此,现在 flash 提前知道您已经在设计视图中创建了具有特定基类的对象,并且知道您想要从它继承。在上述情况下,字节码会命中虚拟机,然后它会显示“WOA,您需要 10 个完全相同的类在舞台上的副本?那行不通,所以让我在这里为您创建一些具有这些视觉效果的通用对象其中的内容。” 无论如何,我想我在重复自己,所以希望这会有所帮助。只是一个理论。:)

于 2011-04-15T13:08:23.027 回答