2

as3トゥイーンを使用してソフトワイプトランジションでアルファをフェードすることは可能ですか?

http://www.greensock.comに答えがあるかもしれないと思ったのですが、何も見つかりませんでした。画像が一方から他方へとゆっくりと消えていきますように。ソフトディゾルブ。

マスクを使用することは可能かもしれないと思いましたが、マスクがアルファを受け入れるとは思いません。そうでなければ、そのようにすることができます。

4

2 に答える 2

1

実際、マスクはアルファを許可します。それは一種のハックです。これをコードで書いてみてください:

maskMC.cacheAsBitmap = true;
objMC.cacheAsBitmap = true;
objMC.mask = maskMC;

objMC はアニメーション化された MovieClip で、 maskMC は透明度のあるグラデーション シェイプを含むマスクです。ここで例を参照してください:リンク

Greensock を使用してこの効果を実現することもできます。コードは次のようになります。

TweenLite.to(objMC, 1, {"alpha":0, "x":objMC.x + 10});

TweenLite を使用する場合、アニメーション化するオブジェクト、アニメーションの長さ、およびObjectクラスのインスタンスを提供する必要があります (これは、中括弧の間に記述したものです)。このインスタンスには、徐々に変更したいすべての値が含まれています。

于 2012-09-06T21:12:59.983 に答える
0

これは、ALPHA ブレンドモードを使用して実現できます。

アルファがフルからゼロになるグラデーションを持つシェイプを作成し、それをブレンド モード ALPHA にして、マスクしたいアイテムと同じコンテナに入れます。

次に、コンテナのブレンドモードを LAYER に設定します

疑似コード:

container.blendMode = BlendMode.LAYER;  //container holds both the mask and the thing you want masked
maskObj.blendMode = BlendMode.ALPHA;

drawMaskGradients();

コードを介してマスクを作成するために過去に使用した関数を次に示します。

    softMaskSprite = new Sprite();

    this.blendMode  = BlendMode.LAYER;
    softMaskSprite.blendMode = BlendMode.ALPHA;
    softMaskSprite.mouseChildren = false;
    softMaskSprite.mouseEnabled = false;
    this.addChildAt(softMaskSprite,this.getChildIndex(itemContainer)+1);

    //Create Sides
    var top:Shape = new Shape();
    var matr:Matrix = new Matrix();
    matr.createGradientBox(areaWidth + (softMaskWidth * 2), softMaskWidth, 90 * (Math.PI / 180), 0, 0);

    top.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [0,1], [0,255], matr, SpreadMethod.PAD);  
    top.graphics.drawRect(0, 0, areaWidth + (softMaskWidth * 2), softMaskWidth);
    top.graphics.endFill();

    top.x = softMaskWidth * -1;
    top.y = softMaskWidth * -1;
    softMaskSprite.addChild(top);

    //BOTTOM
    var bottom:Shape = new Shape();
    matr = new Matrix();
    matr.createGradientBox(areaWidth + (softMaskWidth * 2), softMaskWidth, 90 * (Math.PI / 180), 0, 0);

    bottom.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x0000FF], [1,0], [0,255], matr, SpreadMethod.PAD);  
    bottom.graphics.drawRect(0, 0, areaWidth + (softMaskWidth * 2), softMaskWidth);
    bottom.graphics.endFill();

    bottom.y = areaHeight;
    bottom.x = softMaskWidth * -1;
    softMaskSprite.addChild(bottom);
于 2012-09-06T18:58:38.667 に答える