Sprite3D
如果要使用 Sprite3D ,需要創(chuàng)建兩個 swf 文件,一個用來處理 Sprite3D 對象,另一個負(fù)責(zé)處理場景、攝像機等。 其實 Sprite3D 只是個簡單的含有360幀的flash動畫而已,每一幀包含一個動作。 這個演示里使用了官方教程提供的一個飛機的360幀的動畫。
示意圖:
(這里沒有用到Sandy,僅僅是個360幀的逐幀動畫而已,效果是飛機原地旋轉(zhuǎn))
剩下的就是關(guān)于Sandy相關(guān)的知識了 首先是加載外部文件,這里使用的是Sandy的類 Class LoaderQueue
引用:
Package sandy.util Class public class LoaderQueue Inheritance LoaderQueue Inheritance flash.events.EventDispatcher
LoaderQueue 有三個方法: 1、LoaderQueue() //創(chuàng)建一個 LoaderQueue 隊列; 2、add(p_sID:String, p_oURLRequest:URLRequest, type:String = "IMG"):void // 添加一個新請求到隊列(類型支持BIN、IMG、SWF,默認(rèn)為IMG); 3、start():void //開始加載。
第二個知識點,Sprite3D () public function Sprite3D(p_sName:String = "", p_oContent:MovieClip = null, p_nScale:Number = 1, p_nOffset:Number = 0) 作用是創(chuàng)建一個 Sprite3D
參數(shù) p_sName:String (default = "") — 給實例命名 p_oContent:MovieClip (default = null) — 內(nèi)容 p_nScale:Number (default = 1) — 縮放設(shè)置 p_nOffset:Number (default = 0) — 內(nèi)容的偏移角度,范圍是【0-360】
代碼:
package { import flash.display.Sprite; import flash.events.*; import flash.ui.*; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.net.URLRequest; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import sandy.core.Scene3D; import sandy.core.scenegraph.*; import sandy.primitive.*; import sandy.materials.*; import sandy.materials.attributes.*; import sandy.core.data.*; import sandy.util.*; import sandy.events.*; /** * ... * @author ever5u */ public class fuxi extends Sprite { private var scene:Scene3D; private var camera:Camera3D; private var queue:LoaderQueue; private var s:Sprite3D; public function fuxi() { queue = new LoaderQueue(); queue.add( "plane", new URLRequest("plane.swf"), LoaderQueue.SWF ); queue.addEventListener(SandyEvent.QUEUE_COMPLETE, loadComplete ); queue.start(); } public function loadComplete(event:QueueEvent ):void { //先創(chuàng)建攝像機 camera = new Camera3D( 500, 300 ); camera.y = 10; camera.z = -300; //創(chuàng)建 Group var root:Group = createScene(); //創(chuàng)建一個新 Sprite 用來控制深度,否則飛機會出現(xiàn)在天空的圖片之下 var canvas:Sprite = new Sprite(); this.addChild(canvas); //創(chuàng)建場景 scene = new Scene3D( "scene", canvas, camera, root ); scene.rectClipping = true; addEventListener( Event.ENTER_FRAME, enterFrameHandler ); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler); } private function createScene():Group { var g:Group = new Group(); s = new Sprite3D("plane", queue.data["plane"], 1); s.rotateY = 90; s.x = 0; s.z = 0; s.y = 0; g.addChild(s); return g; } private function enterFrameHandler( event : Event ) : void { if (s.rotateY==0) s.rotateY=0.1; if(s.x > 220 && s.z < 0) s.x=-220; else if(s.x < -220 && s.z < 0) s.x=220; else if (s.z<-250) s.z = 1000; s.moveForward(-7); scene.render(); } private function keyPressedHandler(event:KeyboardEvent):void { if(event.keyCode == Keyboard.RIGHT) s.rotateY -=5; if(event.keyCode == Keyboard.LEFT) s.rotateY +=5; } } }
效果:文件太大了,無法上傳,用官方的演示吧
官方地址
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁 Flash3D學(xué)習(xí)——Sandy學(xué)習(xí)筆記 [9] 下一頁 Flash3D學(xué)習(xí)——Sandy學(xué)習(xí)筆記 [11]
◎進入論壇RIA設(shè)計與應(yīng)用版塊參加討論
|