根据标题,使用 Flash CS5 和 Actionscript 3,我如何以编程方式将影片剪辑分成两部分并为每个部分分配不同的颜色?
我需要获得一个动态影片剪辑(一次可以是一只鸟,另一个可以是小雕像,另一个可以是一个球等等)并将它分成两部分,用一种颜色绘制一个部分,用另一种颜色绘制其余部分。用例是在进度条中转换任何现有的影片剪辑,动态地制作具有不同形状的进度条。
根据标题,使用 Flash CS5 和 Actionscript 3,我如何以编程方式将影片剪辑分成两部分并为每个部分分配不同的颜色?
我需要获得一个动态影片剪辑(一次可以是一只鸟,另一个可以是小雕像,另一个可以是一个球等等)并将它分成两部分,用一种颜色绘制一个部分,用另一种颜色绘制其余部分。用例是在进度条中转换任何现有的影片剪辑,动态地制作具有不同形状的进度条。
一种简单的方法是定义几个填充层(一个用于背景,一个用于“进度”填充),然后定义一个遮罩层,您可以在其中添加定义形状的影片剪辑。这是一个实现,它可以为背景和进度填充采用任何类型的填充,以及为形状蒙版采用任何 DisplayObject。它重绘进度填充而不是缩放一个矩形,这样位图和渐变填充就不会失真。
以下是仅使用简单的纯色填充(白色背景上的黑色条)创建它的方法:
var pBar:MorphProgressBar = new MorphProgressBar(
new GraphicsSolidFill(0xFFFFFF), new GraphicsSolidFill(0), myMc);
addChild(pBar);
pBar.progress = 0.3; // 30 %
这是MorphProgressBar
. 这个版本已经过测试并且可以工作:
import flash.display.IGraphicsFill;
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.display.Shape;
import flash.display.IGraphicsData;
import flash.display.DisplayObject;
public class MorphProgressBar extends Sprite {
private var _progressFill:IGraphicsFill;
private var _bounds:Rectangle;
private var _progress:Number;
private var _fillSprite:Sprite = new Sprite();
private var _bg:Shape = new Shape();
private var _bar:Shape = new Shape();
private var _maskSprite:Sprite = new Sprite();
public function MorphProgressBar(
baseFill:IGraphicsFill,
progressFill:IGraphicsFill,
shapeSource:DisplayObject) {
_progressFill = progressFill;
_bounds = new Rectangle(0,0,shapeSource.width,shapeSource.height);
_bg.graphics.drawGraphicsData(Vector.<IGraphicsData>([baseFill]));
_bg.graphics.drawRect(0,0,_bounds.width, _bounds.height);
_fillSprite.addChild(_bg);
_fillSprite.addChild(_bar);
_maskSprite.addChild(shapeSource);
addChild(_fillSprite);
addChild(_maskSprite);
_fillSprite.mask = _maskSprite;
}
public function get progress():Number { return _progress; }
public function set progress(value:Number):void {
var newProgress:Number = Math.min(Math.max(value,0),1);
if (newProgress != _progress) {
_progress = newProgress;
updateProgress();
}
}
private function updateProgress():void {
_bar.graphics.clear();
_bar.graphics.drawGraphicsData(Vector.<IGraphicsData>([_progressFill]));
_bar.graphics.drawRect(0,0,_bounds.width * progress, _bounds.height);
}
}
将影片剪辑转换为位图:
var bitmap:Bitmap = new Bitmap();
var data1:BitmapData = new BitmapData(mc.width, mc.height);
data.draw(mc);
bitmap.bitmapData = data;
addChild(bitmap);
然后单击此链接并学习如何以各种方式拆分它。