读书人

alternativa3d7.7 兑现相机追尾紧跟

发布时间: 2012-10-10 13:58:11 作者: rapoo

alternativa3d7.7 实现相机追尾,紧跟模型后边
方法一:

   package    {import alternativa.engine3d.core.Camera3D;import alternativa.engine3d.core.Object3DContainer;import alternativa.engine3d.core.View;import alternativa.engine3d.materials.FillMaterial;import alternativa.engine3d.primitives.Box;import alternativa.engine3d.primitives.Plane;import flash.display.Sprite;import flash.display.StageAlign;import flash.display.StageScaleMode;import flash.events.Event;import flash.events.KeyboardEvent;import flash.events.MouseEvent;import flash.ui.Keyboard;public class BoxCameraController extends Sprite{private var rootContainer:Object3DContainer = new Object3DContainer();private var boxCameraContainer:Object3DContainer = new Object3DContainer();private var view:View;private var camera:Camera3D;private var box:Box;private var nextX:Number = 0;private var nextY:Number = 0;private static const speed:uint  = 10;private static const RADIAN:Number = Math.PI/180;private var currenRadian:Number = 90*RADIAN;public function BoxCameraController(){if (this.stage)this.init();elsethis.addEventListener(Event.ADDED_TO_STAGE, init);this.stage.addEventListener(Event.ENTER_FRAME, onRenderTick);this.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);}private function init(e:Event = null):void{this.removeEventListener(Event.ADDED_TO_STAGE,init);this.stage.align = StageAlign.TOP_LEFT;this.stage.scaleMode = StageScaleMode.NO_SCALE;this.view = new View(this.stage.width,this.stage.height);this.camera  =  new Camera3D();this.camera.y = -250;this.camera.z = 100;this.camera.rotationX = -100*RADIAN;this.camera.view = view;this.addChild(camera.view);this.addChild(camera.diagram);this.boxCameraContainer.addChild(camera);//planevar materialPlane:FillMaterial = new FillMaterial(0x598FBB, 1, 1);var plane:Plane = new Plane(4000,4000,10,10);plane.setMaterialToAllFaces(materialPlane);this.rootContainer.addChild(plane);//boxvar materialBox:FillMaterial = new FillMaterial(0x0000FF, 1, 1);box = new Box(50,100,25);//box.z = 200;box.setMaterialToAllFaces(materialBox);this.boxCameraContainer.addChild(box);this.rootContainer.addChild(this.boxCameraContainer);}private function keyDown(e:KeyboardEvent):void{switch(e.keyCode){case "W".charCodeAt():case Keyboard.UP:nextX = this.boxCameraContainer.x +  speed * Math.cos(this.currenRadian);nextY = this.boxCameraContainer.y +  speed * Math.sin(this.currenRadian);break;case "S".charCodeAt():case Keyboard.DOWN:nextX = this.boxCameraContainer.x -  speed * Math.cos(this.currenRadian);nextY = this.boxCameraContainer.y -  speed * Math.sin(this.currenRadian);break;case "A".charCodeAt():case Keyboard.LEFT://逆时钟为负boxCameraContainer.rotationZ += RADIAN;this.currenRadian += RADIAN;if(this.boxCameraContainer.rotationZ > 360*RADIAN) boxCameraContainer.rotationZ = 360*RADIAN - boxCameraContainer.rotationZ;break;case "D".charCodeAt():case Keyboard.RIGHT://顺时钟为正boxCameraContainer.rotationZ -= RADIAN;this.currenRadian -= RADIAN;if(boxCameraContainer.rotationZ > 360*RADIAN) boxCameraContainer.rotationZ = 360*RADIAN + boxCameraContainer.rotationZ;break;}}private function onRenderTick(e:Event):void{this.camera.view.width = this.stage.stageWidth;this.camera.view.height = this.stage.stageHeight;camera.render();boxCameraContainer.x = this.nextX;boxCameraContainer.y = this.nextY;}}}

读书人网 >Web前端

热点推荐