Sealyu

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          在Papervision3D中,3D場景交互事件主要用到了一個(gè)新的類:InteractiveScene3DEvent,這個(gè)類在 org.papervision3d.events包中,主要定義了有關(guān)鼠標(biāo)和3D對象之間交互時(shí)事件驅(qū)動(dòng)的一些靜態(tài)屬性,如點(diǎn)擊、移動(dòng)、滑開、滑上、按 下、按下并釋放、按下釋放移開等。
          該類的構(gòu)造函數(shù)是: 

          InteractiveScene3DEvent (type:String, container3d:DisplayObject3D = null, bubbles:Boolean = false, cancelable:Boolean = false)

               詳細(xì)的參數(shù)就不再一一解釋,你只要記住它的用法比照Flash CS3中的MouseEvent類使用,這里簡單提供在Flash CS3幀上的測試代碼(使用前不要忘了要import包類): 

          import org.papervision3d.events.InteractiveScene3DEvent;
          addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onHandle);
          addEventListener(InteractiveScene3DEvent.OBJECT_MOVE, onHandle);
          addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onHandle);
          addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onHandle);
          addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onHandle);
          addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE, onHandle);
          addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE_OUTSIDE, onHandle);

          private function onHandle(e:InteractiveScene3DEvent):void
          {
           trace(e.type);
          }

               注意觀察輸出面板相關(guān)的信息!

              基本3D交互場景事件實(shí)例:

              本實(shí)例是場景中有一個(gè)旋轉(zhuǎn)的平面Plane,正反面都有貼圖,當(dāng)用鼠標(biāo)移上或移開時(shí)交換顯示不同的圖片,點(diǎn)擊該平面時(shí)向相反方向旋轉(zhuǎn)。在代碼中,我預(yù)先創(chuàng) 建一個(gè)3D對象Plane平面,并使用兩張不同的圖片來做材質(zhì)貼圖,然后使用InteractiveScene3DEvent來驅(qū)動(dòng)鼠標(biāo)事件。效果圖示如 下:

           

              具體代碼如下:

           

           package
          {
           
           
              import PaperBase;
              import org.papervision3d.objects.DisplayObject3D;
           import org.papervision3d.events.InteractiveScene3DEvent;  
              import org.papervision3d.materials.BitmapFileMaterial;
           import org.papervision3d.objects.primitives.Plane;
           
           import it.flashfuck.debugger.FPSMonitor;
             
              public class MainInteractiveScene3dEvent extends PaperBase
           {
            private var ourMaterial:BitmapFileMaterial = new BitmapFileMaterial("img/pic43.jpg");//用于plane平面對象上的材質(zhì)貼圖
            private var ourOverMaterial:BitmapFileMaterial = new BitmapFileMaterial("img/pic12.jpg");//用于當(dāng)鼠標(biāo)移到plane平面上時(shí)的材質(zhì)貼圖
            private var yawspeed:Number = 3;//設(shè)置yaw()方法的旋轉(zhuǎn)角度
            private var plane:DisplayObject3D;      
                
                 public function MainInteractiveScene3dEvent()
              {
               addChild(new FPSMonitor());
               init();
                 }
                
                 override protected function init3d():void
              {
               ourMaterial.interactive = true;//設(shè)置材質(zhì)交互
               ourMaterial.doubleSided = true;
               ourOverMaterial.interactive = true;
               ourOverMaterial.doubleSided = true;
              
               plane = new Plane(ourMaterial,1000,1000,4,4);
               default_scene.addChild(plane);
               plane.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onInteractiveHandle);
               plane.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onInteractiveHandle);
               plane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onInteractiveHandle);    
                 }
             
              private function onInteractiveHandle(e:InteractiveScene3DEvent):void
              {
              if (e.type == "mousePress")
               {
                yawspeed *= -1;
               }
               if (e.type == "mouseOut")
               {
                plane.material=ourMaterial
               }
               if (e.type == "mouseOver")
               {
                plane.material = ourOverMaterial;
               }
              }
                 override protected function processFrame():void
              {
               plane.yaw(yawspeed);
                 }
              }
          }
           
           

              總結(jié):本節(jié)主要是關(guān)于交互場景3D事件類的基本用法,比 較簡單。實(shí)際上,該類的使用和Flash CS3中的MouseEvent類一樣;另外需要注意的是,該類定義的是靜態(tài)屬性,因此可以“類名.屬性”的方式直接使用;事件處理器函數(shù)可以調(diào)用同一個(gè) 函數(shù)實(shí)現(xiàn)不同的功能,如本例中對3D鼠標(biāo)事件的處理采用if條件來實(shí)現(xiàn)指定的事件處理,算是對代碼的一種優(yōu)化吧。如果對代碼中相關(guān)的材質(zhì)貼圖不是很明白, 可以參看前面的內(nèi)容。

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

          posted on 2008-11-19 14:52 seal 閱讀(848) 評論(1)  編輯  收藏 所屬分類: Flex+ActionScript

          評論

          # re: Papervision3D 基本3D交互場景事件(轉(zhuǎn)) 2009-04-30 12:01 孫令純
          以你的代碼根本做不出來!  回復(fù)  更多評論
            

          主站蜘蛛池模板: 虎林市| 阿勒泰市| 滕州市| 平阴县| 黔西县| 资兴市| 郎溪县| 永胜县| 禹州市| 瓦房店市| 乐昌市| 玉树县| 永州市| 巴彦县| 建始县| 佛坪县| 册亨县| 新宁县| 德江县| 奉新县| 哈尔滨市| 昌邑市| 吴江市| 西乌珠穆沁旗| 安吉县| 正镶白旗| 五台县| 香格里拉县| 红桥区| 镇平县| 塔河县| 青神县| 金湖县| 黔江区| 江西省| 连州市| 贡觉县| 绥江县| 布尔津县| 扎鲁特旗| 东丰县|