06Jun

Papervision and Tweener - Random Motion of a Cube

No comments

So I have needed to learn more about the inner workings of Papervision and control of motion, so I decided to integrate Tweener. Here is just a little demo, just click the movie to give the cube motion, then when the animation is complete the listener for the Mouse Event will be active again.

package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.events.MouseEvent;
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.materials.BitmapFileMaterial;
	import org.papervision3d.materials.MaterialsList;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.objects.Collada;
	import org.papervision3d.core.proto.DisplayObjectContainer3D;
	import org.papervision3d.objects.Cube;
	import org.papervision3d.materials.ColorMaterial;
	import caurina.transitions.*;

	public class PapervisionCubeRandom extends Sprite
	{
		// image 1 variable represents an image in the library with the class name of CubeTexture
		private var image1:BitmapData = new CubeTexture(0,0);
		private var container:Sprite;
		private var scene:Scene3D;
		private var camera:Camera3D;
		private var rootNode:DisplayObject3D;
		private var ml:MaterialsList = new MaterialsList();
		private var customcube:Cube;

		public function PapervisionCubeRandom()
		{
			init3D();

			stage.addEventListener(MouseEvent.MOUSE_DOWN, onClickHandler);
		}

		private function init3D():void {
			container = new Sprite();
			addChild( container );
			container.x = stage.stageWidth * .5;
			container.y = stage.stageHeight * .5;
			scene = new Scene3D( container );
			camera = new Camera3D();
			camera.zoom = 10;

			rootNode = scene.addChild( new DisplayObject3D("rootNode") );

			var ml:MaterialsList = new MaterialsList();
			ml.addMaterial(new BitmapFileMaterial("http://manewc.com/projects/flash/PapervisionCubeSides/ski.jpg"), 'face1');
			ml.addMaterial(new BitmapMaterial( image1 ), 'face2');
			ml.addMaterial(new BitmapMaterial( image1 ), 'face3');
			ml.addMaterial(new BitmapMaterial( image1 ), 'face4');
			ml.addMaterial(new BitmapMaterial( image1 ), 'face5');
			ml.addMaterial(new BitmapFileMaterial("http://manewc.com/projects/flash/i/gahlord.jpg"), 'face6');

			customcube = new Cube( ml, 500, 400, 100, 1, 1, 1 );
			rootNode.addChild( customcube, "myCube01" );

			scene.renderCamera(this.camera);
		}

		private function onClickHandler(m:MouseEvent):void {
			stage.removeEventListener(MouseEvent.MOUSE_DOWN, onClickHandler);

			Tweener.addTween(camera,{x:Math.random() * 2000,time:1,transition:"easeoutquint"});
			Tweener.addTween(camera,{y:Math.random() * 2000,time:1,transition:"easeoutquint"});

			var screen:DisplayObject3D = this.scene.getChildByName("rootNode");

			Tweener.addTween(screen,{rotationX:Math.random() * 360,time:1,transition:"easeoutquint"});
			Tweener.addTween(screen,{rotationY:Math.random() * 360,time:1,transition:"easeoutquint",onComplete:killListener});

			addEventListener ( Event.ENTER_FRAME, Timeline);
		}

		private function Timeline(e:Event):void
		{
			scene.renderCamera(this.camera);
		}

		private function killListener():void
		{
			removeEventListener ( Event.ENTER_FRAME, Timeline);
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onClickHandler);
		}
	}
}

Share/Save/Bookmark

Friday, June 6th, 2008 at 10:20 am and is filed under Actionscript 3, Papervision, Tweener. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a reply