Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          1、修改PaperBase基類,存貯新的相機、場景和視圖區,然后重新渲染產生新的效果。因為,首先需要定義三個新的類成員屬性:

           

           public var current_scene:Scene3D;//為實現3D鍵盤交互準備
           public var current_camera:CameraObject3D;//為實現3D鍵盤交互準備
           public var current_viewport:Viewport3D;//為實現3D鍵盤交互準備

           

              然后修改initPapervision函數,把原來默認的場景、相機、視圖區更改為這三個類屬性:

           

           current_camera = default_camera;
           current_scene = default_scene;
           current_viewport = viewport;

           

              用新的類成員變量重新渲染:

           

           renderer.renderScene(current_scene, current_camera, current_viewport);

           

              2、新建3D鍵盤交互類:MainKeyboardInteraction

              在這類中我將使用Plane(平面類)加載外部圖片貼圖來實現3D鍵盤交互,并且設定使用鍵盤上的w、a、s、d這4個按鍵控制Plane的平移,旋轉交互效果,代碼如下:

           

           package
          {
           
           
              import PaperBase;
              import flash.events.KeyboardEvent;
              import org.papervision3d.cameras.FreeCamera3D;
              import org.papervision3d.objects.primitives.Plane;
              import org.papervision3d.materials.BitmapFileMaterial;
             
              public class MainKeyboardInteraction extends PaperBase {
                
                 public var wdown:Boolean = false;
                 public var adown:Boolean = false;
                 public var sdown:Boolean = false;
                 public var ddown:Boolean = false;
                 public var camera:FreeCamera3D;
                
                 public function MainKeyboardInteraction() {
                   init();
                   stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
                   stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
                 }
                
                 public function onKeyDown( event:KeyboardEvent ):void {
                   switch(event.keyCode) {//w:87  a:65  s:83  d:68
                        case 87:
                            wdown = true;
                        break;
                        case 65:
                            adown = true;
                        break;
                        case 83:
                            sdown = true;
                        break;
                        case 68:
                            ddown = true;
                        break;
                   }
                 }
                
                 public function onKeyUp( event:KeyboardEvent ):void {
                        switch(event.keyCode) {
                        case 87:
                            wdown = false;
                        break;
                        case 65:
                            adown = false;
                        break;
                        case 83:
                            sdown = false;
                        break;
                        case 68:
                            ddown = false;
                        break;
                   }
                 }
                
                 override protected function init3d():void {
                   camera = new FreeCamera3D(1, 500);
                   camera.moveUp(400);
                   current_camera = camera;
                   for (var x:Number = 0; x <4; x++) {
                        for (var y:Number = 0; y <4; y++) {
                            var p:Plane = new Plane(new BitmapFileMaterial("img/concretetex02.jpg"));
                            p.pitch(90);
                            p.x = (x * 1000)-2000;
                            p.z = (y * 1000)-2000;
                            default_scene.addChild(p);
                        }
                   }
                 }
                 override protected function processFrame():void {
                   if (wdown) {
                        camera.moveForward(60);
                   }
                   if (sdown) {
                        camera.moveBackward(60);
                   }
                   if (adown) {
                        camera.yaw( -8);
                   }
                   if (ddown) {
                        camera.yaw( 8);
                   }
                 }
              }
          }

           

              代碼思路清晰,無非是用stage來偵聽事件(鍵盤事件)~!最終效果截圖如下:

              總結:實現Papervision3D鍵盤交互效果要注意對舞臺的偵聽事件的處理,當需要偵聽鍵盤時不要忘了事先import鍵盤類,并同時override父類相關的函數。

             本教程可自由轉載,請注明轉載出處,謝謝~!

          posted on 2008-11-19 14:51 seal 閱讀(417) 評論(0)  編輯  收藏 所屬分類: Flex+ActionScript
          主站蜘蛛池模板: 双鸭山市| 孟州市| 尼勒克县| 聊城市| 牙克石市| 易门县| 京山县| 顺昌县| 凤冈县| 兰州市| 芮城县| 中阳县| 武穴市| 紫云| 平和县| 浪卡子县| 加查县| 平阳县| 宜阳县| 曲阳县| 中宁县| 石阡县| 定日县| 栾川县| 五华县| 甘洛县| 平湖市| 乌鲁木齐县| 宜宾县| 武安市| 新泰市| 汨罗市| 札达县| 乌兰浩特市| 绥滨县| 天全县| 霍山县| 五寨县| 务川| 台北市| 邢台县|