- 首頁|
- 網(wǎng)校|
- 焚題庫|
- APP |
-
微信公眾號(hào)
Java 不僅提供了對(duì)圖形、圖像的支持,還允許用戶實(shí)現(xiàn)連續(xù)的圖像播放,即動(dòng)畫技術(shù)。Java 動(dòng)畫的實(shí)現(xiàn),首先用Java.awt 包中的 Graphics 類的drawImage()方法在屏幕上畫出圖像,然后通過定義一個(gè)線程,讓該線程睡眠一段時(shí)間,然后再切換成另外一幅圖像;如此循環(huán),在屏幕上畫出一系 列的幀來造成運(yùn)動(dòng)的感覺,從而達(dá)到顯示動(dòng)畫的目的。
為了每秒鐘多次更新屏幕,必須創(chuàng)建一個(gè)線程來實(shí)現(xiàn)動(dòng)畫的循環(huán),這個(gè)循環(huán)要跟蹤當(dāng)前幀并響應(yīng)周期性的屏幕更新要求;實(shí)現(xiàn)線程的方法有兩種,可以創(chuàng)建一個(gè)類Thread 的派生類,或附和在一個(gè)Runnable 的界面上。
* 動(dòng)畫技巧
在編寫動(dòng)畫過程時(shí),遇到最常見的問題是屏幕會(huì)出現(xiàn)閃爍現(xiàn)象。閃爍有兩個(gè)原因:一是繪制每一幀花費(fèi)的時(shí)間太長(因?yàn)橹乩L時(shí)要求的計(jì)算量大);二是在每次調(diào)用Pain()前,Java 會(huì)用背景顏色重畫整個(gè)畫面,當(dāng)在進(jìn)行下一幀的計(jì)算時(shí),用戶看到的是背景。
有兩種方法可以明顯地減弱閃爍:重載 update()或使用雙緩沖。
(1) 重載 update()
當(dāng)AWT接收到一個(gè)applet的重繪請(qǐng)求時(shí),它就調(diào)用applet的 update(),默認(rèn)地,update() 清除applet的背景,然后調(diào)用 paint()。重載 update(),將以前在paint()中的繪圖代碼包含在update()中,從而避免每次重繪時(shí)將整個(gè)區(qū)域清除。下面是 update()方法的原始程序代碼:
public void update(Graphics g)
{
//首先用背景色來繪制整個(gè)畫面
g.setColor(getBackGround());
g.fillRect(0,0,width,height);
//接著設(shè)置前景色為繪制圖像的顏色,然后調(diào)用paint()方法
g.setColor(getForeGround());
paint(g);
}
所以要消除畫面閃爍就一定要改寫 update() 方法,使該方法不會(huì)清除整個(gè)畫面,只是消除必要的部分。
(2) 使用雙緩沖技術(shù)
另一種減小幀之間閃爍的方法是使用雙緩沖,它在許多動(dòng)畫 Applet中被使用。其主要原理是創(chuàng)建一個(gè)后臺(tái)圖像,將需要繪制的一幀畫入圖像,然后調(diào)用DrawImage()將整個(gè)圖像一次畫到屏幕上去;好處是大 部分繪制是離屏的,將離屏圖像一次繪至屏幕上比直接在屏幕上繪制要有效得多,大大提高做圖的性能。
雙緩沖可以使動(dòng)畫平滑,但有一個(gè)缺點(diǎn),要分配一張后臺(tái)圖像,如果圖像相當(dāng)大,這將需要很大一塊內(nèi)存;當(dāng)你使用雙緩沖技術(shù)時(shí),應(yīng)重載 update()。
下面舉一個(gè)時(shí)鐘的例子來說明如何處理動(dòng)畫
//AnimatorDemo.java
import java.util.*;
import java.awt.*;
import java.applet.*;
import java.text.*;
public class AnimatorDemo extends Applet implements Runnable
填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽java課程!害怕學(xué)不會(huì)?助教陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國推薦就業(yè)!
{
Thread timer; // 用于顯示時(shí)鐘的線程
int lastxs, lastys, lastxm,
lastym, lastxh, lastyh;
SimpleDateFormat formatter; //格式化時(shí)間顯示
String lastdate; // 保存當(dāng)前時(shí)間的字符串
Font clockFaceFont; //設(shè)置顯示時(shí)鐘里面的數(shù)字的字體
Date currentDate; // 顯示當(dāng)前時(shí)間
Color handColor; // 用于顯示時(shí)針、分針和表盤的顏色
Color numberColor; // 用于顯示秒針和數(shù)字的顏色
public void init()
{
int x,y;
lastxs = lastys = lastxm = lastym = lastxh = lasty
上一篇:JavaApplet實(shí)現(xiàn)聲音和圖像的協(xié)調(diào)
下一篇: 沒有了
初級(jí)會(huì)計(jì)職稱中級(jí)會(huì)計(jì)職稱經(jīng)濟(jì)師注冊(cè)會(huì)計(jì)師證券從業(yè)銀行從業(yè)會(huì)計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級(jí)會(huì)計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評(píng)估師國際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級(jí)建造師二級(jí)建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測(cè)工程師建筑八大員注冊(cè)建筑師二級(jí)造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評(píng)價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會(huì)工作者司法考試職稱計(jì)算機(jī)營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級(jí)職稱護(hù)士資格證初級(jí)護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論