actionscript-3 - Actionscript 3.0 影片剪辑对 EXIT_FRAME 的修改

标签 actionscript-3 flash events actionscript movieclip

我在使用 Flash AS3 时遇到了这个令人困惑的问题,我已经尝试解决这个问题很长时间了。我有一个想法,也许这是 Flash 播放器的一个错误,但也许你可以提供一些见解。

我在 Flash 中有一个 MovieClip,它是 10 帧的星形、另外 10 帧的圆形、另外 10 帧的方形,之后它将 gotoAndPlay(1) 重播动画。此 MovieClip 扩展了一个我称为 FlipClip 的 AS3 类。

FlipClip 中有一个名为 reverseClip 的函数。此函数的目的是在每次 Flash 启动 EXIT_FRAME 事件时围绕轴翻转某些图形子项。

public function FlipClip()
    {
        //as soon as this is instantiated, add the eventListener
        addEventListener(Event.EXIT_FRAME,flipTheClip);
    }

    public function flipTheClip(e:Event)
    {

        trace("currentFrame = " + currentFrame);

        //for sake of simplicity, we will flip every child
        for (var i=0; i<numChildren; i++)
        {

            var targetClip = getChildAt(i);
            var axis = 10;

            //if the target child has not already been flipped...
            if (Math.abs(targetClip.scaleX) / targetClip.scaleX != -1)
            {

                //reverse the child's direction with scaleX and move based on the axis
                targetClip.scaleX *=  -1;
                var dist:Number = targetClip.x - axis;
                targetClip.x = axis - dist;

            }
        }
    }

明显的结果是,每次退出一帧时,所有图形元素都会围绕 x=10 水平翻转,并且每十帧,MovieClip 的形状就会从星形变为圆形,再变为方形。对吗?

不。

影片剪辑确实成功地绕该轴翻转,但随后出现了一个奇怪的问题。动画停止。 MovieClip 被固定为一颗永恒的星星。 Flash 甚至无法识别动画已停止,因为我们一遍又一遍地获得此输出;

currentFrame = 1
currentFrame = 2
currentFrame = 3
currentFrame = 4
...
currentFrame = 30
currentFrame = 1

一直到 30,然后又回到 1。该剪辑仍在播放,但不知何故图形元素没有更新!

这是Flash播放器的问题吗?这是代码的问题吗?如有任何帮助,我们将不胜感激!

我已将 .fla 和 .as 的文件上传到 Dropbox 上。我仍在研究如何嵌入类似的东西,但现在我希望这个链接对您有用。

https://www.dropbox.com/sh/hcljutesblichpp/AABKQ4Kn8OTwfTaeh0I3nnOZa?dl=0

更新:

如果我将每个单独的形状转换为父 MovieClip 中的 MovieClip,则它可以正常播放。然而,这对于复杂的动画来说内存效率不高或者不可行。希望这些信息可以帮助您解决问题。

最佳答案

有几件事您需要注意。

  1. 您不需要像往常一样根据 numChildren 翻转元素 返回 1,因为在每一帧上您都会得到单个 child 。
  2. 您也不需要检查其他条件 Math.abs(targetClip.scaleX)/targetClip.scaleX != -1 设置 翻动。
  3. 而且您还需要使用 ENTER_FRAME 而不是 EXIT_FRAME。 ENTER_FRAME 适用于当前帧,而 EXIT_FRAME 适用于 上一帧。

使用下面的代码。

package 
{

    import flash.display.MovieClip;
    import flash.events.*;
    import flash.utils.setTimeout;

    public class FlipClip extends MovieClip
    {

        var mInstance
        var prevX;

        public function FlipClip()
        {
            //as soon as this is instantiated, add the eventListener
            addEventListener(Event.ENTER_FRAME,flipTheClip);
             mInstance = this;
            //mInstance.visible  = false;
        }



        public function flipTheClip(e)
        {

            this.scaleX *=  -1;
            prevX = this.x;
            if(this.scaleX < 0)
                this.x = prevX + this.width
            else
                this.x = prevX - this.width
        }

    }

}

将以上代码粘贴到 FlipClip.as 文件中,并将帧速率更改为 1。 您需要根据您的要求更新 moviClip 位置。

希望以上回答能解决您的问题。

关于actionscript-3 - Actionscript 3.0 影片剪辑对 EXIT_FRAME 的修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31973144/

相关文章:

sockets - Flash 不再运行调试器。 Windows-10 中可能存在套接字问题吗?

apache-flex - 更好地进行 FlashDevelop

flash - 如何使用 nsis 创建/自定义 Flash 等 Web 下载安装程序?

android - 拦截触摸事件后,如何将其返回给 child ?

android - Android 应用程序在城市附近的 Activity

actionscript-3 - 我正在寻找一个用于actionscript3的正弦波音频发生器

actionscript-3 - AS3 - 限制鼠标点击次数

javascript - SWF 在 Firefox 中加载了两次,需要解决方法

apache-flex - 将 flash.utils.Dictionary 正确序列化为 SharedObject

ios - 如何检测键盘高度何时更新?