利用JavaApplet編程實現動畫特技
Java 不僅提供了對圖形、圖像的支持,還允許用戶實現連續的圖像播放,即動畫技術。Java 動畫的實現,首先用Java.awt 包中的 Graphics 類的drawImage()方法在屏幕上畫出圖像,然后通過定義一個線程,讓該線程睡眠一段時間,然后再切換成另外一幅圖像;如此循環,在屏幕上畫出一系列的幀來造成運動的感覺,從而達到顯示動畫的目的。
為了每秒鐘多次更新屏幕,必須創建一個線程來實現動畫的循環,這個循環要跟蹤當前幀并響應周期性的屏幕更新要求;實現線程的方法有兩種,可以創建一個類Thread 的派生類,或附和在一個Runnable 的界面上。
* 動畫技巧
在編寫動畫過程時,遇到最常見的問題是屏幕會出現閃爍現象。閃爍有兩個原因:一是繪制每一幀花費的時間太長(因為重繪時要求的計算量大);二是在每次調用Pain()前,Java 會用背景顏色重畫整個畫面,當在進行下一幀的計算時,用戶看到的是背景。
有兩種方法可以明顯地減弱閃爍:重載 update()或使用雙緩沖。
(1) 重載 update()
當AWT接收到一個applet的重繪請求時,它就調用applet的 update(),默認地,update() 清除applet的背景,然后調用 paint()。重載 update(),將以前在paint()中的繪圖代碼包含在update()中,從而避免每次重繪時將整個區域清除。下面是 update()方法的原始程序代碼:
所以要消除畫面閃爍就一定要改寫 update() 方法,使該方法不會清除整個畫面,只是消除必要的部分。
為了每秒鐘多次更新屏幕,必須創建一個線程來實現動畫的循環,這個循環要跟蹤當前幀并響應周期性的屏幕更新要求;實現線程的方法有兩種,可以創建一個類Thread 的派生類,或附和在一個Runnable 的界面上。
* 動畫技巧
在編寫動畫過程時,遇到最常見的問題是屏幕會出現閃爍現象。閃爍有兩個原因:一是繪制每一幀花費的時間太長(因為重繪時要求的計算量大);二是在每次調用Pain()前,Java 會用背景顏色重畫整個畫面,當在進行下一幀的計算時,用戶看到的是背景。
有兩種方法可以明顯地減弱閃爍:重載 update()或使用雙緩沖。
(1) 重載 update()
當AWT接收到一個applet的重繪請求時,它就調用applet的 update(),默認地,update() 清除applet的背景,然后調用 paint()。重載 update(),將以前在paint()中的繪圖代碼包含在update()中,從而避免每次重繪時將整個區域清除。下面是 update()方法的原始程序代碼:
| public void update(Graphics g) { //首先用背景色來繪制整個畫面 g.setColor(getBackGround()); g.fillRect(0,0,width,height); //接著設置前景色為繪制圖像的顏色,然后調用paint()方法 g.setColor(getForeGround()); paint(g); } |
所以要消除畫面閃爍就一定要改寫 update() 方法,使該方法不會清除整個畫面,只是消除必要的部分。