[AS3]as3实现拖拽改变摄像头角度
[AS3]as3实现拖拽改变摄像头角度
[AS3]as3实现拖拽改变摄像头角度
1,下面通过一个更复杂的样例,演示Away3D的使用
3,代码如下:
(1)舞台中央添加一个地板,地板上方放置一个方块。方块与地板间有一段距离。
(2)地板和方块使用不同的纹理皮肤。
(3)默认摄像头的角度是沿x轴倾斜15度。
(4)按住鼠标左键拖动视图可以改变摄像头的视角,鼠标滚轮可以改变摄像头远近距离。
(5)整个舞台随窗口大小改变,一直保持全屏。
(6)添加抗锯齿设置,使物体边缘更加平滑。
2,效果图如下:
- 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实现拖拽改变摄像头角度
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...