- 2007-07-30 20:21
- 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); } } }
関連のありそうなエントリ
- Newer: Papervision3Dで複数のオブジェクトを扱う
- Older: Papervision3Dのプリミティブ・オブジェクト - Cone, Cube, Cylinder, Sphere -
Comments:0
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
