首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序复卷电影剪辑去除梯度蒙版(FlashCS4 4/AS3)

程序复卷电影剪辑去除梯度蒙版(FlashCS4 4/AS3)
EN

Stack Overflow用户
提问于 2010-02-17 20:58:33
回答 2查看 1.6K关注 0票数 1

我试图创建一个自动倒带电影使用梯度掩码在闪存CS4使用AS3。我遇到的唯一问题是,当电影剪辑到达时间线的末尾时,maskingLayerMC就会松开它的梯度。因此,当电影倒转时,maskingLayer没有渐变。当游戏头到达第一帧并再次开始播放时,它恢复了它的梯度。

我也尝试过在最后一个框架中添加.cacheAsBitmap布尔属性,但是它没有任何效果,而且maskingLayerMC仍然放松了它的梯度。

代码语言:javascript
复制
--- FIRST FRAME ---

//Gradient Masking
maskedLayerMC.mask = maskingLayerMC;
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;

//Automatically Rewind Movie Clip
var playBackwards:Boolean = false;

addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection (e:Event):void
    {
    if (playBackwards == true)
        {prevFrame();}
        else
        {play();}
    }

--- LAST FRAME---

//Change Boolean Variable To Rewind Movie Clip (Place In Last Frame)
stop();
playBackwards = true;

更新的工作代码

不过,我不知道为什么要这样做,或者这是否是最好的解决方案。

代码语言:javascript
复制
--- FIRST FRAME ---
//Automatically Rewind Movie Clip With Gradient Masking
maskedLayerMC.mask = maskingLayerMC;
var playBackwards:Boolean = false;

addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection(e:Event):void
    {
    if (playBackwards == true)
        {
        prevFrame();
        maskingLayerMC.cacheAsBitmap = true;
        maskedLayerMC.cacheAsBitmap = true;
        }
        else
        {
        play();
        maskingLayerMC.cacheAsBitmap = true;
        maskedLayerMC.cacheAsBitmap = true;
        }
    }

--- LAST FRAME---
//Change Boolean Variable To Rewind Movie Clip (Place In Last Frame)
stop();
playBackwards = true;

看来问题在于prevFrame()函数,因为仅仅在playDirection函数中添加属性是不够的。因此,令人沮丧的是,下面的代码不起作用。

代码语言:javascript
复制
addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection(e:Event):void
    {
    maskingLayerMC.cacheAsBitmap = true;
    maskedLayerMC.cacheAsBitmap = true;

    if (playBackwards == true)
        {prevFrame();}
        else
        {play();}
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-17 22:42:08

我试过重新创建你的窃听器,但对我来说很好。我的猜测是,由于使用了关键帧,关键帧具有在te舞台上重新实例化对象的不良副作用。只有当关键帧与对象放置在同一层时,这才是正确的。

不过,这只是猜测,因为我看不出你是如何设置你的FLA的。

下面是适用于我的代码,主要区别是我不使用框架脚本,而是使用一个类来处理对象,该对象包含动画电影和掩蔽电影。

代码语言:javascript
复制
package {

    import flash.display.MovieClip;
    import flash.events.Event;

    public class Test extends MovieClip {

        public var ani:MovieClip;
        public var mcMask:MovieClip;
        public var dir:int = 1;

        public function Test() {
            ani.cacheAsBitmap = true;
            mcMask.cacheAsBitmap = true;
            ani.mask = mcMask;
            addEventListener(Event.ENTER_FRAME, animate);
        }

        private function animate(e:Event) {
            ani.gotoAndStop(ani.currentFrame + dir);

            //change direction when the end or beginning is reached
            if(ani.currentFrame == ani.totalFrames || ani.currentFrame == 1) {
                dir *= -1;
            }

        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2010-02-17 22:06:49

您试过在最后一个框架中创建maskingLayerMC实例吗?我怀疑,因为它是在第一个框架中创建的,所以从Flash的角度来看,当您从最后开始创建时,掩码就不存在了。因此,直到它回滚回第一个帧,它才会被实例化。这有意义吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2284345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档