新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何制作動畫程序

        如何制作動畫程序

        作者: 時間:2012-05-07 來源:網絡 收藏

        360截圖20120507112220625.jpg

        Table1

        Timer

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

        •voidschedule(TimerTasktask,Datedate)

        •voidschedule(TimerTasktask,Datedate,longperiod)

        •voidschedule(TimerTasktask,longdelay)

        •voidschedule(TimerTasktask,longdelay,longperiod)

        •voidcancel()

        這些schedule方法用于設定任務及何時執行。若不設定第三個自變量period,在第二個自變量所指定的時間任務只執行一次。否則第二個自變量所指定的時間之后,任務會反復執行,自變量period是反復執行時的延時。另外,呼叫出cancel方法,則會結束計時器

        TimerTask

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

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

        •abstractvoidrun()

        •voidcancel()

        按照Timer類中所設定的schedule執行run()方法。用cancel()方法能夠結束任務。

        現在來看看用線程實現的圓球運動的--在這里我們也可以使用計時器來實現。如下所示:(ex.5)

        importjavax.microedition.lcdui.Display;

        importjavax.microedition.midlet.*;

        /**

        *球飛出去的實例計時器版

        */

        publicclassTimerMovingBallextendsMIDlet{

        privateDisplaydisplay;

        privateTimerMovingBallCanvascanvas;

        /**

        *構造函數

        */

        publicTimerMovingBall(){

        display=Display.getDisplay(this);

        canvas=newTimerMovingBallCanvas();

        }

        /**

        *運行時的處理

        */

        protectedvoidstartApp()throwsMIDletStateChangeException{

        display.setCurrent(canvas);

        }

        protectedvoidpauseApp(){}

        protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

        }

        importjava.util.*;

        importjavax.microedition.lcdui.*;

        /**

        *球飛出去的實例的canvas。

        */

        publicclassTimerMovingBallCanvasextendsCanvas{

        privateintx;//球的x坐標

        privateImageimg;

        privateTimertimer;

        privateTimerTasktask;

        /**

        *構造函數

        */

        publicTimerMovingBallCanvas(){

        //讀取畫像

        try{

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

        }catch(Exceptione){

        e.printStackTrace();

        }

        //Timer,TimerTask的設定

        timer=newTimer();

        task=newTimerMovingBallTask(this);

        timer.schedule(task,100,100);

        //從第101毫秒開始在每100毫秒運行任務

        }

        /**

        *描繪方法

        */

        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坐標

        */

        publicvoidincrement(){

        x+=3;

        }

        }

        /**

        *計時器任務根據計時器所設定的時間表,運行run()方法。

        */

        classTimerMovingBallTaskextendsTimerTask{

        privateTimerMovingBallCanvascanvas;

        /**

        *構造函數

        */

        publicTimerMovingBallTask(TimerMovingBallCanvascanvas){

        this.canvas=canvas;

        }

        /**

        *呼叫計時器時所進行的處理

        */

        publicvoidrun(){

        canvas.increment();

        canvas.repaint();

        }

        }

        ex.5

        TimerMovingCanvas類的構造函數中進行下面的計時器設定。

        //Timer,TimerTask的設定

        timer=newTimer();

        task=newTimerMovingBallTask(this);

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

        在TimerMovingBallTask中,從TimerTask繼承的run()被調用,X坐標的遞增使得球運動起來。這樣有規律地使X坐標遞增,就使得圓球在畫面上從左到右移動。(圖2)。

        publicvoidrun(){

        canvas.increment();

        canvas.repaint();

        }

        2

        ■雙緩沖

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

        Figure3

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



        關鍵詞: 程序 動畫 制作 如何

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绥滨县| 进贤县| 云浮市| 聂拉木县| 那曲县| 梅河口市| 蛟河市| 济阳县| 筠连县| 蒲城县| 灌云县| 修水县| 通河县| 清徐县| 依安县| 龙海市| 砀山县| 邹城市| 崇义县| 五台县| 乌审旗| 奉节县| 青浦区| 昌平区| 蓬溪县| 依兰县| 井研县| 大名县| 德钦县| 和顺县| 梁平县| 刚察县| 开化县| 谢通门县| 健康| 建瓯市| 邹平县| 永善县| 苗栗市| 尼勒克县| 凉城县|