blendModeとはなんぞや?

と思って調べたところ、簡単に言ってしまえば、PhotoShopにあるレイヤーの乗算とかスクリーンみたいなもん。


ようは色んな効果・・ブラーとかグローフィルターなどいくつか設定したときにblindModeすると混ざり合って、自然な感じというか・・合成というか・・・いろんな効果が生み出せそうです。


使用方法は


var bl:BlurFilter = new BlurFilter(8, 8, 1);
var gf:GlowFilter = new GlowFilter(color,0.2, 80,80,8, 2);
obj.filters = [bl, gf];
obj.blendMode = BlendMode.ADD;  //ADDは加算


そのほかにもBlendMode.NORMALなど様々ものがある。


詳しくは「http://hakuhin.hp.infoseek.co.jp/main/as3/display_obj.html#DISPLAY_OBJ_09 」に載っています。



下記のコードは前回と似ているがオブジェクト(Sprite)自体にブラーとグローフィルターをかけて加算している


package {
import caurina.transitions.*;
//
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.Point;
import flash.utils.Timer;
/**
* ...
* @author $(DefaultUser)
*/
public class BitMapTest3 extends Sprite{
//
private var bmd:BitmapData;
private var bm:Bitmap;
//object
private var canvas:Sprite;
private var obj:Sprite;
//
//
public function BitMapTest3() {
//init
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.quality = StageQuality.LOW;
//
init();
}
//初期設定
private function init():void {
canvas = new Sprite();
addChild(canvas);
//create bitmapdata
bmd = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00000000);
bm = new Bitmap(bmd);
addChild(bm);
//
//start timer
var timer:Timer = new Timer(400);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.start();
//
addEventListener(Event.ENTER_FRAME, LoopAciton);
}

private function LoopAciton(e:Event):void {
bmd.draw(canvas);
//bmd.scroll(0, 4);
bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), new BlurFilter(8, 8, 4));
}

private function timerHandler(e:TimerEvent):void {
//create object
obj = new Sprite();
var color:uint = Math.random() * 0xFFFFFF;
obj.graphics.beginFill(color);
var radius:int = Math.random() * 20 + 20;
obj.graphics.drawCircle(radius / 2, radius / 2, radius);
obj.graphics.endFill();
//
obj.x = Math.random() * stage.stageWidth;
obj.y = Math.random() * stage.stageHeight;
canvas.addChild(obj);
//
//blurfilter
var bl:BlurFilter = new BlurFilter(8, 8, 1);
var gf:GlowFilter = new GlowFilter(color,0.2, 80,80,8, 2);
obj.filters = [bl, gf];
obj.blendMode = BlendMode.ADD;
//
var targetX:Number = obj.x + Math.random() * 600 - 300;
var targetY:Number = obj.y + Math.random() * 600 - 300;
var Rotation:Number = Math.random() * 720;
var targetTime:Number = Math.random() * 2 + 2;
//
//
Tweener.addTween(obj, {
x:targetX,
y:targetY,
rotation:Rotation,
alpha:0,
time:targetTime,
transition:"easeOutSine",
onCompleteParams:[obj],
onComplete:remoeObj
} );
}
//移動完了後削除をする
private function remoeObj(target:Sprite):void {
canvas.removeChild(target);
}

}

}