新聞中心

如何制作動畫程序

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

■前言

本文引用地址:http://m.butianyuan.cn/article/149130.htm

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

■4-1

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

■4-1-1線程

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

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

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

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

classTestCanvasextendsCanvasimplementsRunnable{

/**

*線程執(zhí)行的處理

**/

publicvoidrun(){

//記述處理

.

.

}

/**

*描繪方法

**/

publicvoidpaint(Graphicsg){

//描繪處理

.

.

}

}

ex.1

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

Runnablerunnable=newTestCanvas();//實現(xiàn)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;

/**

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

*/

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

/**

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

*/

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()是如何支持等待機制的。如果沒有任何等待,球會迅速從左向右飛而我們無法察覺。為此,執(zhí)行Thread中的靜態(tài)方法sleep。在其參數(shù)中指定等待時間(單位毫秒)。(ex.4)

Figure1

4-1-1

-3線程的待機處理

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

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

ex.4

如此例所示,處理和處理之間能夠待機100毫秒,按另外觀點看,與在100毫秒的定期間隔下運行處理是一樣的。定期間隔下的處理,使用名為Timer的類同樣能夠?qū)崿F(xiàn)。下面說明一下Timer。

■4-1-2Timer

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

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

Timer類和TimerTask類能夠?qū)崿F(xiàn)計時器的功能。

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


上一頁 1 2 3 4 5 下一頁

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

評論


相關(guān)推薦

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

關(guān)閉