1

AS3を使用してFlashCS4でグラデーションマスクを使用して自動巻き戻しムービーを作成しようとしています。私が抱えている唯一の問題は、ムービークリップがタイムラインの終わりに達すると、maskingLayerMCがそのグラデーションを失うことです。そのため、ムービーが巻き戻されている間、maskingLayerにはグラデーションがありません。再生ヘッドが最初のフレームに到達し、再び再生を開始すると、勾配が回復します。

最後のフレームにも.cacheAsBitmapブールプロパティを追加しようとしましたが、効果がなく、maskingLayerMCはそれでもグラデーションを失います。

--- 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;

[更新された作業コード]

なぜこれが機能するのか、それが最善の解決策であるのかはわかりませんが。

--- 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;

playDirection関数内に一度プロパティを追加するだけでは不十分であるため、問題はprevFrame()関数にあるようです。したがって、次のコードは、イライラすることに、機能しません。

addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection(e:Event):void
    {
    maskingLayerMC.cacheAsBitmap = true;
    maskedLayerMC.cacheAsBitmap = true;

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

2 に答える 2

1

私はあなたのバグを再現しようとしましたが、それは私にとってはうまくいきます。私の推測では、キーフレームを使用しているためです。キーフレームには、ステージ上でオブジェクトを再インスタンス化するという厄介な副作用があります。これは、キーフレームがオブジェクトと同じレイヤーに配置されている場合にのみ当てはまります。

FLAの設定方法がわからないため、これは単なる推測です。

これが私のために機能するコードですが、主な違いは、フレームスクリプトを使用せず、アニメーションムービークリップとマスキングムービークリップを含むオブジェクトのクラスです。

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;
            }

        }
    }
}
于 2010-02-17T22:42:08.393 に答える
0

LASTフレームでmaskingLayerMCインスタンスを作成してみましたか?最初のフレームで作成されているので、最後から始めると、Flashの観点からはマスクが存在しないのではないかと思います。したがって、最初のフレームに巻き戻されるまでインスタンス化されません。それは理にかなっていますか?

于 2010-02-17T22:06:49.247 に答える