Sealyu

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
          在Papervision3D中,3D場景交互事件主要用到了一個新的類:InteractiveScene3DEvent,這個類在 org.papervision3d.events包中,主要定義了有關鼠標和3D對象之間交互時事件驅動的一些靜態屬性,如點擊、移動、滑開、滑上、按 下、按下并釋放、按下釋放移開等。
          該類的構造函數是: 

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

               詳細的參數就不再一一解釋,你只要記住它的用法比照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);
          }

               注意觀察輸出面板相關的信息!

              基本3D交互場景事件實例:

              本實例是場景中有一個旋轉的平面Plane,正反面都有貼圖,當用鼠標移上或移開時交換顯示不同的圖片,點擊該平面時向相反方向旋轉。在代碼中,我預先創 建一個3D對象Plane平面,并使用兩張不同的圖片來做材質貼圖,然后使用InteractiveScene3DEvent來驅動鼠標事件。效果圖示如 下:

           

              具體代碼如下:

           

           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平面對象上的材質貼圖
            private var ourOverMaterial:BitmapFileMaterial = new BitmapFileMaterial("img/pic12.jpg");//用于當鼠標移到plane平面上時的材質貼圖
            private var yawspeed:Number = 3;//設置yaw()方法的旋轉角度
            private var plane:DisplayObject3D;      
                
                 public function MainInteractiveScene3dEvent()
              {
               addChild(new FPSMonitor());
               init();
                 }
                
                 override protected function init3d():void
              {
               ourMaterial.interactive = true;//設置材質交互
               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);
                 }
              }
          }
           
           

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

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

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

          評論

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

          主站蜘蛛池模板: 新宁县| 杨浦区| 汉沽区| 和硕县| 普兰县| 思茅市| 疏勒县| 广宁县| 无棣县| 平凉市| 肃北| 江门市| 富宁县| 视频| 海城市| 来安县| 宿州市| 甘孜| 夏河县| 商洛市| 阳山县| 即墨市| 扬中市| 深水埗区| 曲麻莱县| 桂平市| 晋中市| 卓尼县| 通许县| 塔城市| 滨州市| 永昌县| 辽宁省| 谷城县| 洛浦县| 阳原县| 海安县| 定安县| 林芝县| 通江县| 申扎县|