« 跳ね回る火の玉 - draw / applyFilter | Main | ゆらゆら揺れる文字 - DisplacementMapFilter »

迫りくる光 - draw

matrixを使いこなせるようになると、drawメソッドでビットマップを自由に操作することができます。

draw イメージ

サンプルでは、matrix.scaleで拡大させていますが、左上を基準に拡大されるため、このままだと中心がズレてしまうので、matrix.translateで移動量だけ中心に戻しています。カラーはタイムラインで変化させて、フレームに飛ばしてます。

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

var scale:Number = 1.24;
var blur:BlurFilter = new BlurFilter(1, 1, 2);
var dep:Number = 0;

this.createEmptyMovieClip("src_mc",1);
this.createEmptyMovieClip("cap_mc",2);

var src:BitmapData = new BitmapData(360, 240, true, 0);
var cap:BitmapData = src.clone(); 
src_mc.attachBitmap(src, 1);
 
var matrix:Matrix = new Matrix();
var clr:ColorTransform = new ColorTransform();

matrix.scale(scale, scale); 
matrix.translate((cap.width-cap.width*scale)/2, (cap.height-cap.height*scale)/2);

this.onEnterFrame = function():Void {
	createParticle();
	cap.draw(this);
	cap.applyFilter(cap, cap.rectangle, new Point(0,0), blur);
	src.draw(cap, matrix, clr, "normal", src.rectangle, true);
}

function createParticle():Void {
	dep++;
	var part:MovieClip = cap_mc.attachMovie("star", "star_mc" + dep, dep);
	part.blendMode = "hardlight";
	part._x = cap_mc._xmouse;
	part._y = cap_mc._ymouse;
	part.gotoAndPlay(Math.floor(dep%part._totalframes)+1);
	part._xscale = part._yscale = 25 + 75*Math.random();
	part.vx = (Math.random()*2-1)*10;
	part.vy = (Math.random()*2-1)*10;
	part.onEnterFrame = scatter;
}

function scatter():Void {
	this._x += this.vx *= .9;
	this._y += this.vy *= .9;
	this._xscale = this._yscale *= .9;
	if (this._xscale < 10){
		this.removeMovieClip();
	}
}

TrackBack

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

Post a Comment