‘Papervision3D’ カテゴリーのアーカイブ

Papervision3D 2.0 クリックイベントを追加する

2009 年 12 月 22 日 火曜日

バージョン2.0を少し前から触り始めています。去年(一昨年?)触った時と比べて実装が楽になっている印象です、、が、当時の事をほとんど忘れてしまっているので、実際はどうなんでしょう、、。

今回は、

・3D空間上の物体をクリックしてイベントを取得
・物体へオンマウスした際にマウスカーソルを変える

という基本的な部分について躓いたので、自分用コメントを付けて貼っておきます

ACTIONSCRIPT:
  1. package {
  2.    
  3.     import flash.events.Event;
  4.    
  5.     import org.papervision3d.view.BasicView;
  6.     import org.papervision3d.objects.primitives.Plane;
  7.     import org.papervision3d.materials.ColorMaterial;
  8.     import org.papervision3d.events.InteractiveScene3DEvent;
  9.  
  10.     public class PV3DClickTest extends BasicView {
  11.        
  12.         private var planeObj:Plane;
  13.        
  14.         public function PV3DClickTest() {
  15.            
  16.             viewport.interactive = true; // クリックイベントを取得する際に必要
  17.             viewport.buttonMode = true; // ボタンモードON
  18.            
  19.             var material:ColorMaterial = new ColorMaterial(0);
  20.             material.interactive = true; // クリックイベントを取得する際に必要
  21.             material.doubleSided = true; // 裏返しになっても表示させる
  22.            
  23.             planeObj = new Plane( material, 300, 300, 1, 1 );
  24.             planeObj.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onClick, false, 0, true);
  25.            
  26.             scene.addChild(planeObj);
  27.            
  28.             // render
  29.             startRendering();
  30.             addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
  31.         }
  32.        
  33.         private function loop(e:Event):void {
  34.             planeObj.rotationY += 1;
  35.         }
  36.        
  37.         public function onClick(e:InteractiveScene3DEvent):void {
  38.             trace(e.toString());
  39.         }
  40.     }
  41. }

マテリアル毎にinteractiveプロパティでクリッカブルに設定できるが、それと同時にviewportにもinteractiveプロパティも設定しておかなくてはならない、というところが今回躓いた部分。あと、buttonModeプロパティはviewportで設定するようなので、ついでにサンプル内に記述しておきました。