2011-02-05 6 views
0

나는 화면의 한쪽 끝에서 다른 쪽 끝까지 직선적 인 그래디언트 선을 가지고 있습니다.ActionScript - 그라데이션 선 줄 바꿈?

이 라인 그래픽을 화면 줄 바꿈하는 데 가장 좋은 (또는 유일한) 방법은 무엇입니까?

현재 내 "해결책"은 화면의 두 배 가로로 수평선을 그려서 각 선의 절반에 대한 그래디언트 패턴을 복제하는 것입니다. 선은 중앙에 등록되고 오른쪽으로 이동합니다. 선의 반이 무대를 가로 지르면 선은 출발점으로 재설정됩니다.

더 좋은 방법은 무엇입니까?

답변

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