Sealyu

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評(píng)論 :: 0 Trackbacks
          1、修改PaperBase基類,存貯新的相機(jī)、場(chǎng)景和視圖區(qū),然后重新渲染產(chǎn)生新的效果。因?yàn)椋紫刃枰x三個(gè)新的類成員屬性:

           

           public var current_scene:Scene3D;//為實(shí)現(xiàn)3D鍵盤交互準(zhǔn)備
           public var current_camera:CameraObject3D;//為實(shí)現(xiàn)3D鍵盤交互準(zhǔn)備
           public var current_viewport:Viewport3D;//為實(shí)現(xiàn)3D鍵盤交互準(zhǔn)備

           

              然后修改initPapervision函數(shù),把原來默認(rèn)的場(chǎng)景、相機(jī)、視圖區(qū)更改為這三個(gè)類屬性:

           

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

           

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

           

           renderer.renderScene(current_scene, current_camera, current_viewport);

           

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

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

           

           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來偵聽事件(鍵盤事件)~!最終效果截圖如下:

              總結(jié):實(shí)現(xiàn)Papervision3D鍵盤交互效果要注意對(duì)舞臺(tái)的偵聽事件的處理,當(dāng)需要偵聽鍵盤時(shí)不要忘了事先import鍵盤類,并同時(shí)override父類相關(guān)的函數(shù)。

             本教程可自由轉(zhuǎn)載,請(qǐng)注明轉(zhuǎn)載出處,謝謝~!

          posted on 2008-11-19 14:51 seal 閱讀(418) 評(píng)論(0)  編輯  收藏 所屬分類: Flex+ActionScript
          主站蜘蛛池模板: 浑源县| 湖北省| 阿图什市| 池州市| 沙田区| 通渭县| 永修县| 中西区| 商城县| 浦北县| 涞源县| 宿松县| 桐柏县| 赣州市| 明水县| 塘沽区| 河源市| 托克托县| 永春县| 泰安市| 和林格尔县| 平果县| 响水县| 阳原县| 宜良县| 来凤县| 包头市| 榆中县| 山东省| 博罗县| 长子县| 巨野县| 固阳县| 福建省| 南江县| 奉化市| 石首市| 青岛市| 青阳县| 克山县| 定远县|