In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

イメージをマウスで投げる

Get Adobe Flash player
by narabekaeru 20 Jun 2009
    Embed
package{
	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.URLRequest;
	[SWF(width = "465", height = "465", backgroundColor = "0xFFFFFF", frameRate = "30")]	
	public class MovableImageSprite extends Sprite{
		private var imgUrls:Array = [
			"http://wonderfl.kayac.com/img/common/img_h1.gif",
			"http://k.yimg.jp/images/top/sp/logo.gif",
			"http://www.google.co.jp/intl/ja_jp/images/logo.gif",
			"http://www.hatena.ne.jp/images/logo_portal_hatena.gif",
			"http://img.mixi.jp/img/basic/common/mixilogo001.gif",
			"http://res.nicovideo.jp/img/base/head/logo/wbeta.gif",
			"http://www.nttdocomo.co.jp/images/header/logo.gif",
			"http://toyota.jp/image/header/img_toyota_01.gif",
			];
		
		public function MovableImageSprite(){
			for each (var url:String in imgUrls){
				var imgLoader:Loader = new Loader();
				imgLoader.load(new URLRequest(url));
				imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
			}
			stage.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);
		}
		
		private function onMouseWheel(event:MouseEvent):void{
			for(var i:int = 0;i<numChildren;i++){
				var object:DisplayObject = getChildAt(i);
				object.scaleX = object.scaleY = object.scaleX + event.delta/30;
				if(object.scaleX < 0){
					object.scaleX = object.scaleY = 0;
				}
			}
		}
		
		private function onLoaded(event:Event):void{
			var imgLoader:Loader = LoaderInfo(event.target).loader;
			var sprite:Sprite = new MovableImage(imgLoader);
			sprite.y = parent.height + sprite.height/2;
			sprite.x = stage.stageWidth/2;
			addChild(sprite);
		}
		
	}
}

import flash.display.Sprite;
import flash.display.DisplayObjectContainer;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.utils.Timer;
class MovableImage extends Sprite{
	private var speedX:Number = 0, speedY:Number = 0;
	private var preX:Number, preY:Number;
	private var prePreX:Number, prePreY:Number;
	private var preTime:Number;
	private var prePreTime:Number;
	
	public function MovableImage(image:DisplayObjectContainer){
		addChild(image);
		image.x = -image.width/2;
		image.y = -image.height/2;
		addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
		
		var timer:Timer = new Timer(33);
		timer.addEventListener(TimerEvent.TIMER, loop);
		timer.start();
	}

	private function onMouseDown(event:MouseEvent):void{
		startDrag(false);
		addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		// 最前面へ
		parent.addChild(this);
		
		speedX = speedY = 0;
		prePreX = preX = x;
		prePreY = preY = y;
		prePreTime = preTime = new Date().getTime();
	}

	private function onMouseMove(event:MouseEvent):void{
		event.updateAfterEvent();
	}

	private function onMouseUp(event:MouseEvent):void{
		stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
		stopDrag();
		
		if(prePreTime < preTime){
			speedX = (preX-prePreX)/(preTime - prePreTime);
			speedY = (preY-prePreY)/(preTime - prePreTime);
		}
		
	}
	
	private var prePaintTime:Number = new Date().getTime();
	
	private function loop(event:TimerEvent):void{
		var nowTime:Number = new Date().getTime();
		x += speedX * (nowTime - prePaintTime);
		y += speedY * (nowTime - prePaintTime);
		
		if((0<=x && Math.floor(x/stage.stageWidth)%2 == 1)
			|| ( x < 0 && Math.floor(Math.abs(x)/stage.stageWidth)%2 == 0)){
			speedX *= -1;
		}
		if((0<=y && Math.floor(y/stage.stageHeight)%2 == 1)
			|| ( y < 0 && Math.floor(Math.abs(y)/stage.stageHeight)%2 == 0)){
			speedY *= -1;
		}
		x = Math.abs(x);
		y = Math.abs(y);
		if((Math.floor(x/stage.stageWidth)%2) == 0){
			x = x % stage.stageWidth;
		}else{
			x = stage.stageWidth - x % stage.stageWidth;
		}
		if((Math.floor(y/stage.stageHeight)%2) == 0){
			y = y % stage.stageHeight;
		}else{
			y = stage.stageHeight - y % stage.stageHeight;
		}

		speedX *= 0.99;
		speedY *= 0.99;
		prePaintTime = nowTime;
		
		if(Math.sqrt(Math.pow(speedX, 2) + Math.pow(speedY, 2)) < 0.01){
			speedX = 0;
			speedY = 0;
		}
		
		prePreTime = preTime;
		prePreX = preX;
		prePreY = preY;
		preTime = nowTime;
		preX = x;
		preY = y;
	}
}