« 2005年12月 | Main | 2006年02月 »

2006年01月21日

燃える円陣 - draw

アニメーションはタイムラインで作成し、MCの配置とエフェクトのみスクリプトで記述。

import flash.filters.*;
import flash.display.*;
import flash.geom.*;

var w:Number = 360;
var h:Number = 240;
var r:Number = 90;
var maxi:Number = 50;
var th_init:Number = 0;
var th:Number = th_init/180*Math.PI;
var bmp:BitmapData = new BitmapData(w, h, true, 0);
var canvas:MovieClip = this.createEmptyMovieClip("canvas", 0);
var bmc:MovieClip;
var clr:ColorTransform = new ColorTransform(.3, .3, .3, .3, -30, 20, 10, 0);

var mat:Matrix = new Matrix(1, 0, 0, 1, w/2, h-40);
var blend:String = "add";
var blur:BlurFilter = new BlurFilter(4, 2, 2);
var maxh:Number = 100;
var minh:Number = 50;

var rate:Number = 1;

var clrmat:ColorMatrixFilter = new ColorMatrixFilter([
		1, 0, 0, 0, 0,
		0, 1, 0, 0, 0,
		0, 0, 1, 0, 0,
		0, 0, 0, .9, 0
		]);
var count:Number = 0;
canvas.attachBitmap(bmp,0);

bmc = this.createEmptyMovieClip("bmc",1);
bmc._x = w/2;
bmc._y = h/2;
bmc._visible = false;
for(var i:Number = 0; i < maxi; i++) {
	var f:MovieClip = bmc.attachMovie("c", "f"+i, i);
	f._yscale = Math.random()*(maxh-minh)+minh;
	f._x = Math.cos(th)*r;
	f._y = Math.sin(th)*r/3;
	f.filters = [blur];
	f.gotoAndPlay (i%f._totalframes);
	th += 360/maxi*(Math.PI/180);
}

this.onEnterFrame = function() :Void {
	if(++count%rate == 0) {
		bmp.draw(bmc, mat, clr, blend, null);
		bmp.applyFilter(bmp, bmp.rectangle, null, blur);
		bmp.applyFilter(bmp, bmp.rectangle, null, clrmat);
	}
}