我有一条直线渐变线,从屏幕的一端延伸到另一端。
屏幕包装此线条图的最佳(或唯一)方法是什么,以便它看起来像是在移动?
我当前的“解决方案”是以屏幕宽度的两倍绘制水平线,并复制每一半线的渐变图案。该线是中心注册的,它向右移动。一旦该行的一半遍历该阶段,该行将重置为它的起始点。
有更好的方法吗?
答案 0 :(得分: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。
答案 1 :(得分:1)
嗯,我能想到的唯一选择是使用绘图API绘制渐变笔划,计算每帧中的偏移量。但它肯定比仅仅在显示对象上应用位置变换更昂贵。单凭一点点算术就足以让它变慢。
您提出的解决方案似乎不是优雅或高效,而是因为我们正在高度优化的VM中运行,以便绘制和转换被遮挡的向量和位图(并且真的不可靠在其他所有优化中)我认为最好的办法就是在这一点上信任VM。 :)