2011-02-05 2 views
0

私は、画面の一端から他端まで直線的な勾配線を持ちます。ActionScript - グラデーションラインをラップするスクリーンですか?

このラインのグラフィックをラップするための最良の(または唯一の)アプローチは、動いているように見えるのは何ですか?

私の現在の "ソリューション"は、画面の幅の2倍で水平線を描画し、線の半分ごとに勾配パターンを複製することです。ラインは中央に登録され、右に移動します。ラインの半分がステージを横切ると、ラインはそのスタートポイントにリセットされます。

良い方法はありますか?

答えて

1

私が考えることができる唯一の代替案は、描画APIを使用してグラデーションストロークを描画し、各フレームのオフセットを計算することです。しかし、表示オブジェクトに位置変換を適用するだけでは、コストがかかります。わずかな算術演算だけで、それを遅くするのに十分なはずです。

あなたの提案された解決策は、私が一番だと思いエレガント、または効率的くらいに見えるが、我々はVMで実行されているよう、高度に閉塞ベクトルとビットマップを描画し、変換するための最適化(および他のすべての最適化には本当に頼りにならない)ないかもしれませんベットはこの時点でVMを信頼することだけです。 :)

2

次のようなグラデーションラインを描画し、アニメーション化することができます

package 
{ 
import flash.display.GradientType; 
import flash.display.InterpolationMethod; 
import flash.display.SpreadMethod; 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.geom.Matrix; 

public class GradientLine extends Sprite 
{ 
    private var position:Number = 0; 

    public function GradientLine() 
    { 
     addEventListener(Event.ENTER_FRAME, drawLine); 
    } 

    private function drawLine(e:Event):void 
    { 
     graphics.clear(); 

     var m:Matrix = new Matrix(); 
     m.createGradientBox(stage.stageWidth, stage.stageHeight, 0, position, 0); 

     position -= 10;//move from right to left by 10px 

     graphics.lineStyle(2); 
     graphics.lineGradientStyle(GradientType.LINEAR, [ 0xFF0000, 0xFFCC00, 0x0000CC ], [ 1, 1, 1 ], [ 0, 128, 255 ], m, SpreadMethod.REFLECT, InterpolationMethod.RGB, position); 

     graphics.moveTo(0, 250); 
     graphics.lineTo(stage.stageWidth, 250); 
    } 
} 
} 

ステージが利用できるようにする必要があります。 createGradientBox(幅、高さ)を必要なサイズに設定できます。 SpreadMethod.REFLECTによってグラデーションが反映されるため、SpreadMethod.REPEATを試してみるとよいでしょう。

+0

+1これは確かに動作します、ありがとう。残念ながら、Erkmeneが指摘したように、それは本当に高価です。ラインがアニメーション化されている間にマウスをステージの周りに動かすだけで、少し遅れを生み出すことができました。 – TheDarkIn1978

関連する問題