Actionscript 3 如何将电影剪辑分成两部分,并为每个部分指定不同的颜色?

Actionscript 3 如何将电影剪辑分成两部分,并为每个部分指定不同的颜色?,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,根据标题,使用FlashCS5和ActionScript3,我如何以编程方式将电影剪辑分为两部分,并为每个部分指定不同的颜色 我需要得到一个动态的movieclip(一次可以是一只鸟,另一次可以是一个雕像,另一次可以是一个球等等),然后把它分成两部分,一部分用一种颜色,另一部分用不同的颜色。该用例用于转换进度条中的任何现有movieclip,动态生成具有不同形状的进度条。将movieclip转换为位图: var bitmap:Bitmap = new Bitmap(); var data1:Bi

根据标题,使用FlashCS5和ActionScript3,我如何以编程方式将电影剪辑分为两部分,并为每个部分指定不同的颜色


我需要得到一个动态的movieclip(一次可以是一只鸟,另一次可以是一个雕像,另一次可以是一个球等等),然后把它分成两部分,一部分用一种颜色,另一部分用不同的颜色。该用例用于转换进度条中的任何现有movieclip,动态生成具有不同形状的进度条。

将movieclip转换为位图:

var bitmap:Bitmap = new Bitmap();
var data1:BitmapData = new BitmapData(mc.width, mc.height);
data.draw(mc);
bitmap.bitmapData = data;

addChild(bitmap);
然后单击此链接,学习如何以各种方式拆分它


一种简单的方法是定义两个填充层(一个用于背景,一个用于“进度”填充),然后定义一个遮罩层,在其中添加定义形状的电影剪辑。这是一个实现,可以对背景和进度填充采用任何类型的填充,对形状遮罩采用任何DisplayObject。它会重新绘制进度填充,而不是缩放矩形,以便位图和渐变填充不会失真

以下是仅使用简单的纯色填充(白色背景上的黑色条)创建它的方法:

这是
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);
    }
}
导入flash.display.IGraphicsFill;
导入flash.display.Sprite;
导入flash.geom.Rectangle;
导入flash.display.Shape;
导入flash.display.IGraphicsData;
导入flash.display.DisplayObject;
公共类MorphProgressBar扩展了Sprite{
私人var_progressFill:IGF票据;
私有变量界:矩形;
私有变量进度:编号;
private var_fillSprite:Sprite=new Sprite();
私有变量:Shape=newshape();
私有变量栏:Shape=newshape();
private var_maskSprite:Sprite=新Sprite();
公共功能栏(
基底填充物:IGSFill,
progressFill:IGraphicsFill,
形状资源:DisplayObject){
_progressFill=progressFill;
_边界=新矩形(0,0,shapeSource.width,shapeSource.height);
_bg.graphics.drawGraphicsData(向量([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=\u maskSprite;
}
公共函数get progress():编号{return\u progress;}
公共功能集进度(值:编号):作废{
var newProgress:Number=Math.min(Math.max(值0),1);
如果(新进度!=\u进度){
_进展=新进展;
updateProgress();
}
}
私有函数updateProgress():void{
_bar.graphics.clear();
_bar.graphics.drawGraphicsData(向量([u progressFill]);
_graphics.drawRect(0,0,_-bounds.width*progress,_-bounds.height);
}
}

不清楚“为每个零件指定不同的颜色”是什么意思。你只想用那种颜色填充电影唇的一半吗?我想改变它的颜色,就像用任何电影唇制作一个进度条,在那里我可以用一种颜色绘制一个部分,其余部分用不同的颜色。好的,我根据我对你问题的理解添加了一个答案。好的,对不起,误解了你想要的。没问题,我会尽力澄清这个问题。谢谢
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);
    }
}