迫りくる光 - draw
matrixを使いこなせるようになると、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();
}
}