MovieClip忽略时间轴代码AS3的原因

时间:2011-04-08 15:19:08

标签: flash actionscript-3 timeline

我有一个从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 个答案:

答案 0 :(得分:1)

根据您的描述,这听起来就像您在FlashIDE中运行带有编译错误的SWF一样 它将循环所有帧。
我确定你在正常的闪光按钮闪烁之前就已经看过了。

您是否曾尝试将违规的MovieClip单独放入一个新项目中,看看会发生什么?

答案 1 :(得分:0)

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

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

我发现的另一件事是,我已经经历了这么多次,如果你在第一帧上立刻有一个stop(),有时会制动。 Flash有时候不喜欢它,我无法解释这一点。它肯定适用于我的几乎所有项目。它可能是Flash版本问题。

答案 2 :(得分:0)

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

底线,不要试图从多个地方控制任何剪辑的播放头,因为这样做是为了邀请奇怪的,通常难以重现的控制冲突错误。

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

答案 3 :(得分:0)

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

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

enter image description here

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

enter image description here

所以现在flash提前知道你在设计视图中使用特定的基类创建了对象,并且知道你想从中继承对象。在上面的条件下,字节码命中虚拟机并且它变成“WOA,你需要在舞台上完全相同的10个副本吗?那么这将无法工作所以这里让我在这里为你创建一些通用对象其中的内容。“无论如何,我想我正在重复自己,所以希望这是有帮助的。只是一个理论。 :)