away3D的camora之平移实例

1、 Basic04Camera3D.as
package{
	import away3d.cameras.Camera3D;
	import away3d.containers.View3D;
	import away3d.primitives.Cone;
	import away3d.primitives.Cube;
	import away3d.primitives.Sphere;
	
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	
	[SWF(width="500", height="400", frameRate="60", backgroundColor="#FFFF00")]
	
	public class Basic04Camera3D extends Sprite{
		private var cam:Camera3D;
		private var lastKey:uint;
		private var keyIsDown:Boolean = false;
		private var myView:View3D;
		private var cover:Cover;
		
		public function Basic04Camera3D(){
			cam = new Camera3D();
			cam.z = -1000;    // make sure it's positioned away from the default 0,0,0 coordinate
			myView = new View3D({camera:cam, x:250, y:200});    // create a viewport
			addChild(myView);
			// make some objects and put it on the 3D stage
			var cone:Cone = new Cone({material:"green#black", radius:50, height:100, x:-150});    //this is a cone
			myView.scene.addChild(cone);
			var sphere:Sphere = new Sphere({material:"red#black", radius:50});    //this is a sphere
			myView.scene.addChild(sphere);
			var cube:Cube = new Cube({material:"blue#black", depth:100, width:100, height:100, x:150});    //shis is a cube
			myView.scene.addChild(cube);
			// add a huge surrounding sphere so we really can see what we're doing
			var largeSphere:Sphere = new Sphere({radius:1500, material:"yellow#black"});
			largeSphere.invertFaces();
			myView.scene.addChild(largeSphere);
			myView.render();
			// only run when user is above the SWF
			cover = new Cover(this);
			addChild(cover);
			this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
			this.stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
			this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		private function onEnterFrame(e:Event):void{
			if(!cover.visible){
				if(keyIsDown){
					// if the key is still pressed, just keep on moving
					switch(lastKey){
						case 87: cam.moveUp(10); break;
						case 83: cam.moveDown(10); break;
						case 65	: cam.moveLeft(10); break;
						case 68	: cam.moveRight(10); break;
						case Keyboard.UP: cam.moveForward(10); break;
						case Keyboard.DOWN: cam.moveBackward(10); break;
					}
				}
				myView.render();
			}
		}
		
		private function keyDown(e:KeyboardEvent):void{
			lastKey = e.keyCode;
			keyIsDown = true;
		}
		
		private function keyUp(e:KeyboardEvent):void{
			keyIsDown = false;
		}
		
	}
}


2、 Cover.as
package{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.BlurFilter;
	import flash.text.TextField;
	import flash.text.TextFormat;
	
	public class Cover extends Sprite{
		private var parentMovie:Sprite;
		private var coverSquare:Sprite;
		private var coverText:TextField;
		private var text:String;
		private var blurredParent:Bitmap;
		
		private var stageW:Number; 
		private var stageH:Number;
		
		public function Cover(parent:Sprite,w:Number = 465, h:Number = 400, txt:String = null){
			parentMovie = parent;
			stageW = w;
			stageH = h;
			text = txt;
			super();
			coverSquare = new Sprite();
			coverSquare.graphics.beginFill(0x000000,0.05);
			coverSquare.graphics.drawRect(0,0,parentMovie.stage.stageWidth,parentMovie.stage.stageHeight);
			coverSquare.graphics.endFill();
			addChild(coverSquare);
			var format1:TextFormat = new TextFormat();
			format1.color = 0x000000;
			format1.size = 12;
			format1.align = "center";
			format1.font = "_sans";
			coverText = new TextField();
			if(!text){
				coverText.text = "Roll over to view";
			} else {
				coverText.text = text;
			}
			coverText.setTextFormat(format1);
			coverText.width = parentMovie.stage.stageWidth;
			blurredParent = new Bitmap();
			this.addChild(blurredParent);
			parentMovie.stage.addEventListener(Event.MOUSE_LEAVE,showCover);
			parentMovie.stage.addEventListener(MouseEvent.MOUSE_OVER,hideCover);
			this.addEventListener(Event.ENTER_FRAME,initCover);
			showCover();
		}
		
		private function hideCover(e:MouseEvent):void{
			trace("hideCover "+e.stageX);
			if(e.stageX < stageW && e.stageX > 0 && e.stageY < stageH && e.stageY > 0){
				this.visible = false;
			}
		}
		
		private function showCover(e:Event = null):void{
			if(!this.visible){
				refresh();
			}
			this.visible = true;	
		}
		
		private function initCover(e:Event):void{
			this.removeEventListener(Event.ENTER_FRAME,initCover);
			refresh();
			this.visible = true;			
		}
		
		public function refresh():void{
			var bits:BitmapData = new BitmapData(stageW,stageH);
			bits.draw(coverSquare);
			bits.draw(parentMovie);
			var backgroundImage:Bitmap = new Bitmap(bits);
			backgroundImage.filters = new Array( new BlurFilter(6,6,4) );
			var textOverlay:BitmapData = new BitmapData(stageW,stageW,false);
			textOverlay.draw(backgroundImage);
			textOverlay.draw(coverText,null,null,null,null,true);
			blurredParent.bitmapData = textOverlay;
		}
		
	}
}

你可能感兴趣的:(UI,Flash,UP)