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();//創(chuàng)建一個(gè)組件 var sprite:Sprite=new Sprite(); ui.addChild( sprite); canvas.addChild(ui);//添加容器 camera=new Camera3D(300,300);//創(chuàng)建一個(gè)攝影機(jī) 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) );//創(chuàng)建材質(zhì)屬性,線性光, var material:Material = new ColorMaterial( 0xFFCC33, 1, materialAttr );//創(chuàng)建顏色材質(zhì) material.lightingEnable = true; var app:Appearance = new Appearance( material );//為物體創(chuàng)建材質(zhì)表面 box.rotateX=10; box.rotateY=0; box.appearance = app;//指定材質(zhì)表面 g.addChild(box); box.rotateX=30; box.rotateY=30; g.addChild(box); return g; } private function Run(event:Event):void { scenne.render();//渲染場(chǎng)景 box.rotateX+=1;//讓立方體會(huì)在x軸上旋轉(zhuǎn) box.rotateY+=1;//讓立方體會(huì)在y軸上旋轉(zhuǎn) } ]]--> </mx:Script> <mx:Canvas id="canvas" x="72" y="66" width="411" height="359"> </mx:Canvas> </mx:Application>
使用flex 結(jié)合sandy 引擎來(lái)創(chuàng)造一些3d物體,感覺(jué)還是不錯(cuò)。
制作步驟:
把sandy 引擎相關(guān)的文件導(dǎo)入相關(guān)的包到flex到project里面去。
初始化的時(shí)候,我們首先在場(chǎng)景里面拖動(dòng)一個(gè)Canvas 容器,在容器里面添加子組件去
var ui:UIComponent=new UIComponent();//創(chuàng)建一個(gè)組件 var sprite:Sprite=new Sprite(); ui.addChild( sprite); canvas.addChild(ui);//添加容器
注意:
scenne=new Scene3D("scene1", sprite,camera,root);
第二個(gè)參數(shù),在使用flash ide 開(kāi)發(fā)的時(shí)候,我們只是用this來(lái)指定第二個(gè)參數(shù)。 因?yàn)閠his 代表sprite類對(duì)象的引用
scenne=new Scene3D("scene1",this,camera,root);//創(chuàng)建帶攝像機(jī)的場(chǎng)景
對(duì)比一下使用ide創(chuàng)建一個(gè)立方體的:
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);//設(shè)定攝影機(jī)大小和位置 camera.z=-300; var root:Group=createScene(); scenne=new Scene3D("scene1",this,camera,root);//創(chuàng)建帶攝像機(jī)的場(chǎng)景 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) );//創(chuàng)建材質(zhì)屬性,線性光, var material:Material = new ColorMaterial( 0xFFCC33, 1, materialAttr );//創(chuàng)建顏色材質(zhì) material.lightingEnable = true; var app:Appearance = new Appearance( material );//為物體創(chuàng)建材質(zhì)表面 box.rotateX=10; box.rotateY=0; box.appearance = app;//指定材質(zhì)表面 g.addChild(box); return g; } private function Run(event:Event):void { scenne.render(); box.rotateX+=1;//讓立方體會(huì)在x軸上旋轉(zhuǎn) box.rotateY+=1;//讓立方體會(huì)在y軸上旋轉(zhuǎn) } } }
區(qū)別在于上面所學(xué)到sprite類的對(duì)象。
要在flex里面顯示我們創(chuàng)建的立方體。首先要指定一個(gè)sprite對(duì)象
如果不是就會(huì)出現(xiàn)以下錯(cuò)誤:
強(qiáng)制轉(zhuǎn)換類型失敗:無(wú)法將 flash.display::Sprite@1726041 轉(zhuǎn)換為 mx.core.IUIComponent。
?因?yàn)?mx:Application 本身就是一個(gè)組件,如果在使用addChild 創(chuàng)建子項(xiàng),也就是
?? var? sprite:Sprite=new Sprite();
?????? addChild( sprite);
sprite對(duì)象已經(jīng)在Application 組件里面了 ,但是flash.display sprite對(duì)象無(wú)法 添加到Application 里面去
為了顯示我們所創(chuàng)建的立方體,我們自己定義了一組件,并將sprite對(duì)象添加到容器里面去作為他的子項(xiàng)目
而通過(guò)Canvas容器,把自己創(chuàng)建的組件也添加到容器里面作為父級(jí)容器。
? var ui:UIComponent=new UIComponent();//創(chuàng)建一個(gè)組件?????
?????? var? sprite:Sprite=new Sprite();
????? ui.addChild( sprite);
??????? canvas.addChild(ui);//添加容器?
Canvas容器---> ui---->--sprite
這樣 顯示的效果就出來(lái)了
轉(zhuǎn)載于:https://www.cnblogs.com/guoyiqi/archive/2009/01/22/2069434.html
總結(jié)
以上是生活随笔為你收集整理的flex 结合sandy引擎创作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于scriptManager与JS代码
- 下一篇: GridView滚动条