在Papervision3D中,3D場景交互事件主要用到了一個新的類:InteractiveScene3DEvent,這個類在
org.papervision3d.events包中,主要定義了有關鼠標和3D對象之間交互時事件驅動的一些靜態屬性,如點擊、移動、滑開、滑上、按
下、按下并釋放、按下釋放移開等。
該類的構造函數是:
InteractiveScene3DEvent (type:String,
container3d:DisplayObject3D = null, bubbles:Boolean = false,
cancelable:Boolean = false) |
詳細的參數就不再一一解釋,你只要記住它的用法比照Flash CS3中的MouseEvent類使用,這里簡單提供在Flash
CS3幀上的測試代碼(使用前不要忘了要import包類):
import org.papervision3d.events.InteractiveScene3DEvent;
addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,
onHandle);
addEventListener(InteractiveScene3DEvent.OBJECT_MOVE,
onHandle);
addEventListener(InteractiveScene3DEvent.OBJECT_OUT,
onHandle);
addEventListener(InteractiveScene3DEvent.OBJECT_OVER,
onHandle);
addEventListener(InteractiveScene3DEvent.OBJECT_PRESS,
onHandle);
addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE,
onHandle);
addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE_OUTSIDE,
onHandle);
private function onHandle(e:InteractiveScene3DEvent):void
{
trace(e.type);
}
|
注意觀察輸出面板相關的信息!
基本3D交互場景事件實例:
本實例是場景中有一個旋轉的平面Plane,正反面都有貼圖,當用鼠標移上或移開時交換顯示不同的圖片,點擊該平面時向相反方向旋轉。在代碼中,我預先創
建一個3D對象Plane平面,并使用兩張不同的圖片來做材質貼圖,然后使用InteractiveScene3DEvent來驅動鼠標事件。效果圖示如
下:


具體代碼如下:
package
{
import
PaperBase;
import
org.papervision3d.objects.DisplayObject3D;
import
org.papervision3d.events.InteractiveScene3DEvent;
import
org.papervision3d.materials.BitmapFileMaterial;
import
org.papervision3d.objects.primitives.Plane;
import it.flashfuck.debugger.FPSMonitor;
public class
MainInteractiveScene3dEvent extends PaperBase
{
private var
ourMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/pic43.jpg");//用于plane平面對象上的材質貼圖
private var
ourOverMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/pic12.jpg");//用于當鼠標移到plane平面上時的材質貼圖
private var yawspeed:Number =
3;//設置yaw()方法的旋轉角度
private var
plane:DisplayObject3D;
public function MainInteractiveScene3dEvent()
{
addChild(new FPSMonitor());
init();
}
override protected function init3d():void
{
ourMaterial.interactive = true;//設置材質交互
ourMaterial.doubleSided = true;
ourOverMaterial.interactive = true;
ourOverMaterial.doubleSided = true;
plane = new Plane(ourMaterial,1000,1000,4,4);
default_scene.addChild(plane);
plane.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS,
onInteractiveHandle);
plane.addEventListener(InteractiveScene3DEvent.OBJECT_OUT,
onInteractiveHandle);
plane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER,
onInteractiveHandle);
}
private
function onInteractiveHandle(e:InteractiveScene3DEvent):void
{
if (e.type
== "mousePress")
{
yawspeed *= -1;
}
if (e.type == "mouseOut")
{
plane.material=ourMaterial
}
if (e.type == "mouseOver")
{
plane.material = ourOverMaterial;
}
}
override protected function processFrame():void
{
plane.yaw(yawspeed);
}
}
} |
總結:本節主要是關于交互場景3D事件類的基本用法,比
較簡單。實際上,該類的使用和Flash
CS3中的MouseEvent類一樣;另外需要注意的是,該類定義的是靜態屬性,因此可以“類名.屬性”的方式直接使用;事件處理器函數可以調用同一個
函數實現不同的功能,如本例中對3D鼠標事件的處理采用if條件來實現指定的事件處理,算是對代碼的一種優化吧。如果對代碼中相關的材質貼圖不是很明白,
可以參看前面的內容。
本教程可自由轉載,請注明轉載出處,謝謝~!