package { import caurina.transitions.Tweener; import caurina.transitions.Equations; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; import flash.system.Security; import mx.effects.easing.Quadratic; import net.wonderfl.utils.SequentialLoader; /** * @author 9re */ public class FP10_3D_Turorial extends Sprite { private const MY_ICON:String = "http://assets.wonderfl.net/images/related_images/1/1c/1c3b/1c3b8d9bfc26fcab4bded661f003ba8621cfd4c6m"; private var _imageArray:Array = []; private var _images:Vector.<Sprite>; private var _i:int; private var _timer:int; private var _mode:int; private var _moving:Boolean = false; private var _duration:Number = 1; public function FP10_3D_Turorial() { SequentialLoader.loadImages([MY_ICON], _imageArray, onImageLoaded); transform.perspectiveProjection.projectionCenter = new Point(232, 232); } private function onImageLoaded():void { var ldr:Loader = _imageArray.pop(); _images = Vector.<Sprite>((new Array(9)).map(function(item:*, i:int, a:Array):Sprite { var bd:BitmapData = new BitmapData(ldr.width, ldr.height); bd.draw(ldr); var sp:Sprite = new Sprite; var bm:Bitmap = new Bitmap(bd); bm.y = -bm.height / 2; bm.x = -bm.width / 2; sp.y = 232; if (i < 4) { sp.rotationY = -80; sp.x = i * 20 - 20; } else if (i > 4) { sp.rotationY = 80; sp.x = 305 + i * 20 } else { sp.rotationY = 0; sp.x = 232; } // flash player 10の機能 sp.z = 100; sp.addChild(bm); addChild(sp); return sp; })); setDepth(); addEventListener(Event.ENTER_FRAME, checkMaouse); } private function checkMaouse(e:Event):void { _duration = Math.min(mouseX, Math.abs(465 - mouseX)); _duration /= 232; _duration = Math.abs(_duration); _duration += 0.4; _duration = Math.max(0.1, _duration * _duration); if (mouseX < 200 && _mode != -1 && !_moving) { _mode = -1; left(); } else if (mouseX > 262 && _mode != 1 && !_moving) { _mode = 1; right(); } else { _mode = 0; } } private function left():void { _images.push(_images.shift()); move(); } private function right():void { _images.unshift(_images.pop()); move(); } private function move():void { _moving = true; _images.forEach(function(b:Sprite, i:int, v:Vector.<Sprite>):void { var sp:Object = { }; if (i < 4) { sp.rotationY = -80; sp.x = i * 20 - 20; } else if (i > 4) { sp.rotationY = 80; sp.x = 305 + i * 20 } else { sp.rotationY = 0; sp.x = 232; } if (i == _images.length - 1 || i == 0) b.visible = false; else b.visible = true; Tweener.addTween(b, { x: sp.x, rotationY: sp.rotationY, transition: Equations.easeOutQuad, time:_duration, onComplete:setFlag }); }); setDepth(); } private function setFlag():void { _moving = false; } private function setDepth():void { for (i = 0; i < 4; ++i) { addChild(_images[i]); } for (var i:int = _images.length - 2; i > 4; --i) { addChild(_images[i]); } addChild(_images[4]); } } } FlashPlayer 10 Feature Tutorial