TWaver - 專注UI技術

          http://twaver.servasoft.com/
          posts - 171, comments - 191, trackbacks - 0, articles - 2
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2014年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          新聞檔案(1)

          相冊

          搜索

          •  

          最新評論

          MONO中動畫的導出與播放

          Posted on 2014-10-11 10:21 TWaver 閱讀(3202) 評論(1)  編輯  收藏

          使用過MONO編輯器的朋友都應該了解MONO中支持一些動畫的設置,比如開門,開窗,彈出設備,旋轉場景,鏡頭巡航等。但如何將這些動畫應用到自己的場景中呢?比如我們在編輯器中給機柜定義了動畫,怎樣讓做好的機柜模型加載到自己的場景中并能播放動畫呢?別急,我們來舉個例子給大家講解一下。

          首先我們使用編輯器建一個機柜的模型,這里就不給大家演示了,MONO編輯器的平臺上提供了多種機柜的模型,我們直接下載一個模型導出一份json可以了,這里我們直接拿了MONO中公開的“42U標準機柜”的數據并導出了一份數據格式保存在本地。

          接著可以在自己的場景中將這份數據導入進來,代碼如下:

          1mono.Toolkits.loadTemplateUrl(network3d.getDataBox(),'./equipment.json');

          在這個例子中我們通過在地板上指定幾個點,點擊確認后動態從文件中加載模型數據。加載數據后我們加上了機柜從地板上慢慢升級的動畫。這個動畫在mono中已經封裝了,我們只需調用下面的代碼即可:

          1//play animation
          2mono.AniUtil.playAnimation(hostNode, 'scale:top:1:2000:500');

          導入的模板中保存了動畫的屬性,但是雙擊后并不能播放模板中的動畫。是因為這些動作是加在network上的,我們需要在自己的工程中加上雙擊播放動畫的代碼:

          1network3d.getRootView().addEventListener('dblclick', handleDoubleClick);
          2//play animation when double click equipment
          3        var handleDoubleClick = function(e){
          4            var firstClickObject=Utils._findFirstObjectByMouse(network3d,e);
          5            if(firstClickObject.element) {
          6                playAnimation(firstClickObject.element);
          7            }
          8        }

          加上這段就可以播放雙擊對象的動畫了。

          這里我們讓開門和彈出設備的動畫連續播放,也就是當開門動畫播放完畢后,我們再回調一下彈出設備的動畫,代碼如下:

          1var door = findDatafromChildren(object,101);
          2var server = findDatafromChildren(object,102);
          3var played = object._played || false;
          4console.log(object.__status ,object._played);
          5//check animation of element is playing
          6if(object.__status && object.__status === "playing"return;
          7 
          8var animations = [{method:playEquipment,args:[door]},
          9                  {method:playEquipment,args:[server]}];
          10 
          11function playEquipment(equip, callback){
          12    mono.AniUtil.playAnimation(equip, equip.getClient('animation'), 1000, 0,nullfunction(){
          13        if(callback){
          14            callback.call();
          15        }
          16    });
          17}

          這樣導入模型文件的動畫就做完了,這個小demo在MONO的1.9版本中已經提供了,感興趣的朋友可以到twaver的網站上申請mono最新的下載包。
          最后附上一張Demo的截圖,其中綠色地塊表示正準備創建機柜的區域:


          評論

          # www.elephantec.cn  回復  更多評論   

          2014-10-11 16:24 by 合肥網站建設
          向你學習!

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 昌吉市| 乌鲁木齐县| 会宁县| 洛南县| 漳浦县| 镇原县| 忻城县| 新乡县| 安福县| 定安县| 尼勒克县| 静宁县| 邵武市| 区。| 鹤岗市| 峨眉山市| 武威市| 松潘县| 云南省| 通许县| 东港市| 芜湖县| 额尔古纳市| 龙胜| 南溪县| 威海市| 永吉县| 西盟| 丰顺县| 姜堰市| 社会| 那曲县| 肇州县| 洛南县| 明溪县| 宜州市| 湟中县| 平泉县| 灵丘县| 公主岭市| 龙南县|