首頁 > 文章中心 > 正文

          多頁動畫技術

          前言:本站為你精心整理了多頁動畫技術范文,希望能為你的創作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

          多頁動畫技術

          動畫設計中消除圖像閃爍的一種方法是使用多頁動畫。多頁動畫是通過使用頁切換技術實現的。頁切換改變顯示頁以繪制出給定動畫序列的相鄰幀。由于圖像通常繪制在不同的頁上(不是當前可見頁),用戶不會看到圖像被繪制或擦除。所以,這種技術能產生高質量的動畫而沒有圖像閃爍。進行頁切換的詳細步驟如下。

          1.選擇一種至少有兩個可用顯示頁的視頻模式(示例中為EGA640×200,16色4頁)。

          2.使用-setvideomode()函數獲取選擇的視頻模式。在當前顯示頁(0頁)上繪制出序列中的第一幀。

          3.在需要繪制出序列中下一幀時,使用-setactivepage()函數設置激活頁為備用顯示項,僅僅改變激活頁(不是可見頁)。

          4.繪制出下一幀。此幀將被繪制在備用顯示頁(頁1)上,而當前頁(頁0)繼續被顯示。在以后重復這一步時在繪制新的一幀前擦除掉已有的幀。

          5.繪制出新的一幀以后,使用-setvisualpage()函數將可見頁設置為備用頁。此時,備用頁成為當前頁。

          6.重復步驟3到5直到完成了動畫序列為止。

          以下程序(采用VisualC++)演示了實際的多頁動畫,例子中的動畫序列讀者自行設計。

          #include<conio.h>

          #include<graph.h}

          #include<time.h}

          #defineLAST-FRAME4/*Totalframesinthesequence.*/

          #defineDRAW1/*Codeforthedrawoperation.*/

          #defineDELTA-X10/*Pixelsmovedperframechange.*/

          #defineHALF-SECOND500/*500msecdelaybetweenframes

          .*/

          #defineMAX-X600/*MaxXpositionbeforetermination.

          */

          #defineSETUP-DISPLAY\par

          \par-setvideomode(-HRES16COLOR);\par

          #defineEXIT-TO-DOS\par

          \par-setvideomode(-DEFAULTMODE);\par

          /****頁切換和繪制動畫序列****/

          #definePAGE-FLIP(v)\par

          \parif(v==0)v=1;\par

          elsev=0;\par

          -setactivepage(v);\par

          -clearscreen(-GCLEARSCREEN);\par

          -settextposition(1,16);\par

          -outtext(\par"Example:

          MultiplePageAnimation");\par

          draw-frame(current-frame,px,py);\par

          -setvisualpage(page);\par

          create-delay(HALF-SECOND);\par

          intpx,py;/*Currentcharacterposition.*/

          intpage;/*Currentpagedisplayed.*/

          intcurrent-frame;/*Currentframedisplayed.*/

          main()

          SETUP-DISPLAY

          cycle-frames();

          EXIT-TO-DOS

          cycle-frames()

          current-frame=0;

          px=0;

          py=85;

          page=0;

          while(px<=MAX-X)

          current-frame++;

          if(current-frame>LAST-FRAME)

          current-frame=2;

          PAGE-FLIP(page)

          px=px+DELTA-X;

          current-frame=1;

          PAGE-FLIP(page)

          draw-frame(frame,x,y)

          intframe,x,y;

          switch(frame)

          case1:

          frame-1(DRAW,x,y);

          break;

          case2:

          frame-2(DRAW,x,y);

          break;

          case3:

          frame-3(DRAW,x,y);

          break;

          case4:

          frame-4(DRAW,x,y);

          break;

          create-delay(td)

          /**同BorlandC++中的delay(td)函數**/

          inttd;

          time-tts1,ts2;

          ts2=ts1=clock();

          while(ts1+td>ts2)

          ts2=clock();

          文檔上傳者

          相關期刊

          當代動畫

          部級期刊 審核時間1個月內

          國家電影局

          動動畫世界

          部級期刊 審核時間1個月內

          宋慶齡基金會