<acronym id="atkaq"></acronym>
      <bdo id="atkaq"></bdo>

      天才教育網合作機構 > 設計軟件培訓機構 > Flash培訓機構 >

      東莞設計培訓網

      歡迎您!
      朋友圈

      400-850-8622

      全國統一學習專線 9:00-21:00

      位置:設計軟件培訓資訊 > Flash培訓資訊 > 體驗Flash MX(8):控制時鐘Timer

      體驗Flash MX(8):控制時鐘Timer

      日期:2005-12-24 00:00:00     瀏覽:322    來源:東莞設計培訓網

        新的閃爍世界按照每天一個類別的新特性來感受Flash MX的路已經走到了第八天,程序和設計的岔路口似隱似現的就在眼前,而我寫這個系列的文章的目的是希望可以拉住要前往設計之路的同行說:“要不要試一試FlashMX?”,事實上我不過是想說——FlashMX,通往理性世界的后門。

        一個簡單的程序基本流程需要包括:初始化,運行期,結束處理 三部分。當決定了一個程序的目的后,其3部分的內容也是多樣的,不過少哪一部分都是無意義的。

        在運行期的處理是通過一個主程序時鐘來讓程序一直處于循環狀態,直到用戶、異常錯誤或系統中斷而退出循環到結束處理,而這個時鐘即是我們今天要學習的一個單獨課題。

        早期的時鐘(下面稱Timer)很簡單,直接取用CPU的運算速度并加以簡單處理,直到高頻率的CPU出現,人們才考慮如何處理/減少CPU間程序運行的差距。Flash 的時鐘從版本 5的時代就已經看見改良后的效果,雖然在相差太大的機器上還是看到丟幀的問題,到Flash MX的今天,我們終于可以控制Timer了。

        首先看一個放松點的例子:

        createEmptyMovieClip("mc",1);
        function drawDream() {
          mc.lineStyle(random(++i/100),++i*random(30),(++i/30));
          tempx=random(500);
          tempy=10;
          mc.moveTo(tempx,tempy);
          mc.lineTo(tempx, tempy+300);
        }
        idDream=setInterval(drawDream,50);

        運用setInterval,每50毫秒執行一次drawDream,通過draw method隨機繪制出來一個夢的窗簾……(看圖1)

      圖1

        升華升華……

        //dream2

        function drawDream() {
          if(i==undefined){i=0;keynum=1;offy=300;clr=new Color(pic);}else if(i>=700) clearInterval (idDream);
          mc.lineStyle(random(++i/i/10),++i*random(80),(i/50));
          tempx+= i*2*keynum/10;  //reverse set
          keynum=tempx<250 ? 1 : -1;  //reverse key
          tempy=0;
          offy-=.07;
          mc.moveTo(tempx,tempy);
          mc.lineTo(tempx, tempy+offy);
          var tempcolor=clr.getTransform();
          tempcolor.rb+=i/200;  //color to sun
          tempcolor.gb+=i/150;  //color to leaf
          clr.setTransform(tempcolor);
        }

        //init

        stage.scalemode="showall";
        createEmptyMovieClip("pic",1);
        createEmptyMovieClip("mc",2);
        createEmptyMovieClip("loader",3);
        pic.loadMovie("ice.jpg");
        loader.onEnterFrame=function(){
         if (_root.pic._width>0){
          _root.pic._width=Stage.width;
          _root.pic._height=Stage.height;
          this.removeMovieClip();
          }
        }

        //init end

        //start main timer

        idDream=setInterval(drawDream,10);

        新手先不要吐血,讓我們一步步深入察看

        *步:產生我們Flash MX的初始化//init 到//init end部分,這段開始決定了屏幕的顯示模式是拉伸式顯示全部;接著產生我們需要的一切mc;產生以后讀入一個jpg雪的圖片,并附帶一個讀入的loader,當圖片完全讀入的時候設置圖片的相應屬性并“自殺”(自動踢出內存);

        第二步,進入程序主循環。使用idDream來代表主循環timer 的id,并且每10毫秒刷新一次,這樣就進入了內部子程序,里面也有自己的初始化、運行期、結束處理。

        做光柱的算法我已經優化到這樣子:

          tempx+= i*2*keynum/10;  //reverse set
          keynum=tempx<250 ? 1 : -1;  //reverse key

        狀態每2次換一次,分別獲得光柱當前劃線的左右位置,而且通過keynum變量方便的設置中點,即250(隨意一個什么位置)。

        結合

          mc.moveTo(tempx,tempy);
          mc.lineTo(tempx, tempy+offy);

        即可畫出一個光柱的模型,稍加處理即可得到下面的樣子。(圖2)

        而所謂的光射的環境效果,我們可以簡單嘗試下面的算法:

          var tempcolor=clr.getTransform();
          tempcolor.rb+=i/200; //color to sun
          tempcolor.gb+=i/150; //color to leaf
          clr.setTransform(tempcolor);

        算法以速度為先,不考慮太多的客觀因素,只按照程序當前的狀態往太陽和綠色的生命感覺走(紅色和綠色的增量補償,rb要大于gb,否則沒有光感)

        *就是結束條件:if(i>=700) clearInterval (idDream)。當程序運行了700/3次后,結束子程序,清除timer并返回主程序。

        返回主程序后,無其他語句即保持靜止狀態,除非用戶關閉窗口來結束程序。   可以測試一下效果,若覺得光感太強,可以調節rb和gb的值。(測試效果如圖2)

      圖2

        雖然setInterval不是系統級的,但這意味著在不使用movieclip的情況下來得到速度的提高的方法是良性進步,以后會有更多的程序使用timer而不用MovieClip,因為產生一個MovieClip的代價是繼承了所有MovieClip的方法和屬性,而Timer不過是一個Function或一個簡單的Object,何樂而不為。

        

        惡習不改破壞性測試:

        //pic.loadMovie("ice.jpg");

        loadMovie("ice.jpg",-1);

        將*條語句修改為第二條語句的樣子,看看會發生什么?不管是測試環境還是直接運行swf,都會打開IE來讀入剛剛我們需要讀入的jpg,只要條件是負數……傻了眼,這回怎么去控制我要的jpg?

      感謝DnVsystem
      如果本頁不是您要找的課程,您也可以百度查找一下:

      亚洲无碼另类精品_亚洲天堂无码高清性视频_欧美日韩一区二区综合_亚洲午夜福利理论片在线贰信

        <acronym id="atkaq"></acronym>
        <bdo id="atkaq"></bdo>

        日本在线视频中文有码 | 亚洲天堂女人一区 | 亚洲欧美色欧另类欧日韩 | 日本强奷中文字幕在线播放 | 在线三级午夜理论 | 一本久久sm热国产斤 |