2016-10-13 00:16:48 点击量:10 标签: 收藏本文
[AS3]as3实现拖拽改变摄像头角度
- package{
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.geom.Vector3D;
- import away3d.containers.View3D;
- import away3d.controllers.HoverController;
- import away3d.entities.Mesh;
- import away3d.materials.TextureMaterial;
- import away3d.primitives.CubeGeometry;
- import away3d.utils.Cast;
- [SWF(frameRate="60", backgroundColor="#FFFFFF")]
- public class S3 extends Sprite {
- private var _view3D:View3D;
- private var cameraController:HoverController;//360全景展示相机控制器
- //物体 图片(用作方块 的纹理 )
- [Embed(source="assets/snow_diffuse.png")]
- private var blockClass:Class;
- //地板图片(用作地板的纹理 )
- [Embed(source="assets/road.jpg")]
- private var floorClass:Class;
- //物体材质
- private var blockMaterial:TextureMaterial;
- //地板材质
- private var floorMaterial:TextureMaterial;
- private var _lastX:Number = 0;
- private var _lastY:Number = 0;
- public function S3() {
- initEngine();
- initMaterials();
- initObjects();
- initListeners();
- }
- /**
- * 初始化引擎
- */
- private function initEngine():void
- {
- stage.scaleMode = StageScaleMode.NO_SCALE;
- stage.align = StageAlign.TOP_LEFT;
- // 创建一个视口
- _view3D = new View3D();
- _view3D.antiAlias = 4; //设置抗锯齿级别
- //初始化摄像头
- cameraController = new HoverController(_view3D.camera);
- /*cameraController.distance = 1000;
- cameraController.minTiltAngle = 0;
- cameraController.maxTiltAngle = 90;
- cameraController.panAngle = 45;*/
- cameraController.tiltAngle = 15;
- addChild(_view3D);
- }
- /**
- * 初始化材质
- */
- private function initMaterials():void
- {
- //地板的纹理
- floorMaterial = new TextureMaterial(Cast.bitmapTexture(floorClass));
- //方块 的纹理
- blockMaterial = new TextureMaterial(Cast.bitmapTexture(blockClass));
- }
- /**
- * 初始化物体
- */
- private function initObjects():void
- {
- // 在三维舞台中创建一个方块(地板 )
- var cube1:Mesh = new Mesh(new CubeGeometry(700, 20, 500), floorMaterial);
- _view3D.scene.addChild(cube1);
- // 在三维舞台中创建一个方块(地板上的 方块 )
- var cube2:Mesh = new Mesh(new CubeGeometry(200, 70, 200), blockMaterial);
- cube2.position = new Vector3D(0,100,0);
- _view3D.scene.addChild(cube2);
- }
- /**
- * 初始化监听
- */
- private function initListeners():void
- {
- addEventListener(Event.ENTER_FRAME, _onEnterFrame);
- //鼠标事件监听
- stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
- stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
- stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel);
- stage.addEventListener(Event.RESIZE, onResize);
- onResize();
- }
- /**
- * 渲染视图
- */
- private function _onEnterFrame(e:Event):void
- {
- //渲染视图
- _view3D.render();
- }
- /**
- * 使用舞台大小一直全屏
- */
- private function onResize(event:Event = null):void
- {
- _view3D.width = stage.stageWidth;
- _view3D.height = stage.stageHeight;
- }
- /**
- * 鼠标滚轮事件
- */
- private function onWheel(e:MouseEvent):void
- {
- if(e.delta > 0){
- if(cameraController.distance < 1000)
- cameraController.distance += 100;
- }else{
- if(cameraController.distance > 600)
- cameraController.distance -= 100;
- }
- }
- /**
- * 鼠标按下事件
- */
- private function onMouseDown(event:MouseEvent):void
- {
- _view3D.stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
- _lastX = _view3D.mouseX;
- _lastY = _view3D.mouseY;
- }
- /**
- * 鼠标弹起事件
- */
- private function onMouseUp(event:MouseEvent):void
- {
- _view3D.stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
- }
- /**
- * 鼠标移动事件
- */
- private function mouseMoveHandler(event:MouseEvent):void
- {
- //移动摄像机
- var dx:Number = _view3D.mouseX - _lastX;
- var dy:Number = _view3D.mouseY - _lastY;
- cameraController.panAngle += dx;
- cameraController.tiltAngle += dy;
- _lastX = _view3D.mouseX;
- _lastY = _view3D.mouseY;
- }
- }
- }
[AS3]as3实现拖拽改变摄像头角度
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室