0

タイトルのとおり、Flash CS5 と Actionscript 3 を使用して、プログラムでムービークリップを 2 つの部分に分割し、各部分に異なる色を割り当てるにはどうすればよいですか?

動的なムービークリップ (1 つは鳥、もう 1 つは置物、もう 1 つはボールなど) を取得し、それを 2 つの部分に分割して、1 つの部分を 1 つの色で、残りを別の色でペイントする必要があります。使用例は、プログレス バー内の既存のムービークリップを変換して、異なる形状のプログレス バーを動的に作成することです。

4

2 に答える 2

1

簡単な方法は、いくつかの塗りつぶしレイヤー(1つは背景用、もう1つは「進行中」の塗りつぶし用)を定義してから、シェイプを定義するムービークリップを追加するマスクレイヤーを定義することです。これは、背景と進行状況の塗りつぶしに任意のタイプの塗りつぶしを、シェイプマスクに任意の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);
    }
}
于 2012-08-10T20:48:55.960 に答える
0

ムービークリップをビットマップに変換:

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

addChild(bitmap);

次に、このリンクをクリックして、あらゆる種類の方法で分割する方法を学びます.

Actionscript 3: ビットマップをタイルにスライスする

于 2012-08-10T20:06:29.053 に答える