- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
消除动画闪烁 第一页,共二十八页,2022年,8月28日 8-1 简介 细心的读者可能已经注意到,上述各章的图像动画都有闪烁漂浮的情况,这是因为新的图像随时替换旧的图像,如此才能使图像在窗口中显示出位置的变化或姿态的变化。如果图像替换得太快,其速度超过了计算机系统的负荷,有些部分先到位,有些部分后到位,则图像将会显得闪烁而不稳定,这也是计算机游戏设计不希望看到的。本章将介绍如何消除这样的闪烁。 第二页,共二十八页,2022年,8月28日 8-2 设计方法 为了消除图像闪烁,我们可设置一个缓冲页(Buffer Page),将新图像先置入缓冲页,等图像各部分都绘制完成后,再将缓冲页显示在窗口中,这样就可消除图像的闪烁。程序设计过程中我们将使用Image、Component、Graphics等类的方法 。 第三页,共二十八页,2022年,8月28日 8-3 消除动画闪烁 为了消除图像闪烁,我们可设置一个缓冲页(Buffer Page),将新图像先置入缓冲页,等图像各部分都绘制完成后,再将缓冲页显示在窗口中,这样就可消除图像的闪烁。根据8-2-4节中消除图像闪烁的程序代码,设计范例46,消除单幅动画闪烁的现象。 第四页,共二十八页,2022年,8月28日 范例46:参考范例18.1,设计文件Ex8_3_1.java,其功能是解释消除单幅动画闪烁的应用。 01 import java.awt.*; 02 import java.awt.event.*; ? 03 public class Ex8_3_1 extends Frame implements Runnable { 04 int x=0, y=100; 05 int dx=5, dy=5; 06 Image img,bufferPage=null; ? 07 public static void main(String args[]) { 08 Ex8_3_1 workStart=new Ex8_3_1(); 09 } 第五页,共二十八页,2022年,8月28日 范例46 续1 10 public Ex8_3_1() { 11 super(Ex8_3_1); 12 setSize(350, 350); ? 13 Toolkit tk = Toolkit.getDefaultToolkit(); 14 img = tk.getImage(fly.gif); ? 15 enableEvents(AWTEvent.WINDOW_EVENT_MASK); ? 16 setVisible(true); 17 new Thread(this).start(); 18 } ? 19 public void processWindowEvent(WindowEvent e) { 20 if(e.getID() == WindowEvent.WINDOW_CLOSING) { 21 System.exit(0); 22 } 23 } 第六页,共二十八页,2022年,8月28日 范例46 续2 24 public void run() { 25 while(true) { 26 x = x + dx; 27 y = y + dy; 28 repaint(); ? 29 if(x=0) dx = 5; 30 else if((x + 50) = getWidth()) dx = -5; ? 31 if(y=0) dy = 5; 32 else if((y + 50) = getHeight()) dy = -5; ? 33 try{Thread.sleep(250);} 34 catch(InterruptedException e) {;} 35 } 36 } ? 第七页,共二十八页,2022年,8月28日 范例46 续3 37 public void update(Graphics g) { 38 paint(g); 39 } ? 40 public void paint(Graphics g) { 41 Graphics bufferg; 42 if(bufferPage == null) 43 bufferPage = createImage
文档评论(0)