




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第9章 多媒體與圖形學(xué)程序設(shè)計JAVA授課教師:趙小敏授課教師:趙小敏浙江工業(yè)大學(xué)浙江工業(yè)大學(xué) 軟件學(xué)院軟件學(xué)院Java程序設(shè)計 2005 趙小敏第9章 多媒體與圖形學(xué)程序設(shè)計主要內(nèi)容:一、聲音播放一、聲音播放二、二、圖圖像像顯顯示示三、三、圖圖形形處處理理四、四、動動畫畫處處理理 2005 趙小敏一、聲音播放1、加、加載載聲音文件聲音文件在在Applet中播放聲音十分中播放聲音十分簡單簡單,加,加載載聲音文件,然后聲音文件,然后調(diào)調(diào)用用play方法播放即可。方法播放即可。Java提供了兩種播放聲音的方式:提供了兩種播放聲音的方式:一種是通一種是通過過Applet類類的的play方法,一種是通
2、方法,一種是通過過AudioClip接口中的方法來播放。接口中的方法來播放。Applet的的play方法可方法可以將聲音文件的加以將聲音文件的加載載與播放一并完成,其與播放一并完成,其調(diào)調(diào)用格式如下:用格式如下: void play(URL url) void play(URL url, String name) 2005 趙小敏加加載載聲音文件聲音文件其中其中URL是一個網(wǎng)是一個網(wǎng)絡(luò)絡(luò)地址,網(wǎng)地址,網(wǎng)絡(luò)絡(luò)地址若包含聲音文件地址若包含聲音文件可采用第一種形式,否可采用第一種形式,否則則采用第二種形式,播放本地采用第二種形式,播放本地計計算機(jī)上的聲音文件也可采用第二種形式。假算機(jī)上的聲音文件也可
3、采用第二種形式。假設(shè)設(shè)有一個有一個MIDI聲音文件聲音文件trip.mid和和Applet放在同一個目放在同一個目錄錄下,下,采用如下采用如下調(diào)調(diào)用格式即可播放:用格式即可播放:play(getCodeBase( ),trip.mid);Applet的的getAudioClip方法可方法可創(chuàng)創(chuàng)建建這樣這樣的的對對象,象,該該方方法加法加載載指定網(wǎng)指定網(wǎng)絡(luò)絡(luò)地址的聲音文件,并返回一個地址的聲音文件,并返回一個AudioClip對對象,象,調(diào)調(diào)用格式如下:用格式如下: AudioClip getAudioClip(URL url) AudioClip getAudioClip(URL url, S
4、tring name) 2005 趙小敏加加載載聲音文件聲音文件創(chuàng)創(chuàng)建建AudioClip對對象后,聲音文件即被加象后,聲音文件即被加載載,可,可調(diào)調(diào)用它用它的方法的方法處處理聲音文件。如果理聲音文件。如果該該方法沒有找到指定的聲音方法沒有找到指定的聲音文件,將返回文件,將返回null值值,此,此時時不能引用所不能引用所創(chuàng)創(chuàng)建的建的對對象。象。AudioClip只有只有3個方法:個方法: void play()播放一遍;播放一遍; void loop()連續(xù)連續(xù)播放;播放; void stop()停止播放。停止播放。 2005 趙小敏在在Applet中播放聲音中播放聲音本地本地計計算機(jī)工作目算
5、機(jī)工作目錄錄下有下有4個聲音文件,代表個聲音文件,代表了了.au 、 、 .mid、 、 .wav種聲音格式,加種聲音格式,加載載并播并播放放這這些聲音文件。些聲音文件。結(jié)結(jié)果如下果如下圖圖所示所示: 2005 趙小敏例1程序源碼: J_Audio.java1.import java.applet.*;2.import java.awt.*;3.import java.awt.event.*;4.import javax.swing.*;5.public class J_Audio extends JApplet implements ActionListener, ItemListener6
6、. private AudioClip m_soundFirst, m_soundSecond,m_soundThird,7. m_soundFourth, m_soundCurrent;8. private JButton m_buttonPlay, m_buttonLoop, m_buttonStop;9. private JComboBox m_comboChoose;10. public void init( ) / Build interfaces and set sounds11. Container container = getContentPane( );12. contai
7、ner.setLayout( new FlowLayout( ) ); 2005 趙小敏12. String choices = hi, bark,PINBALL,BATTVLOW ;13. m_comboChoose = new JComboBox( choices );14. m_comboChoose.addItemListener( this );15. container.add( m_comboChoose );16. m_buttonPlay = new JButton( Play );17. m_buttonPlay.addActionListener( this );18.
8、container.add( m_buttonPlay );19. m_buttonLoop = new JButton( Loop );20. m_buttonLoop.addActionListener( this );21. container.add( m_buttonLoop );22. m_buttonStop = new JButton( Stop );23. m_buttonStop.addActionListener( this );24. container.add( m_buttonStop ); 25. / load sounds and set m_soundCurr
9、ent26. m_soundFirst = getAudioClip( getDocumentBase( ), hi.au );27. m_soundSecond = getAudioClip( getDocumentBase( ), bark.au );28. m_soundThird = getAudioClip( getDocumentBase( ), PINBALL.MID );29. m_soundFourth = getAudioClip( getDocumentBase( ), BATTVLOW.WAV );30. m_soundCurrent = m_soundFirst;31
10、. 2005 趙小敏32.public void stop( ) / Stop playing sound33. m_soundCurrent.stop( );34.35. public void itemStateChanged( ItemEvent e ) 36. m_soundCurrent.stop( );37. switch(m_comboChoose.getSelectedIndex( )38. case 0:m_soundCurrent=m_soundFirst;break;39. case 1:m_soundCurrent=m_soundSecond;break;40. cas
11、e 2:m_soundCurrent=m_soundThird;break;41. case 3:m_soundCurrent=m_soundFourth;break;42. default:m_soundCurrent=m_soundFirst;break;43. 44.45. public void actionPerformed(ActionEvent e)46. if ( e.getSource( ) = m_buttonPlay ) 47. m_soundCurrent.play( );48. else if ( e.getSource( ) = m_buttonLoop ) 49.
12、 m_soundCurrent.loop( );50. else if ( e.getSource( ) = m_buttonStop ) 51. m_soundCurrent.stop( );52. / End of method: actionPerformed53. 2005 趙小敏 二、圖像顯示Java支持兩種支持兩種圖圖像格式像格式JPEG和和GIF。 。JPEG稱稱為聯(lián)為聯(lián)合合圖圖像像專專家家組組( (joint photographic experts group),),可用可用瀏覽瀏覽器打開。器打開。JPEG( (或或JPG) )圖圖像格式一般用來像格式一般用來顯顯示照片和具有
13、示照片和具有連續(xù)連續(xù)色色調(diào)調(diào)的的圖圖像,它能保存像,它能保存圖圖像所有像所有顏顏色信息。色信息。JPEG是一種是一種壓壓縮縮的文件格式,在打開的文件格式,在打開時時自自動動解解壓縮壓縮。 。GIF稱稱為圖為圖像交像交換換格式(格式(graphic interchange format),),可用可用瀏覽瀏覽器打開。器打開。GIF圖圖像是一種像是一種壓縮壓縮文件格式,由于它能最大限度地減少文件文件格式,由于它能最大限度地減少文件轉(zhuǎn)換時間轉(zhuǎn)換時間, ,所以在所以在HTML文件中常用于文件中常用于顯顯示插示插圖圖或或圖標(biāo)圖標(biāo)。 。GIF格式能有效減少文件大小,有利于在格式能有效減少文件大小,有利于在
14、Internet上上使用,使用,Java支持支持這這種種圖圖像格式。像格式。 2005 趙小敏1、加加載圖載圖像像加加載圖載圖像一般放在初始化方法像一般放在初始化方法init中中進(jìn)進(jìn)行。程序中行。程序中的的getImage方法可加方法可加載載Java支持的支持的圖圖像文件,它像文件,它有兩個參數(shù),一個是有兩個參數(shù),一個是圖圖像文件地址,一個是像文件地址,一個是圖圖像文像文件名稱。由于件名稱。由于Applet是面向網(wǎng)是面向網(wǎng)絡(luò)絡(luò)的,因此的,因此圖圖像文件像文件的存的存儲儲位置并不局限于本地位置并不局限于本地計計算機(jī)的磁算機(jī)的磁盤盤目目錄錄,大,大部分情況是直接部分情況是直接讀讀取取Web服服務(wù)務(wù)
15、器上的器上的圖圖像文件。像文件。Java.applet.Applet的成的成員員getImage方法返回方法返回一個一個Image對對象,它的象,它的調(diào)調(diào)用格式用格式為為: : Image getImage(URL url) Image getImage(URL url, String name) 2005 趙小敏2、顯顯示示圖圖像像顯顯示示圖圖像需要像需要調(diào)調(diào)用用Graphics類類的方法的方法drawImage, ,它可以將它可以將Image對對象關(guān)象關(guān)聯(lián)聯(lián)的的圖圖像像顯顯示在示在Applet的指定位置。的指定位置。drawImage方法的方法的調(diào)調(diào)用用格式如下:格式如下: boolean
16、 drawImage(Image img, int x, int y, ImageObserver observer) boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) 2005 趙小敏2、顯顯示示圖圖像像其中其中imgimg就是要顯示的圖像、就是要顯示的圖像、x x和和y y是圖像顯示位置(是圖像顯示位置(x x和和y y可取負(fù)值,表示一部分圖像被移出了顯示區(qū))、可取負(fù)值,表示一部分圖像被移出了顯示區(qū))、bgcolorbgcolor是圖像顯示區(qū)域的背景色、是圖像顯示區(qū)域的背景色、
17、observerobserver是圖像加是圖像加載跟蹤器,通常將該參數(shù)指定為載跟蹤器,通常將該參數(shù)指定為thisthis,即由即由AppletApplet負(fù)負(fù)責(zé)跟蹤圖像的加載情況。責(zé)跟蹤圖像的加載情況。這兩種方法都是將圖像照原樣顯示,能不能對圖像進(jìn)這兩種方法都是將圖像照原樣顯示,能不能對圖像進(jìn)行縮放呢?使用下面兩種調(diào)用格式就可以對圖像進(jìn)行行縮放呢?使用下面兩種調(diào)用格式就可以對圖像進(jìn)行縮放顯示:縮放顯示: boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) boolea
18、n drawImage(Image img, int x, int y, int w, int h, Color c, ImageObserver observer) 2005 趙小敏例2:顯示圖像1.import java.awt.*;2.import javax.swing.*;3.public class J_Image extends JApplet4. Image m_image = new Image2;5. public void init( ) 6. m_image0= getImage(getCodeBase( ), ts1.gif);7. m_image1= getImag
19、e(getCodeBase( ), ts2.gif);8. / End of method: init9. public void paint(Graphics g) 10. g.drawImage(m_image0, 0, 0, 150, 150, this);11. g.drawImage(m_image1, 150, 0, 150, 150, this);12. g.drawImage(m_image0, 0, 150, 300, 150, this);13. / End of method: paint 14. / End of class: J_Image 2005 趙小敏運(yùn)行結(jié)果
20、2005 趙小敏3、幻燈機(jī)效果、幻燈機(jī)效果如果如果Applet 僅僅僅僅是是顯顯示一幅示一幅圖圖像,沒有什么特像,沒有什么特別別的的意意義義,不如直接在,不如直接在HTML文件中文件中顯顯示示圖圖像。像。Applet應(yīng)應(yīng)該該做做HTML做不到的事情,例如像幻燈機(jī)那做不到的事情,例如像幻燈機(jī)那樣連續(xù)顯樣連續(xù)顯示示圖圖像。像。多幅多幅圖圖像的像的顯顯示,如下示,如下圖圖: : 2005 趙小敏例例3:多幅:多幅圖圖像的像的顯顯示示1.import java.awt.*;2.import java.awt.event.*;3.import java.applet.*;4.public class S
21、howDoggy extends Applet 5. int index;6. Image imgs=new Image14;7. public void init()8. addMouseListener(new MouseAdapter() 9. public void mouseClicked(MouseEvent e) 10. index=+index%6;11. repaint();12. 13. ); 14.for (int i=0; i14; i+)15. imgsi=getImage(getCodeBase(),doggy/T+i+.gif);16. 17. public vo
22、id paint(Graphics g)18. if (imgsindex!=null)19. g.drawImage(imgsindex,20,20,this);20. 21. 2005 趙小敏三、圖形處理基本的圖形類:基本的圖形類:ColorColor類:包含控制顏色的方法和常量類:包含控制顏色的方法和常量FontFont類:包含控制字體的方法和常量類:包含控制字體的方法和常量PolygonPolygon類:包含創(chuàng)建多邊形的方法類:包含創(chuàng)建多邊形的方法GraphisGraphis類:包含了繪制字符串、線條、矩形及其它形狀的方法類:包含了繪制字符串、線條、矩形及其它形狀的方法Rectangl
23、eRectangle類:用來繪制矩形類:用來繪制矩形java.awt.geom.CubicCurve2D.Double類:畫拋物線java.awt.geom.Arc2D.Double 類:畫圓弧java.awt.geom.Ellipse2D.Double 類:畫橢圓 2005 趙小敏圖形環(huán)境和圖形對象圖形環(huán)境和圖形對象在在javajava中,圖形環(huán)境使得可以在屏幕上繪圖,中,圖形環(huán)境使得可以在屏幕上繪圖,對各種圖形的顯示通過類Graphics和Graphics2D來完成。GraphicsGraphics對象包含了繪圖方法,字體控制和顏色控制對象包含了繪圖方法,字體控制和顏色控制等等Compon
24、entComponent類的類的paintpaint方法以一個方法以一個GraphicsGraphics對象作為參對象作為參數(shù),在數(shù),在ComponentComponent執(zhí)行執(zhí)行paintpaint操作時,系統(tǒng)將操作時,系統(tǒng)將GraphicsGraphics對象傳送給對象傳送給paintpaint方法。方法。 public void paintpublic void paint(Graphics gGraphics g) 2005 趙小敏顏色控制顏色控制Java APIJava API提供提供ColorColor類定義顏色的方法和常量。類定義顏色的方法和常量。每種顏色都是由紅、綠和籃三種顏色
25、組成,稱為每種顏色都是由紅、綠和籃三種顏色組成,稱為RGBRGB值。一個值。一個RGBRGB值由三個部分,是值由三個部分,是0 0255255的整數(shù)的整數(shù)或或0.01.00.01.0的浮點(diǎn)數(shù)。的浮點(diǎn)數(shù)。RGBRGB值越大,相應(yīng)顏色的含值越大,相應(yīng)顏色的含量越大。量越大。例例4 4:使用幾種不同的顏色繪制填充矩形和字符串:使用幾種不同的顏色繪制填充矩形和字符串 2005 趙小敏字體控制字體控制Java APIJava API提供提供FontFont類定義字體的方法和常量。類定義字體的方法和常量。FontFont類的構(gòu)造函數(shù)有三個參數(shù):字體名稱、字體風(fēng)格和類的構(gòu)造函數(shù)有三個參數(shù):字體名稱、字體風(fēng)格
26、和字體大小。字體大小。字體名稱可以是運(yùn)行程序的系統(tǒng)所支持的任何一種字體,字體名稱可以是運(yùn)行程序的系統(tǒng)所支持的任何一種字體,如如JavaJava字體字體Monospaced,SansSerifMonospaced,SansSerif和和SerifSerif字體風(fēng)格可以是字體風(fēng)格可以是Font.PLAIN,Font.ITALICFont.PLAIN,Font.ITALIC和和Font.BOLDFont.BOLD, ,字體風(fēng)格可以組合使用,如字體風(fēng)格可以組合使用,如Font.ITALICFont.ITALICFont.BOLDFont.BOLD字體大小是以點(diǎn)來衡量的,一個點(diǎn)是字體大小是以點(diǎn)來衡量的,
27、一個點(diǎn)是1/211/21英寸英寸注意:制定一個系統(tǒng)不存在的字體是一種邏輯錯誤。注意:制定一個系統(tǒng)不存在的字體是一種邏輯錯誤。 2005 趙小敏例例5 5:顯示:顯示4 4種不同大小、不同字體的文本種不同大小、不同字體的文本1. public void paint( Graphics g ) 2. g.setFont( new Font( Serif, Font.BOLD, 12 ) );3. g.drawString( Serif 12 point bold., 20, 50 );4. g.setFont( new Font( Monospaced, Font.ITALIC, 24 ) );5
28、. g.drawString( Monospaced 24 point italic., 20, 70 );6. g.setFont( new Font( SansSerif, Font.PLAIN, 14 ) );7. g.drawString( SansSerif 14 point plain., 20, 90 );8. g.setColor( Color.red );9. g.setFont(10. new Font( Serif, Font.BOLD + Font.ITALIC, 18 ) );11. g.drawString( g.getFont().getName() + +12.
29、 g.getFont().getSize() +13. point bold italic., 20, 110 );14. 2005 趙小敏畫線、矩形和橢圓畫線、矩形和橢圓例6:線、矩形、3D矩形、圓角矩形和橢圓的繪制。1.public void paint( Graphics g ) 2. g.setColor( Color.red );3. g.drawLine( 5, 30, 350, 30 );4. g.setColor( Color.blue );5. g.drawRect( 5, 40, 90, 55 );6. g.fillRect( 100, 40, 90, 55 );7. g.
30、setColor( Color.cyan );8. g.fillRoundRect( 195, 40, 90, 55, 50, 50 );9. g.drawRoundRect( 290, 40, 90, 55, 20, 20 );10. g.setColor( Color.yellow ); 11. g.draw3DRect( 5, 100, 90, 55, true );12. g.fill3DRect( 100, 100, 90, 55, false );13. g.setColor( Color.magenta );14. g.drawOval( 195, 100, 90, 55 );1
31、5. g.fillOval( 290, 100, 90, 55 );16. 2005 趙小敏畫圓弧弧形是橢圓的一部分,弧的角度以度來衡量。例7:演示drawArc和fillArc。1. public void paint( Graphics g )2. / start at 0 and sweep 360 degrees3. g.setColor( Color.yellow );4. g.drawRect( 15, 35, 80, 80 );5. g.setColor( Color.black );6. g.drawArc( 15, 35, 80, 80, 0, 360 );7. / star
32、t at 0 and sweep 110 degrees8. g.setColor( Color.yellow );9. g.drawRect( 100, 35, 80, 80 );10. g.setColor( Color.black );11. g.drawArc( 100, 35, 80, 80, 0, 110 );12. / start at 0 and sweep -270 degrees13. g.setColor( Color.yellow );14. g.drawRect( 185, 35, 80, 80 );15. g.setColor( Color.black );16.
33、g.drawArc( 185, 35, 80, 80, 0, -270 );17. / start at 0 and sweep 360 degrees18. g.fillArc( 15, 120, 80, 40, 0, 360 );19. / start at 270 and sweep -90 degrees20. g.fillArc( 100, 120, 80, 40, 270, -90 ); 21. / start at 0 and sweep -270 degrees22. g.fillArc( 185, 120, 80, 40, 0, -270 );23. 2005 趙小敏例例8
34、8:畫多邊形和折線:畫多邊形和折線1. public void paint( Graphics g ) 2. int xValues = 20, 40, 50, 30, 20, 15 ;3. int yValues = 50, 50, 60, 80, 80, 60 ;4. Polygon poly1 = new Polygon( xValues, yValues, 6 );5. g.drawPolygon( poly1 );6. int xValues2 = 70, 90, 100, 80, 70, 35, 60 ;7. int yValues2 = 100, 100, 110, 110, 1
35、30, 110, 90 ;8. g.drawPolyline( xValues2, yValues2, 7 );9. int xValues3 = 120, 140, 150, 190 ;10. int yValues3 = 40, 70, 80, 60 ;11. g.fillPolygon( xValues3, yValues3, 4 );12. Polygon poly2 = new Polygon();13. poly2.addPoint( 165, 135 );14. poly2.addPoint( 175, 150 );15. poly2.addPoint( 270, 200 );1
36、6. poly2.addPoint( 200, 220 );17. poly2.addPoint( 130, 180 );18. g.fillPolygon( poly2 );19. 2005 趙小敏結(jié)果顯示結(jié)果顯示(70,100)(90,100)(100,110)(80,110)(70,130)(65,110)(60,90) 2005 趙小敏Java2D APIJava2D API提供繪制復(fù)雜圖形的二維圖形功能類,具體在以下包中:java.awt.*java.awt.image.*java.awt.color.*java.awt.font.*java.awt.geom.*java.awt.p
37、rint.*java.awt.image.renderable 2005 趙小敏Java2D圖形java.awt.geom包中提供一些Java2D圖形功能的類,包括Ellipse2D.Double, Rectangle2D.Double, RoundRectangle2D.Double,Arc2D.Double和Line2D.Double等。例9:演示幾種Java2D圖形和繪制的特性例10:繪制五角星 2005 趙小敏四、動畫處理游游戲軟戲軟件的件的設(shè)計設(shè)計中,中,動動畫向程序畫向程序員員提出了挑提出了挑戰(zhàn)戰(zhàn),但在,但在Java中中實(shí)現(xiàn)動實(shí)現(xiàn)動畫畫則則是十分是十分簡單簡單的事情。的事情。下面下
38、面讓讓我我們們一起由淺入深地一起由淺入深地編編寫幾個寫幾個動動畫程序畫程序?qū)崒?shí)例,并例,并通通過對這過對這些些實(shí)實(shí)例的逐步改例的逐步改進(jìn)進(jìn)來探來探討討Java動動畫技畫技術(shù)術(shù)的關(guān)的關(guān)鍵鍵。 。 2005 趙小敏1、 、動動畫原理畫原理計計算機(jī)算機(jī)動動畫原理十分畫原理十分簡單簡單,首先在屏幕上,首先在屏幕上顯顯示出示出第一第一幀幀畫面,畫面,過過一會兒把它擦掉,然后再一會兒把它擦掉,然后再顯顯示下一示下一幀幀畫面,如此循畫面,如此循環(huán)環(huán)往復(fù)。由于人眼存在著一個往復(fù)。由于人眼存在著一個視覺視覺差,所以感差,所以感覺覺好像畫面中的物體在不斷運(yùn)好像畫面中的物體在不斷運(yùn)動動。 。 2005 趙小敏例11
39、:宇宙飛船游太空宇宙飛船游太空1.import java.awt.*;2.import java.applet.*;3.public class MovingImg extends Applet 4. Image star, rocket;5. int x=0;6. public void init() 7. star=getImage(getCodeBase(),starfield.gif);8. rocket=getImage(getCodeBase(),rocketship.gif);9. 10. public void paint(Graphics g) 11. g.drawImage
40、(star,0,0,this);12. g.drawImage(rocket,x,15,this); 13.try 14. Thread.sleep(30);15. x+=5;16. if (x=400) 17. x=0;18. Thread.sleep(600);19. 20. catch (InterruptedException e) 21. repaint();22. 23. 2005 趙小敏程序分析(1)這這是一個很是一個很簡單簡單的的動動畫,在畫,在Applet中有一個充當(dāng)太空的中有一個充當(dāng)太空的背景背景圖圖,一艘宇宙,一艘宇宙飛飛船在太空船在太空圖圖上不斷從左上不斷從左邊邊移移動
41、動到右到右邊邊。 。程序中程序中創(chuàng)創(chuàng)建了兩個建了兩個Image對對象象star和和rocket, ,在在init方方法中分法中分別別加加載載了兩個了兩個圖圖像文件和像文件和這這兩個兩個對對象關(guān)象關(guān)聯(lián)聯(lián)起來。起來。添加了添加了變變量量x用來指定用來指定飛飛船的畫出位置,船的畫出位置,x初始化初始化為為10。 。在在paint方法中,注意到太空方法中,注意到太空總總是畫在指定位置(是畫在指定位置(0, 0),),而而飛飛船船則則畫在位置(畫在位置(x, 15),),其中其中x的的值值是不斷是不斷變變化的?;摹?2005 趙小敏程序分析(2)真正使真正使飛飛船船實(shí)現(xiàn)動實(shí)現(xiàn)動畫效果是在畫效果是在tr
42、y.catch塊塊中。中。paint方法的最后一條方法的最后一條語語句是句是調(diào)調(diào)用用repaint方法。方法。repaint方方法的功能是重畫法的功能是重畫圖圖像,它先像,它先調(diào)調(diào)用用update方法將方法將顯顯示區(qū)清空,示區(qū)清空,再再調(diào)調(diào)用用paint方法畫出方法畫出圖圖像。像。這這就形成了一個循就形成了一個循環(huán)環(huán), ,paint調(diào)調(diào)用了用了repaint, ,而而repaint又又調(diào)調(diào)用了用了paint, ,使使飛飛船不船不間間斷地斷地來回移來回移動動。 。運(yùn)行運(yùn)行這這個個Applet時時,畫面有,畫面有閃爍現(xiàn)閃爍現(xiàn)象。一般來象。一般來說說,畫面越大,畫面越大,update以背景色清除以背
43、景色清除顯顯示區(qū)所占用的示區(qū)所占用的時間時間就越就越長長,不可避,不可避免地會免地會產(chǎn)產(chǎn)生生閃爍閃爍。 。為為了達(dá)到平滑而又沒有了達(dá)到平滑而又沒有閃爍閃爍的的動動畫效果,畫效果,就就應(yīng)該應(yīng)該考考慮慮采取一些采取一些補(bǔ)補(bǔ)救措施。救措施。覆蓋覆蓋update方法可以降低方法可以降低閃爍閃爍,但不能消除它。能有效消,但不能消除它。能有效消除除閃爍閃爍的方法是采用的方法是采用圖圖形雙形雙緩緩沖技沖技術(shù)術(shù)( (graphics double buffering)。)。 2005 趙小敏2、圖形雙緩沖技術(shù)、圖形雙緩沖技術(shù)1.import java.awt.*;2.import java.applet.*;
44、3.public class MovingImg extends Applet 4. Image star, rocket, buffer;5. Graphics gContext;6. int x=10;7. public void init() 8. star=getImage(getCodeBase(),starfield.gif);9. rocket=getImage(getCodeBase(),rocketship.gif);10. buffer=createImage(getWidth(),getHeight();11. gContext=buffer.getGraphics();
45、12. 13. public void paint(Graphics g) 14. gContext.drawImage(star,0,0,this);15. gContext.drawImage(rocket,x,15,this);16. g.drawImage(buffer,0,0,this);17. try 18. Thread.sleep(10);19. x+=2;20. if (x=400) 21. x=10;22. Thread.sleep(1000);23. 24. 25. catch (InterruptedException e) 26. repaint();27. 28.
46、public void update(Graphics g) 29. paint(g);30. 31.例例12:改進(jìn)后的宇宙飛船游太空:改進(jìn)后的宇宙飛船游太空 2005 趙小敏3、用用線線程程實(shí)現(xiàn)動實(shí)現(xiàn)動畫畫例例12用用圖圖形雙形雙緩緩沖改善了沖改善了圖圖像像閃爍問題閃爍問題,但仍存在一,但仍存在一些其他些其他問題問題。例如用。例如用戶戶離開網(wǎng)離開網(wǎng)頁頁后,嵌入的后,嵌入的Applet會會繼繼續(xù)續(xù)運(yùn)行,占用運(yùn)行,占用CPU時間時間。下面的例。下面的例13出于網(wǎng)出于網(wǎng)絡(luò)實(shí)絡(luò)實(shí)用的目用的目的,采用獨(dú)立的,采用獨(dú)立線線程程實(shí)現(xiàn)動實(shí)現(xiàn)動畫。畫。 2005 趙小敏1.import java.awt.*;2.import java.applet.*;3.public class Running extends Applet implements Runnable 4. Image img=new Image14;5. Image buffer;6. Graphics gContext;7. Thread animate;8. int index=0;9. public void init() 10. buffer=createImage(getWidth(),getHeight();11. g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高能粒子在線診斷裝備市場需求趨勢分析
- 攝影之旅世界著名攝影地推 薦
- 2025至2030中國自充氣復(fù)蘇器行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國脫模膜行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025年節(jié)日期間農(nóng)林水利系統(tǒng)糾治“四風(fēng)”監(jiān)督檢查報告范文
- 2025至2030中國胃腸(GI)設(shè)備行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 八年級體育教學(xué)評價體系計劃
- 幼兒園用工管理法律法規(guī)貫徹計劃
- 2025至2030中國美容院行業(yè)發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃報告
- 2025至2030中國羅茨風(fēng)機(jī)行業(yè)深度研究及發(fā)展前景投資評估分析
- 2024年湖南城建職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試真題
- 完整版:美制螺紋尺寸對照表(牙數(shù)、牙高、螺距、小徑、中徑外徑、鉆孔)
- 湖南大眾傳媒職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試題庫
- 年產(chǎn)40萬噸熱鍍鋅板帶項(xiàng)目節(jié)能評估報告
- 四年級奧數(shù)全套奧數(shù)講義
- DB11T 593-2016高速公路清掃保潔質(zhì)量與作業(yè)要求
- GB/Z 40637-2021古籍印刷通用字規(guī)范字形表
- GB/T 19250-2013聚氨酯防水涂料
- 2023年涉縣水庫投資管理運(yùn)營有限公司招聘筆試題庫及答案解析
- 小企業(yè)會計準(zhǔn)則報表格式完整
- 醫(yī)院就診告知書
評論
0/150
提交評論