DoCoMoの製品ページ
http://www.nttdocomo.co.jp/product/
にiPhoneとかのジャケ写を回転するインターフェイスをくっつけたかんじ。
▼Wonderfl
▼ActionScript AS3(FP10)
[sourcecode language=”as3″]
/*
DoCoMoの製品ページ
http://www.nttdocomo.co.jp/product/
にiPhoneとかのジャケ写を回転するインターフェイスを
くっつけたかんじ。
連打禁止!
*/
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.PerspectiveProjection;
	import flash.geom.Point;
	import flash.display.DisplayObjectContainer;
	[SWF(width = 465, height = 465, backgroundColor = 0x000000, frameRate = 30)]
	public class Main extends Sprite {
		private var _view:View
		public function Main() {
			stage.transform.perspectiveProjection = new PerspectiveProjection();
			stage.transform.perspectiveProjection.projectionCenter = new Point(stage.stageWidth / 2, stage.stageHeight / 2);
			setView();
			this.addEventListener(MouseEvent.CLICK, onClick);
		}
		public function setView():void{
			_view = new View();
			_view.x = 465/2;
			_view.y = 465/2;
			addChild(_view);
		}
		private function onClick(event:MouseEvent):void {
			_view.setFront(event.target as DisplayObjectContainer);
		}
	}
}
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.utils.Dictionary;
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;
import org.libspark.betweenas3.easing.*;
class View extends Sprite{
	private var _canvas:Sprite;
	private var _rotation:Number = 0;
	public var sprites:Array;
	private var _pozDictionary:Dictionary;
	private var _value:int;
	private var _t:ITween;
	public function View(){
		_canvas = new Sprite();
		sprites = [];
		_pozDictionary = new Dictionary();
		for (var i:int = 0; i < 6; i++) {
			sprites[i] = new Pad(i);
			_pozDictionary[sprites[i]] = i;
			_canvas.addChild(sprites[i]);
		}
		rotation = 0;
		this.z = -350;
		this.addChild(_canvas);
	}
	public function setFront(target:DisplayObjectContainer):void {
		var n:int = sprites.length;
		for (var i:int = 0; i < n; i++) {
			sprites[i].selected = _pozDictionary[target];
		}
		if (_value == _pozDictionary[target]) {return};
		var degree:Number = rotation;
		degree += (_pozDictionary[target] == (_value+1)%6)?60:-60;
		_value = _pozDictionary[target];
		if (_t != null) {
			_t.stop();
		}
		_t = BetweenAS3.serial(
			BetweenAS3.tween(this, { z: 0 }, null, 0.5,Expo.easeIn),
			BetweenAS3.tween(this, { rotation: degree }, null, 0.3),
			BetweenAS3.tween(this, { z: -350 }, null, 0.5,Expo.easeIn)
		);
		_t.play();
	}
	override public function set rotation(value:Number):void{
		_rotation = value;
		var n:int = sprites.length;
		for (var i:int = 0; i < n; i++) {
			sprites[i].x = Math.cos(Math.PI*(i/3+(90-value)/180))*300;
			sprites[i].z = Math.sin(Math.PI*(i/3+(90-value)/180))*300;
			sprites[i].rotationY = -360*i/6+value;
		}
		zSort(_canvas);
	}
	override public function get rotation():Number{return _rotation};
	private function zSort(target:DisplayObjectContainer):void {
		var n:int = target.numChildren;
		var array:Array = [];
		var reference:Array = [];
		for (var i:int = 0; i < n; i++) {
			array[i] = target.getChildAt(i).z;
			reference[i] = target.getChildAt(i);
		}
		var temp:Array = array.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY);
		for (i = 0; i < n; i++) {
			target.setChildIndex(reference[temp[i]], 0);
			reference[temp[i]].visible = (reference[temp[i]].z > 0);
		}
	}
}
import flash.geom.Matrix3D;
import flash.text.TextField;
import flash.text.TextFormat;
class Pad extends Sprite{
	public var id:int;
	private var _selectedId:int;
	private var _t:ITween;
	private var _isFront:Boolean;
	private var _ura:Sprite;
	public function Pad(id:int){
		var colors:Array = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF];
		this.graphics.lineStyle(3,0xFFFFFF);
		this.graphics.beginGradientFill("linear",[colors[id],0x000000],[1,1],[0x00,0xFF],new Matrix(0.7,0,-1,0.7));
		this.graphics.drawRect(-160,-160,320,320);
		this.graphics.endFill();
		this.visible = false;
		this.id = id;
		_ura = new Sprite();
		_ura.graphics.lineStyle(3,0×000000);
		_ura.graphics.beginGradientFill("linear",[colors[id],0x000000],[1,1],[0x00,0xFF],new Matrix(0.7,0,-1,0.7));
		_ura.graphics.drawRect(-60,-60,120,120);
		_ura.graphics.endFill();
		_ura.visible = false;
		_ura.rotationY = 180;
		var tf:TextField = new TextField();
		tf.defaultTextFormat = new TextFormat("_sans",48,0xFFFFFF);
		tf.text = String(id);
		tf.autoSize = "left";
		tf.x = -tf.width/2;
		tf.y = -tf.height/2;
		_ura.addChild(tf);
		this.mouseChildren = false;
		this.addChild(_ura);
	}
	override public function set rotationY(value:Number):void{
		value = ((value+180)%360-180)%360;
		if(Math.abs(this.id-_selectedId)<=1 || Math.abs(this.id-_selectedId) == 5){
			_isFront = Math.cos(value*Math.PI/180)>0;
			if(Math.cos(this.rotationY*Math.PI/180)>0!= _isFront){
				if(_t != null){
					var colors:Array = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF, 0xFF00FF];
					if(_isFront){
						_ura.visible = false;
						this.graphics.clear();
						this.graphics.lineStyle(3,0xFFFFFF);
						this.graphics.beginGradientFill("linear",[colors[id],0x000000],[1,1],[0x00,0xFF],new Matrix(0.7,0,-1,0.7));
						this.graphics.drawRect(-160,-160,320,320);
						this.graphics.endFill();
					}else{
						_ura.visible = true;
						this.graphics.clear();
						this.graphics.lineStyle(3,0xFFFFFF);
						this.graphics.beginGradientFill("linear",[0xFFFFFF,colors[id]],[1,1],[0x00,0xFF],new Matrix(0.7,0,-1,0.7));
						this.graphics.drawRect(-160,-160,320,320);
						this.graphics.endFill();
					}
				}
			}else{
			}
		}
		super.rotationY = value;
	};
	public function set selected(value:int):void{
		if (_selectedId == value) {
			if(value == this.id){
				select();
			}
			return;
		};
		if(this.id == value){
			atSceneInit();
		}else if(Math.abs(this.id-value) == 1 || Math.abs(this.id-value) == 5){
			if(this.id == _selectedId){
				atSceneGoto();
			}
		}
		_selectedId = value;
	}
	private function select():void{
		var degree:Number = (root.stage.mouseX>465/2)?-180:180;
		if (_t != null) {
			_t.stop();
		}
		_t = BetweenAS3.serial(
			BetweenAS3.tween(this, { $rotationY: degree }, null, 0.5,Expo.easeIn)
		);
		_t.play();
	}
	private function atSceneInit():void{
		//trace("init");
	}
	private function atSceneGoto():void{
		if (_t != null) {
			_t.stop();
		}
		_t = BetweenAS3.serial(
			BetweenAS3.tween(this, { rotationY: 0 }, null, 0.5,Expo.easeIn)
		);
		_t.play();
	}
}
[/sourcecode]

