■
- Papervision3D(GreatWhite)でMetasequoiaのデータ(.mqo)を読み込みたい
- Metasequoiaクラスとやらが使えるとのこと
- 簡単にできたワーイヽ(゚∀゚)ノワーイ
- オブジェクトに対してのマウスオーバー等のイベントを受け取りたい
- Viewport3D及びマテリアルのinteractiveプロパティをtrueにする
- Metasequoiaクラスではないっぽい?
- じゃあつけちゃえ
ちょっとしたサンプル
手元にあるコードから抽出したコードです。元のコードは動いてますが、こっちは試してません。
でも雰囲気は伝わると思います。
あまりやりたくなかったけどMetasequoia.asを変更してしまいました。
こうしなくても良い方法があれば教えてください。(Metasequoiaをオーバーライドとかではなく)
AS3&Papervision3Dはまだわからないことだらけなので、助かります。
Metasequoia.as
// public var doubleSided:Boolean = false; の下あたりに public var interactived:Boolean = false; (省略) //material.doubleSided = this.doubleSided; の下あたりに material.interactive = this.interactived;
Sample.as
package { //(省略) public class Sample { private var houses:Array = new Array(); public function Sample() { // 第3引数がinteractive super(0, 0, true, true, FreeCamera3D.TYPE); houses.push(new House('house1.mqo', 0, 0)); houses.push(new House('house2.mqo', 100, 100)); houses.push(new House('house3.mqo', -100, -100)); for(var i:Number=0; i<houses.length; i++) { scene.addChild(houses[i]); } startRendering(); } } }
House.as
package { //(省略) import org.papervision3d.events.*; import caurina.transitions.Tweener; import org.libspark.pv3d.Metasequoia; public class House extends Metasequoia { public function House(mqo:String, x:int, z:int) { super(); this.interactived = true; this.addEventListener(Event.COMPLETE, onLoadHandler); this.load(mqo); this.x = x; this.z = z; this.y = 0; } public function onLoadHandler(event:Event):void { // マウスオーバーで大きくする this.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, mouseOverHandler); this.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, mouseOutHandler); } public function mouseOverHandler(event:InteractiveScene3DEvent):void { Tweener.addTween(this,{scale: 2, time:1, transition:"easeOutElastic"}); } public function mouseOutHandler(event:InteractiveScene3DEvent):void { Tweener.addTween(this,{scale: 1, time:1, transition:"easeOutElastic"}); } } }