イメージをマウスで投げる
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;
}
}