新聞中心

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

        如何制作動畫程序

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

        ■前言

        本文引用地址:http://www.104case.com/article/149130.htm

        在前一講中我們講述了利用低級API圖表應用的方法。如果僅僅是圖表內容的表示,那么在WEB上就可以用靜止的頁面表示。但是在手機應用中表示的話,就能讓圖表內容具有動感。這就是應用與WEB的區別,這也正是其優點所在。在本講中我們將進一步講述在手機應用程序中,并詳細介紹其具體操作方法。

        ■4-1

        基本上,能夠表現出文字、圖形、圖片等的描繪位置和畫面自身的連續變化。目前的程序中,按下按鍵,就會實行既定的方法。直到實行完既定方法之后才能進行其他方法操作。但是,表示動畫過程中,不實行動畫表示以外的方法就沒有什么意義,因此應該有必要在表示動畫的同時也可以實行其他的方法。所以掌握線程和計時器技術的知識和應用是必不可少的。接下來,我們將詳細介紹線程和計時器。

        ■4-1-1線程

        線程是執行程序的最小單位,用來執行Standalone的Java應用程序的main()方法。當你需要同步執行多個操作,可以用多線程并發執行。使用這種線程的程序被稱為“多線程程序”。

        ■4-1-1-1線程的使用

        首先我們盡快學習怎樣使用“線程”。有兩種方法能使用線程:Runnable接口的使用方法和Thread類的繼承類的定義方法。在此,我們使用前一個方法—實現Runnable接口的方法。

        實現Runnable接口的類必須要覆蓋run()方法。覆蓋的run()方法中記述了用線程執行的處理。(ex.1)

        classTestCanvasextendsCanvasimplementsRunnable{

        /**

        *線程執行的處理

        **/

        publicvoidrun(){

        //記述處理

        .

        .

        }

        /**

        *描繪方法

        **/

        publicvoidpaint(Graphicsg){

        //描繪處理

        .

        .

        }

        }

        ex.1

        另外一種方法是使用線程類Thread。如下所示:用構造函數傳遞一個參數到該類的實例,該參數是實現Runnable接口的。使用start()方法就啟動該線程了。(ex.2)

        Runnablerunnable=newTestCanvas();//實現Runnable類

        Threadthread=newThread(runnable);

        thread.start();

        ex.2

        ■4-1-1-2簡單的動畫

        接著我們來看線程被用于制作簡單的動畫。在下面的實例中,球從左向右運動。(ex.3)

        importjavax.microedition.lcdui.Display;

        importjavax.microedition.midlet.MIDlet;

        importjavax.microedition.midlet.MIDletStateChangeException;

        /**

        *球飛出去的實例動畫

        */

        publicclassMovingBallextendsMIDlet{

        privateDisplaydisplay;

        privateMovingBallCanvascanvas;

        /**

        *構造函數

        */

        publicMovingBall(){

        display=Display.getDisplay(this);

        canvas=newMovingBallCanvas();

        }

        /**

        *運行時的處理

        */

        protectedvoidstartApp()throwsMIDletStateChangeException{

        display.setCurrent(canvas);

        }

        protectedvoidpauseApp(){}

        protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}

        }

        importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Graphics;

        /**

        *球飛出去的實例動畫的canvas。

        */

        publicclassMovingBallCanvasextendsCanvasimplementsRunnable{

        privateintx;//球的X坐標

        /**

        *構造函數

        */

        publicMovingBallCanvas(){

        Threadth=newThread(this);

        th.start();

        }

        /**

        *線程運行的處理

        */

        publicvoidrun(){

        while(true){

        x+=3;//更改球的坐標

        repaint();//再次描繪

        try{

        Thread.sleep(100);//100毫秒待機

        }catch(InterruptedExceptione){

        }

        }

        }

        /**

        *描繪方法

        */

        protectedvoidpaint(Graphicsg){

        //清除畫面

        g.setColor(255,255,255);//白色

        g.fillRect(0,0,getWidth(),getHeight());

        //表示球

        g.setColor(255,0,0);

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

        }

        }

        Figure1

        ■4-1-1-3線程的待機處理

        ■4-1-1-3線程的待機處理

        我們看看run()是如何支持等待機制的。如果沒有任何等待,球會迅速從左向右飛而我們無法察覺。為此,執行Thread中的靜態方法sleep。在其參數中指定等待時間(單位毫秒)。(ex.4)

        Figure1

        4-1-1

        -3線程的待機處理

        我們看看run()是如何支持等待機制的。如果沒有任何等待,球會迅速從左向右飛而我們無法察覺。為此,執行Thread中的靜態方法sleep。在其參數中指定等待時間(單位毫秒)。(ex.4)

        Thread.sleep(100);//100毫秒待機

        ex.4

        如此例所示,處理和處理之間能夠待機100毫秒,按另外觀點看,與在100毫秒的定期間隔下運行處理是一樣的。定期間隔下的處理,使用名為Timer的類同樣能夠實現。下面說明一下Timer。

        ■4-1-2Timer

        JAVA提供了計時器功能,它能有規則地、重復地執行或者在指定時間里執行。線程的運算可以是連續的,而不僅僅是按規則的進度。計時器的便利在于系統已經為你準備好特定的方法用于在指定時間或定時執行。

        ■4-1-2-1時間的使用

        Timer類和TimerTask類能夠實現計時器的功能。

        實例化一個TIMER的類,再調用一個繼承了TIMERTASK的類做SCHEDULE。這樣,TimerTask子類的run()就會在指定時間或周期被Timer實例呼叫。(表1)


        上一頁 1 2 3 4 5 下一頁

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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 万盛区| 玛沁县| 太原市| 石阡县| 衡水市| 张掖市| 石棉县| 嘉荫县| 江陵县| 千阳县| 博客| 康保县| 长治市| 永新县| 汉寿县| 泌阳县| 芒康县| 通河县| 新民市| 五莲县| 兴宁市| 安徽省| 芮城县| 绥德县| 濉溪县| 呼伦贝尔市| 荣成市| 宁河县| 加查县| 东台市| 房山区| 洪泽县| 旺苍县| 西城区| 抚州市| 永川市| 遵义市| 焦作市| 江永县| 南漳县| 花垣县|