上一課主要學習基本3D交互場景事件的用法,這一課記錄高級用法~!
我以旋轉的立方體為例,3D場景中有一個立方體,立方體的6個面每一個面都有一幅圖(貼圖),當鼠標點擊其中的任一面時,緩動放大,再點擊時緩動縮小恢復原狀繼續旋轉。效果圖如下:

鼠標未點擊時不斷旋轉的立方體效果

鼠標點擊時緩動放大效果
效果代碼如下:
package
{
import
flash.display.DisplayObject;
import
org.papervision3d.materials.BitmapFileMaterial;
import
org.papervision3d.materials.utils.MaterialsList;
import
org.papervision3d.events.InteractiveScene3DEvent;
import
org.papervision3d.objects.primitives.Cube;
public class
MainAdvancedInteractiveScene3dEvent extends PaperBase
{
//---------------------------------------------------------------6個面對應的material
private var frontMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/concretetex02.jpg");
private var backMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/concretetex03.jpg");
private var leftMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/bashi.jpg");
private var
rightMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/pic12.jpg");
private var topMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/pic37.jpg");
private var bottomMaterial:BitmapFileMaterial = new
BitmapFileMaterial("img/pic43.jpg");
//---------------------------------------------------------------目標旋轉初始值
private var targetrotationX:Number = 0;
private var targetrotationY:Number = 0;
private var targetrotationZ:Number = 0;
//---------------------------------------------------------------判斷是否緩動
private var tweening:Boolean = false;
private var cube:Cube;
public function MainAdvancedInteractiveScene3dEvent()
{
init(550, 400);
}
override protected function init3d():void
{
frontMaterial.interactive = true;
frontMaterial.name = "front";
backMaterial.interactive = true;
backMaterial.name = "back";
leftMaterial.interactive = true;
leftMaterial.name = "left";
rightMaterial.interactive = true;
rightMaterial.name = "right";
|