flex 结合sandy引擎创作
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <!--[CDATA[ import mx.core.UIComponent; import sandy.core.Scene3D; import sandy.core.scenegraph.*; import sandy.primitive.*; import sandy.core.data.*; import sandy.materials.*; import sandy.materials.attributes.*; private var scenne:Scene3D; private var camera:Camera3D; private var ranY:Number=0.5; private var box:Box; private function init():void { var ui:UIComponent=new UIComponent();//創建一個組件 var sprite:Sprite=new Sprite(); ui.addChild( sprite); canvas.addChild(ui);//添加容器 camera=new Camera3D(300,300);//創建一個攝影機 camera.z=-400; var root:Group=createScene(); scenne=new Scene3D("scene1", sprite,camera,root); addEventListener(Event.ENTER_FRAME,Run); } private function createScene():Group { var g:Group=new Group(); box=new Box("box",100,100,100); var materialAttr:MaterialAttributes = new MaterialAttributes( new LineAttributes( 0.5, 0x2111BB, 0.4 ), new LightAttributes( true, 0.1) );//創建材質屬性,線性光, var material:Material = new ColorMaterial( 0xFFCC33, 1, materialAttr );//創建顏色材質 material.lightingEnable = true; var app:Appearance = new Appearance( material );//為物體創建材質表面 box.rotateX=10; box.rotateY=0; box.appearance = app;//指定材質表面 g.addChild(box); box.rotateX=30; box.rotateY=30; g.addChild(box); return g; } private function Run(event:Event):void { scenne.render();//渲染場景 box.rotateX+=1;//讓立方體會在x軸上旋轉 box.rotateY+=1;//讓立方體會在y軸上旋轉 } ]]--> </mx:Script> <mx:Canvas id="canvas" x="72" y="66" width="411" height="359"> </mx:Canvas> </mx:Application>
使用flex 結合sandy 引擎來創造一些3d物體,感覺還是不錯。
制作步驟:
把sandy 引擎相關的文件導入相關的包到flex到project里面去。
初始化的時候,我們首先在場景里面拖動一個Canvas 容器,在容器里面添加子組件去
var ui:UIComponent=new UIComponent();//創建一個組件 var sprite:Sprite=new Sprite(); ui.addChild( sprite); canvas.addChild(ui);//添加容器
注意:
scenne=new Scene3D("scene1", sprite,camera,root);
第二個參數,在使用flash ide 開發的時候,我們只是用this來指定第二個參數。 因為this 代表sprite類對象的引用
scenne=new Scene3D("scene1",this,camera,root);//創建帶攝像機的場景
對比一下使用ide創建一個立方體的:
package { import flash.display.Sprite; import flash.events.*; import sandy.core.Scene3D; import sandy.core.scenegraph.*; import sandy.primitive.*; import sandy.core.data.*; import sandy.materials.*; import sandy.materials.attributes.*; public class My3D2 extends Sprite { private var scenne:Scene3D; private var camera:Camera3D; private var ranY:Number=0.5; private var box:Box; public function My3D2() { camera=new Camera3D(400,400);//設定攝影機大小和位置 camera.z=-300; var root:Group=createScene(); scenne=new Scene3D("scene1",this,camera,root);//創建帶攝像機的場景 addEventListener(Event.ENTER_FRAME,Run); } private function createScene():Group { var g:Group=new Group(); box=new Box("box",100,100,100); var materialAttr:MaterialAttributes = new MaterialAttributes( new LineAttributes( 0.5, 0x2111BB, 0.4 ), new LightAttributes( true, 0.1) );//創建材質屬性,線性光, var material:Material = new ColorMaterial( 0xFFCC33, 1, materialAttr );//創建顏色材質 material.lightingEnable = true; var app:Appearance = new Appearance( material );//為物體創建材質表面 box.rotateX=10; box.rotateY=0; box.appearance = app;//指定材質表面 g.addChild(box); return g; } private function Run(event:Event):void { scenne.render(); box.rotateX+=1;//讓立方體會在x軸上旋轉 box.rotateY+=1;//讓立方體會在y軸上旋轉 } } }
區別在于上面所學到sprite類的對象。
要在flex里面顯示我們創建的立方體。首先要指定一個sprite對象
如果不是就會出現以下錯誤:
強制轉換類型失敗:無法將 flash.display::Sprite@1726041 轉換為 mx.core.IUIComponent。
?因為 mx:Application 本身就是一個組件,如果在使用addChild 創建子項,也就是
?? var? sprite:Sprite=new Sprite();
?????? addChild( sprite);
sprite對象已經在Application 組件里面了 ,但是flash.display sprite對象無法 添加到Application 里面去
為了顯示我們所創建的立方體,我們自己定義了一組件,并將sprite對象添加到容器里面去作為他的子項目
而通過Canvas容器,把自己創建的組件也添加到容器里面作為父級容器。
? var ui:UIComponent=new UIComponent();//創建一個組件?????
?????? var? sprite:Sprite=new Sprite();
????? ui.addChild( sprite);
??????? canvas.addChild(ui);//添加容器?
Canvas容器---> ui---->--sprite
這樣 顯示的效果就出來了
轉載于:https://www.cnblogs.com/guoyiqi/archive/2009/01/22/2069434.html
總結
以上是生活随笔為你收集整理的flex 结合sandy引擎创作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于scriptManager与JS代码
- 下一篇: GridView滚动条