Matrix3Dの練習

by h1ro
Matrix3Dの練習
@author h1ro
♥0 | Line 43 | Modified 2009-11-13 21:11:20 | MIT License
play

ActionScript3 source code

/**
 * Copyright h1ro ( http://wonderfl.net/user/h1ro )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/iXwX
 */

package {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.geom.Matrix3D;
	import flash.geom.Vector3D;
	import flash.events.MouseEvent;
	/**
	 * Matrix3Dの練習
	 * @author h1ro
	 */
	public class Matrix3DTest extends MovieClip{	    
		private var sprite:Sprite;
		private var rotationDirX:Number = 1;
		private var rotationDirY:Number = 1;
		private var rotationCountX:Number;
		private var rotationCountY:Number;
		private var rotationNumX:Number=0;
		private var rotationNumY:Number=0;
		
		public function Matrix3DTest(){
 			
 			//テスト用の四角をつくる
 			sprite = new Sprite();
 			sprite.graphics.beginFill(0x000000);
 			sprite.graphics.drawRect(0,0,100,100);
 			sprite.graphics.endFill();
 			sprite.x = stage.stageWidth/2;
 			sprite.y = stage.stageHeight/2;
 			addChild(sprite);
			
			//まずはz軸に0を与えて3Dに変換
			sprite.z = 0;
			
            //イベント追加
            addEventListener(Event.ENTER_FRAME, function(e:Event):void {
    			sprite.transform.matrix3D.prependRotation(-0.5*rotationDirX, Vector3D.X_AXIS);
    			if (rotationCountX++ > rotationNumX ) {
        			rotationNumX = Math.floor(Math.random() * 20) + 20;
	         		rotationDirX *= -1;
	    	    	rotationCountX = 0;
    			}
	    		sprite.transform.matrix3D.prependRotation(-0.5*rotationDirY, Vector3D.Y_AXIS);
	    		if (rotationCountY++ > rotationNumY ) {
    	    		rotationNumY = Math.floor(Math.random() * 20) + 20;
		    	    rotationDirY *= -1;
		           	rotationCountY = 0;
	    	    }
	    	}
            );
		}
		
	}
}