PV3D點擊3D物件要能有滑鼠事件的話有機個要素。
1. Viewport3D在建構時, 第四個參數 互動模式要開啟
2. 材質的互動模式要開啟
3. 偵聽事件。
例:
那DAE模型呢??
我們以官方的牛牛來練習。
一般在var dae:DAE = new DAE();
_dae.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, outHandler);
都會這樣做, 但會發現不論怎麼樣就是不會有事件發生。
原因是這樣的, 當模型被載入後, DAE的結構是被包了很多層
所以是要對其子物件偵聽, 而不是對DAE偵聽。
同時其材質要開啟互動模式。
1.先對DAE物件偵聽載入成功事件。
2.使用dae.materials,先得到dae的材質名稱, 得到 mat0 , 這個值會因載入不同的模型而不同 ;
dae.getMaterialByName("mat0").interactive = true;
//開啟其互動模式。
3.使用下方法來得到子物件並偵聽。
SourceCodeDown
1. Viewport3D在建構時, 第四個參數 互動模式要開啟
2. 材質的互動模式要開啟
3. 偵聽事件。
例:
var _colorMat:ColorMaterial = new ColorMaterial(); _colorMat.interactive= true; var _plane:Plane = new Plane(_colorMat,400,400); _plane.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, outHandler);這樣即可完成 Plane的偵聽事件。
那DAE模型呢??
我們以官方的牛牛來練習。
一般在var dae:DAE = new DAE();
_dae.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, outHandler);
都會這樣做, 但會發現不論怎麼樣就是不會有事件發生。
原因是這樣的, 當模型被載入後, DAE的結構是被包了很多層
所以是要對其子物件偵聽, 而不是對DAE偵聽。
同時其材質要開啟互動模式。
1.先對DAE物件偵聽載入成功事件。
2.使用dae.materials,先得到dae的材質名稱, 得到 mat0 , 這個值會因載入不同的模型而不同 ;
dae.getMaterialByName("mat0").interactive = true;
//開啟其互動模式。
3.使用下方法來得到子物件並偵聽。
trace(dae.childrenList()); //會得到COLLADA_Scene trace(dae.getChildByName("COLLADA_Scene").childrenList()); //會得到 vsn-mats; dae.getChildByName("COLLADA_Scene").getChildByName("vsn-mats").addEventListener(InteractiveScene3DEvent.OBJECT_OVER, overHandler); dae.getChildByName("COLLADA_Scene").getChildByName("vsn-mats").addEventListener(InteractiveScene3DEvent.OBJECT_OUT, outHandler);完成啦
SourceCodeDown
留言
有辦法讓它呼叫主要class的function嗎?
例如:
我在 a.as 下 去new一個 b.as as DAE
然後這個在 a.as裡的 b.dae可以使用 a.as裡的function嗎?
/main/
a.as
/main/dae/
b.as
不知道這樣您是否看的懂呢?
參考這一篇教學
http://milkmidi.blogspot.com/2009/02/flashembed.html
展瑞遇到的問題是,
trace(dae.materials); trace(dae.childrenList()); trace(dae.getChildByName("COLLADA_Scene").childrenList());
trace 的名稱都不一樣,有時候trace(dae.materials);<-會trace2個以上的名稱,然後以下這段code就會沒做用 dae.getChildByName("COLLADA_Scene").getChildByName("vsn-mats").addEventListener(InteractiveScene3DEvent.OBJECT_OVER, overHandler);
有辦法克服這樣的問題嗎?