Home > papervision3d > Papervision3Dのオブジェクトにマウスイベントを付加する

Papervision3Dのオブジェクトにマウスイベントを付加する

Flashと言えばインタラクティブなグラフィックですよね?!
ということで、Papervision3Dのオブジェクトにマウスイベントを付けます。

イベント内容

オブジェクトをクリックすると色が変わるようにします。

ペラペラのオブジェクト(Plane)をクリックして下さい。色が変わります。
つまり、オブジェクトをクリックするとオブジェクトのマテリアルが変わるのです。

イベントリスナを設定する

イベントリスナはオブジェクトがぶら下がっている元のコンテナに加えます。

container.addEventListener(MouseEvent.CLICK, clickObj);

第一引数はイベントの内容を示したStringです。ここではクリックしたときのイベントとします。
イベントが発生するとclickObjというメソッドが呼び出されます。
今回はclickObjメソッドの定義はこうします。

private function clickObj (e : MouseEvent):void {
  if(material.name == "gray") {
    material = new ColorMaterial(0x999999);
    material.name = "black";
  } else {
    material = new ColorMaterial(0xcccccc);
    material.name = "gray";
  }
  material.doubleSided = true;
  obj.material = material;
  scene.renderCamera(camera);
}

マテリアルの名前がgrayなら色「0×999999」を設定し、その名前をblackとします。
逆なら色を「0xcccccc」として、その名前をgrayとします。
つまり、今設定されているマテリアルの名前を評価して、マテリアルを設定しています。

ソースコード

基本は以前のエントリ「Papervision3Dのプリミティブ・オブジェクト - Cone, Cube, Cylinder, Sphere -」とほぼ同じです。

package {
  import flash.display.*;
  import flash.events.*;
 
  import org.papervision3d.core.proto.*;
  import org.papervision3d.scenes.*;
  import org.papervision3d.objects.*;
  import org.papervision3d.cameras.*;
  import org.papervision3d.materials.*;
 
  [SWF(
       backgroundColor="0xffffff",
       width="400",
       height="400",
       frameRate="45"
      )]
 
  public class MouseClickPlane extends Sprite
  {
    private var container : Sprite;
    private var scene     : Scene3D;
    private var camera    : Camera3D;
    private var rootNode  : DisplayObject3D;
    private var obj : DisplayObject3D ; //オブジェクト
    private var size : int = 200;//オブジェクトの長さ
    private var segment   : int = 1;  //面の分割数
    private var material  : MaterialObject3D;
 
    //--------------------------------------------Constructor
    public function MouseClickPlane():void
    {
      //ステージ
      this.stage.quality   = "MEDIUM";
      this.stage.scaleMode = "noScale";
      this.stage.align = StageAlign.TOP_LEFT;
      this.stage.addEventListener(Event.ENTER_FRAME, loop);
      this.stage.addEventListener(Event.RESIZE, resize);
 
      //コンテナ生成
      container = new Sprite();
      container.x = this.stage.stageWidth  / 2;
      container.y = this.stage.stageHeight / 2;
      addChild(container);
 
      //シーン生成
      scene = new Scene3D(container);
 
      //rootNode生成
      rootNode = new DisplayObject3D("rootNode");
      scene.addChild(rootNode);
 
      //マテリアル設定
      material = new ColorMaterial(0xcccccc);
      material.name = "gray";
      material.doubleSided = true;
 
      //オブジェクト生成
      obj = new Plane(material, size, size, segment, segment);
      rootNode.addChild(obj);
 
      //camera設定
      camera = new Camera3D();
      camera.z = -size;
      camera.focus = 300;
      camera.zoom = 1;
 
      //イベントリスナの登録			
      container.addEventListener(MouseEvent.CLICK, clickObj);
    }
 
    //--------------------------------------------loop 
    private function loop(event:Event):void
    {
      // 回転
      obj.rotationY += container.mouseY / 100;
      obj.rotationX += container.mouseX / 100;
 
      //再レンダリング
      scene.renderCamera(camera);
    }
 
    //--------------------------------------------stage
    private function resize(e:Event):void{
      container.x = this.stage.stageWidth  / 2;
      container.y = this.stage.stageHeight / 2;
    }
 
    //--------------------------------------------mouse click	
    private function clickObj (e : MouseEvent):void {
      if(material.name == "gray") {
        material = new ColorMaterial(0x999999);
        material.name = "black";
      } else {
        material = new ColorMaterial(0xcccccc);
        material.name = "gray";
      }
      material.doubleSided = true;
      obj.material = material;
      scene.renderCamera(camera);
    }
  }
}
関連のありそうなエントリ

Comments:0

Comment Form
Remember personal info

*
To prove that you're not a bot, enter this code
Anti-Spam Image

Trackbacks:0

Trackback URL for this entry
http://www.adamrocker.com/blog/135/papervision3d_click_mouseevent.html/trackback/
Listed below are links to weblogs that reference
Papervision3Dのオブジェクトにマウスイベントを付加する from throw Life

Home > papervision3d > Papervision3Dのオブジェクトにマウスイベントを付加する

Search
Feeds
Meta

Return to page top