うずまき forked from: うずまき
- // forked from miniapp's うずまき
- /**
- * マウスドラッグでもっと渦巻き
- */
- package {
- import com.flashdynamix.utils.SWFProfiler;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.BitmapDataChannel;
- import flash.display.Loader;
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.filters.BitmapFilter;
- import flash.filters.DisplacementMapFilter;
- import flash.filters.DisplacementMapFilterMode;
- import flash.geom.Matrix;
- import flash.geom.Point;
- import flash.net.URLRequest;
- import flash.system.LoaderContext;
- [SWF(backgroundColor="0xFFFFFF", width="465", height="465", frameRate="60")]
- public class Main7 extends Sprite {
- private static const WIDTH_STAGE:uint = 465;
- private static const HEIGHT_STAGE:uint = 465;
- public function Main7() {
- if (stage) init();
- else addEventListener(Event.ADDED_TO_STAGE, init);
- }
- private var _jpeg:Bitmap;
- private var _canvas:Sprite = new Sprite();
- private var _nowDmfsValue:uint = 0;
- private var _mapBitmaps:Vector.<BitmapData> = new Vector.<BitmapData>();
- private var _mapBitmapNo:uint = 0;
- private var _radius:Number = 100;
- private var _dmf:DisplacementMapFilter;
- private var _maxDistance:Number;
- private var _map:Sprite;
- private var _bitmap:Bitmap;
- private function init(e:Event = null):void {
- removeEventListener(Event.ADDED_TO_STAGE, init);
- stage.align = StageAlign.TOP_LEFT;
- stage.scaleMode = StageScaleMode.NO_SCALE;
- SWFProfiler.init(this);
- Wonderfl.capture_delay( 3 );
- var context:LoaderContext = new LoaderContext();
- context.checkPolicyFile = true;
- var loader:Loader = new Loader();
- loader.load(new URLRequest("http://miniapp.org/wonderfl/image/beck.jpg"), context);
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
- _jpeg = Bitmap(loader.content);
- loader.contentLoaderInfo.removeEventListener(this, arguments.callee);
- start();
- });
- }
- private function start():void {
- _canvas.addChild(_jpeg);
- _canvas.x = (WIDTH_STAGE - _canvas.width) / 2;
- _canvas.y = (HEIGHT_STAGE - _canvas.height) / 2;
- addChild(_canvas);
- _jpeg.alpha = 0.5;
- _maxDistance = _radius * 1.2;//適当 適宜調整
- _dmf = new DisplacementMapFilter(
- null,
- new Point(),
- BitmapDataChannel.BLUE,//x方向の移動に使う色
- BitmapDataChannel.GREEN,//y方向の移動に使う色
- _maxDistance * 2,
- _maxDistance * 2,
- DisplacementMapFilterMode.COLOR
- );
- _mapBitmaps.push(createMapBitmap(180));
- _mapBitmaps.push(createMapBitmap(360));
- _map = new Sprite();
- _map.alpha = 0.9;
- _bitmap = new Bitmap(_mapBitmaps[0]);
- _map.addChild(_bitmap);
- _canvas.addChild(_map);
- stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
- stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
- addEventListener(Event.ENTER_FRAME, enterFrameHandler);
- }
- private function createMapBitmap(maxRaddian:Number):BitmapData {
- var mapBitmap:BitmapData = new BitmapData(_radius * 2, _radius * 2, false);
- var yMax:int = _radius * 2;
- var xMax:int = _radius * 2;
- var center:Number = _radius;
- var maxRaddian:Number = (Math.PI / 180) * maxRaddian;
- var m:Matrix = new Matrix();
- var p:Point = new Point();
- mapBitmap.lock();
- for (var xx:Number = 0; xx < xMax; ++xx) {
- for (var yy:Number = 0; yy < yMax; ++yy) {
- var dx:Number = xx - center;
- var dy:Number = yy - center;
- var distance:Number = Math.sqrt(dx * dx + dy * dy);
- if(distance < _radius){
- var powerRate:Number = 1 - (distance / _radius);
- //円の真ん中を中心として、回転させる行列をつくる。
- //円の中心に行くにしたがって回転が強くなるようにする。
- m.identity();
- m.translate(-center, -center);
- m.rotate(maxRaddian * powerRate);
- m.translate(center, center);
- //現在の(xx, yy)の地点が移動先と考える。
- //移動前の座標を求めるので、逆行列を求める
- m.invert();
- p.x = xx;
- p.y = yy;
- var applyPoint:Point = m.transformPoint(p);
- var rateX:Number = (applyPoint.x - xx) / _maxDistance;
- var rateY:Number = (applyPoint.y - yy) / _maxDistance;
- var colorX:Number = Math.round(rateX * 0x7F) + 0x80;
- var colorY:Number = Math.round(rateY * 0x7F) + 0x80;
- var color:uint = colorY << 8 | colorX;
- }
- else {
- color = 0x808080;
- }
- mapBitmap.setPixel(xx, yy, color);
- }
- }
- mapBitmap.unlock();
- return mapBitmap;
- }
- private function mouseDownHandler(e:MouseEvent):void {
- _mapBitmapNo = 1;
- _bitmap.bitmapData = _mapBitmaps[1];
- }
- private function mouseUpHandler(e:MouseEvent):void {
- _mapBitmapNo = 0;
- _bitmap.bitmapData = _mapBitmaps[0];
- }
- //マウス中心に動かす
- private function enterFrameHandler(e:Event):void {
- _dmf.mapBitmap = _mapBitmaps[_mapBitmapNo];
- var p:Point = _dmf.mapPoint;
- p.x = _canvas.mouseX - _radius;
- p.y = _canvas.mouseY - _radius;
- _dmf.mapPoint = p;
- _map.x = _canvas.mouseX- _radius;
- _map.y = _canvas.mouseY- _radius;
- _jpeg.filters = [_dmf];
- }
- }
- }
- // forked from miniapp's うずまき
- /**
- * マウスドラッグでもっと渦巻き
- */
- package {
- import com.flashdynamix.utils.SWFProfiler;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.BitmapDataChannel;
- import flash.display.Loader;
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.filters.BitmapFilter;
- import flash.filters.DisplacementMapFilter;
- import flash.filters.DisplacementMapFilterMode;
- import flash.geom.Matrix;
- import flash.geom.Point;
- import flash.net.URLRequest;
- import flash.system.LoaderContext;
- [SWF(backgroundColor="0xFFFFFF", width="465", height="465", frameRate="60")]
- public class Main7 extends Sprite {
- private static const WIDTH_STAGE:uint = 465;
- private static const HEIGHT_STAGE:uint = 465;
- public function Main7() {
- if (stage) init();
- else addEventListener(Event.ADDED_TO_STAGE, init);
- }
- private var _jpeg:Bitmap;
- private var _canvas:Sprite = new Sprite();
- private var _nowDmfsValue:uint = 0;
- private var _mapBitmaps:Vector.<BitmapData> = new Vector.<BitmapData>();
- private var _mapBitmapNo:uint = 0;
- private var _radius:Number = 100;
- private var _dmf:DisplacementMapFilter;
- private var _maxDistance:Number;
- private function init(e:Event = null):void {
- removeEventListener(Event.ADDED_TO_STAGE, init);
- stage.align = StageAlign.TOP_LEFT;
- stage.scaleMode = StageScaleMode.NO_SCALE;
- SWFProfiler.init(this);
- Wonderfl.capture_delay( 3 );
- var context:LoaderContext = new LoaderContext();
- context.checkPolicyFile = true;
- var loader:Loader = new Loader();
- loader.load(new URLRequest("http://miniapp.org/wonderfl/image/beck.jpg"), context);
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
- _jpeg = Bitmap(loader.content);
- loader.contentLoaderInfo.removeEventListener(this, arguments.callee);
- start();
- });
- }
- private function start():void {
- _canvas.addChild(_jpeg);
- _canvas.x = (WIDTH_STAGE - _canvas.width) / 2;
- _canvas.y = (HEIGHT_STAGE - _canvas.height) / 2;
- addChild(_canvas);
- _maxDistance = _radius * 1.2;//適当 適宜調整
- _dmf = new DisplacementMapFilter(
- null,
- new Point(),
- BitmapDataChannel.BLUE,//x方向の移動に使う色
- BitmapDataChannel.GREEN,//y方向の移動に使う色
- _maxDistance * 2,
- _maxDistance * 2,
- DisplacementMapFilterMode.COLOR
- );
- _mapBitmaps.push(createMapBitmap(180));
- _mapBitmaps.push(createMapBitmap(360));
- stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
- stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
- addEventListener(Event.ENTER_FRAME, enterFrameHandler);
- }
- private function createMapBitmap(maxRaddian:Number):BitmapData {
- var mapBitmap:BitmapData = new BitmapData(_radius * 2, _radius * 2, false);
- var yMax:int = _radius * 2;
- var xMax:int = _radius * 2;
- var center:Number = _radius;
- var maxRaddian:Number = (Math.PI / 180) * maxRaddian;
- var m:Matrix = new Matrix();
- var p:Point = new Point();
- mapBitmap.lock();
- for (var xx:Number = 0; xx < xMax; ++xx) {
- for (var yy:Number = 0; yy < yMax; ++yy) {
- var dx:Number = xx - center;
- var dy:Number = yy - center;
- var distance:Number = Math.sqrt(dx * dx + dy * dy);
- if(distance < _radius){
- var powerRate:Number = 1 - (distance / _radius);
- //円の真ん中を中心として、回転させる行列をつくる。
- //円の中心に行くにしたがって回転が強くなるようにする。
- m.identity();
- m.translate(-center, -center);
- m.rotate(maxRaddian * powerRate);
- m.translate(center, center);
- //現在の(xx, yy)の地点が移動先と考える。
- //移動前の座標を求めるので、逆行列を求める
- m.invert();
- p.x = xx;
- p.y = yy;
- var applyPoint:Point = m.transformPoint(p);
- var rateX:Number = (applyPoint.x - xx) / _maxDistance;
- var rateY:Number = (applyPoint.y - yy) / _maxDistance;
- var colorX:Number = Math.round(rateX * 0x7F) + 0x80;
- var colorY:Number = Math.round(rateY * 0x7F) + 0x80;
- var color:uint = colorY << 8 | colorX;
- }
- else {
- color = 0x808080;
- }
- mapBitmap.setPixel(xx, yy, color);
- }
- }
- mapBitmap.unlock();
- return mapBitmap;
- }
- private function mouseDownHandler(e:MouseEvent):void {
- _mapBitmapNo = 1;
- }
- private function mouseUpHandler(e:MouseEvent):void {
- _mapBitmapNo = 0;
- }
- //マウス中心に動かす
- private function enterFrameHandler(e:Event):void {
- _dmf.mapBitmap = _mapBitmaps[_mapBitmapNo];
- var p:Point = _dmf.mapPoint;
- p.x = _canvas.mouseX - _radius;
- p.y = _canvas.mouseY - _radius;
- _dmf.mapPoint = p;
- _jpeg.filters = [_dmf];
- }
- }
- }
notice:



