<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何制作動(dòng)畫程序

          如何制作動(dòng)畫程序

          作者: 時(shí)間:2012-05-07 來源:網(wǎng)絡(luò) 收藏

          360截圖20120507112220625.jpg

          Table1

          Timer

          在Timer類中主要使用下面的方法。

          •voidschedule(TimerTasktask,Datedate)

          •voidschedule(TimerTasktask,Datedate,longperiod)

          •voidschedule(TimerTasktask,longdelay)

          •voidschedule(TimerTasktask,longdelay,longperiod)

          •voidcancel()

          這些schedule方法用于設(shè)定任務(wù)及何時(shí)執(zhí)行。若不設(shè)定第三個(gè)自變量period,在第二個(gè)自變量所指定的時(shí)間任務(wù)只執(zhí)行一次。否則第二個(gè)自變量所指定的時(shí)間之后,任務(wù)會(huì)反復(fù)執(zhí)行,自變量period是反復(fù)執(zhí)行時(shí)的延時(shí)。另外,呼叫出cancel方法,則會(huì)結(jié)束計(jì)時(shí)器

          TimerTask

          TimerTask是抽象類。需要定義其子類。在所繼承的類中必須重載抽象方法run(),必須根據(jù)計(jì)時(shí)器的schedule定義具體的操作。

          在TimerTask類中主要使用如下的方法。

          •abstractvoidrun()

          •voidcancel()

          按照Timer類中所設(shè)定的schedule執(zhí)行run()方法。用cancel()方法能夠結(jié)束任務(wù)。

          現(xiàn)在來看看用線程實(shí)現(xiàn)的圓球運(yùn)動(dòng)的--在這里我們也可以使用計(jì)時(shí)器來實(shí)現(xiàn)。如下所示:(ex.5)

          importjavax.microedition.lcdui.Display;

          importjavax.microedition.midlet.*;

          /**

          *球飛出去的實(shí)例計(jì)時(shí)器版

          */

          publicclassTimerMovingBallextendsMIDlet{

          privateDisplaydisplay;

          privateTimerMovingBallCanvascanvas;

          /**

          *構(gòu)造函數(shù)

          */

          publicTimerMovingBall(){

          display=Display.getDisplay(this);

          canvas=newTimerMovingBallCanvas();

          }

          /**

          *運(yùn)行時(shí)的處理

          */

          protectedvoidstartApp()throwsMIDletStateChangeException{

          display.setCurrent(canvas);

          }

          protectedvoidpauseApp(){}

          protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

          }

          importjava.util.*;

          importjavax.microedition.lcdui.*;

          /**

          *球飛出去的實(shí)例的canvas。

          */

          publicclassTimerMovingBallCanvasextendsCanvas{

          privateintx;//球的x坐標(biāo)

          privateImageimg;

          privateTimertimer;

          privateTimerTasktask;

          /**

          *構(gòu)造函數(shù)

          */

          publicTimerMovingBallCanvas(){

          //讀取畫像

          try{

          img=Image.createImage(/back.PNG);

          }catch(Exceptione){

          e.printStackTrace();

          }

          //Timer,TimerTask的設(shè)定

          timer=newTimer();

          task=newTimerMovingBallTask(this);

          timer.schedule(task,100,100);

          //從第101毫秒開始在每100毫秒運(yùn)行任務(wù)

          }

          /**

          *描繪方法

          */

          protectedvoidpaint(Graphicsg){

          g.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);

          //表示球

          g.setColor(255,0,0);

          g.drawString(“withTimer”,0,0,Graphics.TOP|Graphics.LEFT);

          g.fillArc(x,50,40,40,0,360);

          }

          /**

          *能夠變化球的X坐標(biāo)

          */

          publicvoidincrement(){

          x+=3;

          }

          }

          /**

          *計(jì)時(shí)器任務(wù)根據(jù)計(jì)時(shí)器所設(shè)定的時(shí)間表,運(yùn)行run()方法。

          */

          classTimerMovingBallTaskextendsTimerTask{

          privateTimerMovingBallCanvascanvas;

          /**

          *構(gòu)造函數(shù)

          */

          publicTimerMovingBallTask(TimerMovingBallCanvascanvas){

          this.canvas=canvas;

          }

          /**

          *呼叫計(jì)時(shí)器時(shí)所進(jìn)行的處理

          */

          publicvoidrun(){

          canvas.increment();

          canvas.repaint();

          }

          }

          ex.5

          TimerMovingCanvas類的構(gòu)造函數(shù)中進(jìn)行下面的計(jì)時(shí)器設(shè)定。

          //Timer,TimerTask的設(shè)定

          timer=newTimer();

          task=newTimerMovingBallTask(this);

          timer.schedule(task,100,100);//從第101毫秒開始在每100毫秒運(yùn)行任務(wù)

          在TimerMovingBallTask中,從TimerTask繼承的run()被調(diào)用,X坐標(biāo)的遞增使得球運(yùn)動(dòng)起來。這樣有規(guī)律地使X坐標(biāo)遞增,就使得圓球在畫面上從左到右移動(dòng)。(圖2)。

          publicvoidrun(){

          canvas.increment();

          canvas.repaint();

          }

          2

          ■雙緩沖

          一旦進(jìn)行動(dòng)畫就要頻繁地反復(fù)操作描繪處理,畫面處理中可能會(huì)突然發(fā)生屏幕閃爍。為了能夠控制屏幕的閃爍,一般會(huì)使用雙緩沖的手法。用雙緩沖存儲(chǔ)器并不是直接在畫面上進(jìn)行描繪,而是在被稱為屏幕外畫像的虛擬畫像上描繪全部之后,由于是表示畫面,所以能控制屏幕的閃爍。(圖3)

          Figure3

          根據(jù)手機(jī)機(jī)種的不同,事先將Canvas類與雙緩沖存儲(chǔ)器相對(duì)應(yīng)的情況也是有的。換言之,即使實(shí)現(xiàn)方?jīng)]有明確地定義雙緩沖存儲(chǔ)器,則在用雙緩沖存儲(chǔ)器的機(jī)制進(jìn)行描繪的情況下,沒必要特別關(guān)心閃爍的解決方案,但是要在不同的機(jī)型上運(yùn)行。N800的機(jī)型已經(jīng)能適應(yīng)此雙緩沖存儲(chǔ)器。為此,開發(fā)N800應(yīng)用的時(shí)候,有時(shí)會(huì)有必要在這闡述雙緩沖存儲(chǔ)器的處理。此時(shí),應(yīng)該知道終端是否適應(yīng)雙緩沖存儲(chǔ)器、以及是否有必要分開處理。



          關(guān)鍵詞: 程序 動(dòng)畫 制作 如何

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();