2011-02-05 26 views
0

我有一條直線,漸變線,從屏幕的一端延伸到另一端。ActionScript - 屏幕環繞漸變線?

什麼是最好(或唯一)的方法爲屏幕環繞此線圖形,以便它似乎在移動?

我當前的「解決方案」是在屏幕寬度的兩倍處繪製水平線,併爲每一半線重複漸變圖案。該線路是中心登記的,並向右移動。一旦線的一半穿過舞臺,該線被重置爲它的起點。

有沒有更好的方法?

回答

1

那麼,我能想到的唯一選擇就是使用繪圖API繪製梯度筆劃,計算每個框架中的偏移量。但它肯定會比在顯示對象上應用位置變換更昂貴。算術的一小部分應該足以讓它變慢。

你提出的解決方案似乎不是太大優雅,或高效但我們是在一個虛擬機的圖紙高度優化的運行和改造閉塞矢量和位圖(和所有其他的優化真的不可靠的)我認爲最好的打賭就是在這一點上信任虛擬機。 :)

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 2011-02-05 12:17:19