スーパーネコ招き(ブラー効果)
wonderflにおいた画像を元に
ビットマップドローしようとすると
エラーが起きたので、アドレスを変更しました
なんだかビックリマンシールのヘッド(ホロシール)的な効果になった。
色をいじれるようになればもっと効果的かもしれない
【参照サイト】
AS で別ドメインの画像を読み込むときの注意点
http://d.hatena.ne.jp/nitoyon/20071112/crossdomain_img
前の画面を半透明にして重ねるブラー
http://hakuhin.jp/as/raster_efc.html
素材
http://www.flickr.com/photos/kouran/446555772/
/**
* Copyright otherone ( http://wonderfl.net/user/otherone )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/47wf
*/
package
{
import flash.display.MovieClip;
import flash.display.BitmapData;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Sprite;
import flash.geom.Transform;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.system.LoaderContext;
import com.bit101.components.InputText;
import com.bit101.components.PushButton;
[SWF(frameRate = 48,backgroundColor = 0)]
public class BlurEffect extends MovieClip
{
private var _mc:MovieClip=new MovieClip();
private const STW:uint = stage.stageWidth,STH:uint = stage.stageHeight;
private var button:PushButton;
private var BlurLength:Number;
private var BlurAlpha:Number;
private var trans:Transform;
private var color:ColorTransform;
public function BlurEffect()
{
// write as3 code here..
var context:LoaderContext = new LoaderContext(true);
var url:String = "http://works.mztm.jp/moriya/nekome/nekomaneki.png";
var _loader:Loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
_loader.load(new URLRequest(url), context);
// ローダーインフォを取得
// var info:LoaderInfo = loader.contentLoaderInfo;
//info.addEventListener(Event.INIT,LoaderInfoInitFunc);
function completeHandler(event : Event):void
{
_mc.addChild(_loader);
addChild(_mc);
_mc.x=STW/2-_mc.width/2;
_mc.y=STH/2-_mc.height/2;
init();
}
/*
button = new PushButton(this,0,0,"クリックしてね",onMouseClick);
button.x=STW-button.width-2;
button.y=STH-button.height-2;
function onMouseClick(e:Event):void
{
BlurLength = 1.001;
BlurAlpha = 0.9;
//trans = new flash.geom.Transform(render);
color = new flash.geom.ColorTransform(
-1, 1, 1, BlurAlpha, 0, 0, 0, 0);
trans.colorTransform = color;
}
*/
}
private function init():void
{
// ソース用ターゲット
var SOURCE_MOVIECLIP:MovieClip = _mc;
var mcx:Number = SOURCE_MOVIECLIP.x;
var mcy:Number = SOURCE_MOVIECLIP.y;
var mcw:Number = SOURCE_MOVIECLIP.width;
var mch:Number = SOURCE_MOVIECLIP.height;
// ブラーの領域
var BlurRect:Object = {
x:-mcw/2,
y:-mch/2,
w:mcw*2+mcw/2,
h:mch*2+mch/2
};
// ブラー量
BlurLength = 1.003;
// ブラー透過度
BlurAlpha = 0.9;
// ブラー用ムービークリップ作成
var bmpData:BitmapData = new flash.display.BitmapData(BlurRect.w, BlurRect.h,
true, 0x00FFFFFF);
var bmpBuffer:BitmapData = new flash.display.BitmapData(BlurRect.w, BlurRect.h,
true, 0x00FFFFFF);
var render:MovieClip =new MovieClip();
SOURCE_MOVIECLIP.addChild(render);
render.x = BlurRect.x;
render.y = BlurRect.y;
trans = new flash.geom.Transform(render);
color = new flash.geom.ColorTransform(
-1, 1, 1, BlurAlpha, 0, 0, 0, 0);
trans.colorTransform = color;
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
function enterFrameHandler(event:Event):void
{
//バッファから描画用ビットマップに転送
bmpData.copyPixels(bmpBuffer, new flash.geom.Rectangle(
0, 0, BlurRect.w, BlurRect.h), new flash.geom.Point(0, 0));
// バッファにキャプチャー
var m:Matrix = new flash.geom.Matrix(
1 , 0, 0, 1,-BlurRect.x, -BlurRect.y);
bmpBuffer.fillRect(new flash.geom.Rectangle(
0, 0, BlurRect.w, BlurRect.h), 0x00FFFFFF);
bmpBuffer.draw(SOURCE_MOVIECLIP, m);
// 描画オフセット用行列
m = new flash.geom.Matrix(1,0,0,1,0,0);
m.translate(-mouseX,-mouseY);
m.scale(BlurLength,BlurLength);
m.translate(mouseX,mouseY);
// 上に重ねて描画
render.graphics.clear();
render.graphics.beginBitmapFill(bmpData, m, true, true);
render.graphics.moveTo(0, 0);
render.graphics.lineTo(0, BlurRect.h);
render.graphics.lineTo(BlurRect.w, BlurRect.h);
render.graphics.lineTo(BlurRect.w, 0);
render.graphics.endFill();
}
}
}
}