forked from: ドラえもん タイムマシーン
http://ton-up.net/blog/archives/254
ワープっぽく・・・見える?w
mouseMove : move perspective point
mouseDown : speed up
mouseUp : speed down
/**
* Copyright heart_thai ( http://wonderfl.net/user/heart_thai )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/wRh3
*/
// forked from yasu's ドラえもん タイムマシーン
// forked from yasu's flash on 2010-5-17
// forked from ton's ワープっぽいなにか
// http://ton-up.net/blog/archives/254
/*
ワープっぽく・・・見える?w
mouseMove : move perspective point
mouseDown : speed up
mouseUp : speed down
*/
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.PerspectiveProjection;
import flash.geom.Point;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.events.IOErrorEvent;
import flash.system.Security;
[SWF(width=465, height=465, backgroundColor=0x000000)]
import flash.display.Bitmap;
public class Warp extends Sprite {
private const W:int = stage.stageWidth;
private const H:int = stage.stageHeight;
private const R:int = 1000;
private const PI:Number = Math.PI;
private var images:Vector.<String>;
private var face:Vector.<BitmapData>;
private var debug:TextField;
private var perspective:PerspectiveProjection;
public function Warp() {
Wonderfl.capture_delay(10);
Security.loadPolicyFile("http://farm1.static.flickr.com/crossdomain.xml");
Security.loadPolicyFile("http://farm3.static.flickr.com/crossdomain.xml");
Security.loadPolicyFile("http://farm4.static.flickr.com/crossdomain.xml");
face = new Vector.<BitmapData>();
images = new Vector.<String>();
images.push(
"http://farm1.static.flickr.com/42/91957795_5a27611762_t.jpg",
"http://farm3.static.flickr.com/2505/3895591397_c2c1e0277e_t.jpg",
"http://farm4.static.flickr.com/3417/3215317191_209e19288f_t.jpg",
"http://farm4.static.flickr.com/3349/3259318314_e25c25092e_t.jpg",
"http://farm4.static.flickr.com/3404/3183630288_0309ce22e1_t.jpg",
"http://farm4.static.flickr.com/3312/3204276425_ec0f72e8d4_t.jpg",
"http://farm4.static.flickr.com/3085/3131027759_720963aefd_t.jpg",
"http://farm4.static.flickr.com/3274/2768722606_1085889cf0_t.jpg",
"http://farm3.static.flickr.com/2340/2089504883_863fb11b0a_t.jpg"
);
debug = new TextField();
addChild(debug);
debug.width = 450;
debug.height = 400;
debug.textColor = 0x00FF00;
msg("Begining Download Image");
debug.multiline = true;
beginLoad();
}
private function beginLoad():void{
var ld:Loader = new Loader();
ld.contentLoaderInfo.addEventListener(Event.COMPLETE , loadComplete );
ld.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR , error );
var url:String = images.shift();
ld.load( new URLRequest(url) );
msg("download "+url);
}
private function error(e:IOErrorEvent):void{
msg(e.toString());
}
private function loadComplete(e:Event):void{
try{
face.push(e.target.content.bitmapData);
}catch(e:Error){
msg(e.toString());
}
msg("completed");
if(images.length >0){
beginLoad();
}else{
beginLoop();
}
}
private function beginLoop():void{
msg("Beginning show");
removeChild(debug);
perspective = this.transform.perspectiveProjection;
perspective.fieldOfView = 45;
addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
}
private function msg(msg:String):void{
debug.appendText(msg+"\n");
}
private function onMouseDownHandler(e:MouseEvent):void { Rect3D.moveZ = 100; }
private function onMouseUpHandler(e:MouseEvent):void { Rect3D.moveZ = 30; }
private function onEnterFrameHandler(e:Event):void {
perspective.projectionCenter = new Point(mouseX, mouseY);
var n:int = Rect3D.moveZ / 6;
for (var i:int = 0; i < n; i++){
var b:BitmapData = face[ Math.round(Math.random()*(face.length-1)) ];
var rect:Rect3D = new Rect3D( b , 200);
var rad:Number = Math.random() * 2 * PI;
rect.x = R * Math.cos(rad);
rect.y = R * Math.sin(rad);
rect.z = Math.random() * 100 + 5000;
rect.rotationX = 180-Math.atan2(rect.y - H / 2, rect.x - W / 2) * 180 / PI;
rect.rotationY = 90;
addChild(rect);
}
}
}
}
import flash.display.Sprite;
import flash.events.Event;
import flash.display.BitmapData;
class Rect3D extends Sprite {
public static var moveZ:int = 30;
public function Rect3D(bmp:BitmapData , size:int) {
graphics.beginBitmapFill(bmp , null , false);
graphics.drawRect( -size / 2, -size / 2, size, size);
graphics.endFill();
addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}
private function onEnterFrameHandler(e:Event):void {
this.z -= moveZ;
if (this.z <= 0) {
parent.removeChild(this);
removeEventListener(e.type, arguments.callee);
}
}
}