国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java動畫及自動瀏覽圖片程序的開發

2019-11-18 14:15:05
字體:
來源:轉載
供稿:網友

  郭圣文



摘要 本文介紹了java文字及圖象動畫的實現方法,并討論了如何采用雙緩沖技術來消除畫面的閃爍現象,在此基礎之上,開發了一個自動瀏覽圖片程序。

要害詞 Java動畫 雙緩沖技術 自動瀏覽圖片



電影和電視的畫面可以理解為一種動畫顯示,它們一般以每秒24幀的速度顯示圖象,利用人眼的暫停效應,產生一個連續的動作顯示過程。因此,動畫的本質是運動的圖形,只要動畫的速度(幀速度)足夠快,則分散的的靜態圖形就會合并為一個連續運動的流程。

Java動畫的實現,首先用Java.awt包中Graphics類的drawImage()方法在屏幕畫出圖象,然后通過定義一個線程,讓該線程睡眠一段時間,到時后再切換成另外一幅圖象,如此循環,從而達到顯示動畫的目的。

1 有關概念、類及方法

1.1 線程

Java的重要特性之一是其支持多線程的程序設計。在傳統的程序設計中,要執行多任務是通過定時器中斷等方法,定時監控多個任務的執行情況,采用任務中斷切換的方式來輪換執行各個任務,從而達到多任務并發目的。這種方法一方面消耗了大量的內存空間和cpu資源,另一方面會帶來系統安全性的問題。而線程作為程序的一個執行流,在某一瞬間可被看成計算過程的一種狀態,它比進程更小,并發程度更高,因此也稱為輕進程。線程是cpu調度的基本單元,而進程是資源分配的基本單元,線程的引入可以提高系統的吞吐量、提高任務之間的通訊效率、有效利用系統資源。

?線程的創建

線程創建有兩種方法,一種是用new產生一個Thread類對象,另外一種方法是實現Runnable接口。在需要實現多繼續,并且又要建立多線程時,只能采用Runnable接口方法。我們這里采用第一種方法:

ThreadName=new Thread

?sleep(long)

讓線程睡眠一定時間不動作,參數單位為千分之一秒。

?suspend()

掛起線程,暫停其執行。

?resume()

喚醒掛起的線程。

1.2 ToolKit類

它提供了AWT與平臺相關類和無關類之間的鏈接,提供了幾種方法來訪問與設備相關的一些特征。如從URL或本地系統中檢索圖象、獲取屏幕的顯示特征等。在程序中定義一個ToolKit類:ToolKit=getToolKit();

1.3 MediaTracker類

提供了治理圖象文件加載的能力。方法StatusID(int id,boolean load)的作用是檢測加載圖象文件的狀態(ABORTED,COMPLETE,ERRORED,LOADING),當檢測到狀態為COMPLETE時,說明圖象加載完成。

2 文字動畫

文字動畫的實現程序比較簡單,首先,用new方法創建一個新進程,用drawString()方法在屏幕顯示相應文字,然后讓進程睡眠一定時間,時間到后,改變文字顯示位置,再重顯文字。其中包含一個邊界判定,重設坐標的過程,如此往復實現文字動畫。程序運行后,在屏幕中心顯示"歡迎進入動畫世界!",每隔0.15秒向左移動一次,直到屏幕最左端又重新開始顯示。具體程序見程序1(Applet小程序)。

3 圖象動畫

圖象動畫的實現方法與文字相似,只不過定義了一個Image數組,運用getImage()方法裝載相應圖象文件到該數組中。程序運行后,可見到一個可愛的小精靈在作拋球動作。另外,基于程序交互性的考慮,增加了兩個事件的響應動作,一個是WINDOW_DESTROY,即關閉運行窗口,正常返回。另外一個是MOUSE_DOWN,當鼠標左按鈕按下時,暫停線程以便讓畫面靜止,再按一次左按鈕,恢復暫停線程,繼續顯示下一幅畫面。

假如將程序中的小精靈圖象文件換成圖片,并增加延遲時間,則可以實現圖片的自動切換,變為自動瀏覽圖片程序,源程序見程序2,

4 動畫質量的改善

上一程序的運行后,我們發現了兩個問題。第一是程序在圖象完全加載之前就開始顯示,出現切換過快現象。第二是畫面閃爍。

對于前一個問題,可以用Java.awt包中的MediaTracker類來解決,當StatusID()方法返回值為COMPLETE時,說明所有的圖象文件加載完畢,此時才開始顯示畫面。

第二個問題,解決起來要復雜一些。閃爍產生的原因是,在paint()方法中假如計算較為復雜,計算和繪制畫面的時間超過了屏幕的刷新周期,則幀的第一部分在一個刷新周期中繪制,其余部分在下一個、甚至更后的周期繪制,這樣,在幀的不同部分之間產生時間間隔,由此造成閃爍。解決途徑之一是重載update()方法,update()的缺省實現是清除原來背景,然后調用paint()方法。因此通過重載update(),只有在必要時才清除整個背景。

解決途徑之二是采用雙緩沖技術,雙緩沖技術是在后臺圖形區內創建一個圖形對象,將需要繪制的圖象繪于其上,然后傳給paint()方法,由paint()方法繪于前臺,同時,后臺圖形緩沖區進入下一幀圖象的預備。圖1為雙緩沖技術示意圖。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南汇区| 曲周县| 锡林浩特市| 蒙自县| 安义县| 新泰市| 达日县| 许昌县| 确山县| 堆龙德庆县| 临武县| 沈阳市| 孝义市| 铁岭县| 潞城市| 海丰县| 安乡县| 十堰市| 麻城市| 宁陕县| 拜泉县| 北流市| 邹城市| 榆树市| 西盟| 北京市| 蒲江县| 策勒县| 温泉县| 晋宁县| 通河县| 福建省| 秦安县| 奇台县| 建宁县| 龙口市| 新民市| 屯留县| 平定县| 六安市| 福州市|