TWaver - 專注UI技術

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

          MONO中動畫的導出與播放

          Posted on 2014-10-11 10:21 TWaver 閱讀(3198) 評論(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 合肥網站建設
          向你學習!

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


          網站導航:
           
          主站蜘蛛池模板: 新昌县| 通渭县| 酒泉市| 新民市| 镇宁| 綦江县| 滦南县| 长汀县| 云和县| 新源县| 神池县| 托里县| 会泽县| 得荣县| 潍坊市| 宿迁市| 商洛市| 延长县| 原阳县| 明光市| 太白县| 罗山县| 台南县| 大邑县| 灵寿县| 越西县| 沙河市| 安义县| 施秉县| 登封市| 湟中县| 镇平县| 陇川县| 油尖旺区| 龙南县| 三明市| 温州市| 寻乌县| 泰顺县| 静乐县| 刚察县|