« キャッシュを有効にしてアニメーションを高速にする - cacheAsBitmap | Main | FLASH内のイベントをトラッキングする »

有機的に動く光 - blendMode

今までAfterEffectsなどを使用しなければ表現できなかったような映像もFlashのみで可能になりました。

blendModeを"add"(加算)にすることと、動かすオブジェクトの色と背景色の色を上手く組み合わせることでこんな感じになります。

スクリプト自体は単純です。

import flash.filters.*;

var matrix:Array = [
		2, 1, 0, 0, 0,
		0, 1, 0, 0, 100,
		0, 0, 1, 0, 0,
		0, 0, 0, 1, 0
		];

var w:Number = 360;
var h:Number = 240;
var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix);
var blur:BlurFilter = new BlurFilter(50, 50, 2);
var cont:MovieClip = this.createEmptyMovieClip("cont_mc", 1);

for (var i:Number = 1; i <= 5; i++) {
	var ppt:Object = {_x:Math.random()*w, _y:Math.random()*h};
	var c:MovieClip = cont.attachMovie("circle", "c"+i, i, ppt);
	c.blendMode = "add";
	c.filters = [blur, cmf];
	c.onEnterFrame = rebound(0, w, 0, h);
}

function rebound(minX:Number, maxX:Number, minY:Number,maxY:Number):Function {
	var xp:Number = Math.random()*6-3;
	var yp:Number = Math.random()*6-3;
	return function():Void {
		if (this._x>=maxX || this._x<=minX) xp = -xp;
		if (this._y>=maxY || this._y<=minY) yp = -yp;
		this._x += xp;
		this._y += yp;
	};
}

blendModeはプロパティパネルからも設定可能ですが、グラフィックインスタンスには適用できません。アニメーターの人にとってはちょっと痛いところです。

TrackBack

このエントリーのトラックバックURL:
http://casualplay.net/cgi-bin/mt/mt-tb.cgi/9

Post a Comment