forked from: JigLibFlash Test3

by Limeflash forked from JigLibFlash Test3 (diff: 1)
♥0 | Line 63 | Modified 2010-01-14 05:32:09 | MIT License
play

ActionScript3 source code

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

// forked from tkinjo's JigLibFlash Test3
// forked from tkinjo's JigLibFlash Test2
// forked from tkinjo's JigLibFlash Test
package  
{
	/**
	 */
	
	import flash.display.Sprite;
	import flash.events.Event;
	import jiglib.geometry.JSphere;
	import jiglib.math.JNumber3D;
	import jiglib.physics.constraint.JConstraintPoint;
	import jiglib.physics.RigidBody;
	import jiglib.plugin.papervision3d.Papervision3DPhysics;
	import org.papervision3d.core.proto.CameraObject3D;
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.AbstractView;
	import org.papervision3d.view.BasicView;
	
	[SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "#ffffff")]
	
	/**
	 * ...
	 * @author tkinjo
	 */
	public class Main extends Sprite
	{
		private const speed:Number = 10;
		
		private var view:AbstractView;
		private var scene:Scene3D;
		private var camera:CameraObject3D;
		private var cameraTarget:DisplayObject3D;
		
		private var physics:Papervision3DPhysics;
		
		/**
		* 
		*/
		public function Main() 
		{
			view = new BasicView( stage.stageWidth, stage.stageHeight );
			addChild( view );
			
			scene = view.scene;
			camera = view.camera;
			
			
			
			/** --------------------------------------------------
			 * カメラ設定
			 */
			camera.x = 1000
			camera.y = 1000;
			
			cameraTarget = new DisplayObject3D();
			camera.lookAt( cameraTarget );
			
			
			
			/** --------------------------------------------------
			 * jiglib 設定
			 */
			physics = new Papervision3DPhysics( scene, speed );
			
			
			// マテリアルの準備
			var wireframeMaterial:WireframeMaterial = new WireframeMaterial( 0 );
			var materials:MaterialsList = new MaterialsList();
			materials.addMaterial( wireframeMaterial, "all" );
			
			// 地面の作成
			var ground:RigidBody = physics.createCube( materials, 100, 100, 0 );
			ground.movable = false;
			
			
			// 球の作成
			var sphere:RigidBody;
			var prevSphere:RigidBody;
			
			for( var i:Number = 0; i < 5; i++ ){
				
				// 球の作成と位置の設定
				sphere = physics.createSphere( wireframeMaterial, 100 );
				sphere.currentState.position = ( i == 0 ) ? new JNumber3D( -( sphere.boundingSphere * 2 * 2 ), sphere.boundingSphere * 4, 0 ) : 
																				JNumber3D.add( prevSphere.currentState.position, new JNumber3D( sphere.boundingSphere * 2, 0, 0 ) );
				
				// 連結
				if (i != 0) {
					
					var pos1:JNumber3D = JNumber3D.multiply( JNumber3D.UP, -prevSphere.boundingSphere );
					var pos2:JNumber3D = JNumber3D.multiply( JNumber3D.UP, sphere.boundingSphere );
					var constraint:JConstraintPoint = new JConstraintPoint( prevSphere, pos1, sphere, pos2, 0, 0 );
				}
				
				prevSphere = sphere;
			}
			
			/** --------------------------------------------------
			 * レンダリング
			 */
			addEventListener( Event.ENTER_FRAME, enterFrameHandler );
			view.startRendering();
		}
		
		/**
		 * 
		 * @param	event
		 */
		private function enterFrameHandler( event:Event ):void {
			
			physics.step();
		}
	}
}