• Java双缓冲绘图


    方法一:

    import java.awt.*;
    import javax.swing.*;
    
    public class skyplane {
        public static void main(String[] args) {
    
            JFrame w = new JFrame();
            w.setSize(824, 446);
    
            MyPanel mp = new MyPanel();
            w.add(mp);
    
            Thread t = new Thread(mp);
            t.start();
    
            w.show();
    
        }
    }
    
    class MyPanel extends JPanel implements Runnable {
        Graphics g1;
        Image buffer, plane, sky;
        int x = 10;
        int y = 400;
    
        public void paint(Graphics g) {
            super.paint(g);
    
            buffer = createImage(getWidth(), getHeight());// 创建图像缓冲区
            g1 = buffer.getGraphics(); //创建绘图区
            plane = new ImageIcon("image/plane.png").getImage(); //获取图像
            sky = new ImageIcon("image/sky.png").getImage(); //获取图像
    
            g1.drawImage(sky, 0, 0, this); //将图像先画到缓冲区
            g1.drawImage(plane, x, y, this); //将图像先画到缓冲区
            g.drawImage(buffer, 0, 0, this); //将缓冲区里的图像画出
        }
    
        public void run() {
            while (true) {
                if (x == 800)
                    x = 10;
                else
                    x += 2;
                if (y == 0)
                    y = 400;
                else
                    y--;
                try {
                    Thread.sleep(50);
                } catch (Exception e) {
                }
                repaint();
            }
        }
    
    }
     

    方法二:

    import java.applet.*;
    import java.awt.*;
    
    public class skyplane extends Applet {
    
        Image buffer, plane, sky;
        Graphics g1;
        Thread td;
        int x = 0;
    
        public void init() {
            this.setSize(824, 446);
            buffer = createImage(getWidth(), getHeight()); // 创建图像缓冲区
            g1 = buffer.getGraphics(); // 创建绘图区
            plane = getImage(getCodeBase(), "image/plane.png");
            sky = getImage(getCodeBase(), "image/sky.png");
        }
    
        public void paint(Graphics g) {
            g1.drawImage(sky, 0, 0, this);// 将图像先画到缓冲区
            g1.drawImage(plane, x, 20, this); // 将图像先画到缓冲区
            g.drawImage(buffer, 0, 0, this);
            try {
                Thread.sleep(50);
                x += 2;
                if (x == 800) {
                    x = 2;
                    Thread.sleep(50);
                }
            } catch (InterruptedException e) {
            }
            repaint();
        }
    
        public void update(Graphics g) {
            paint(g);
        }
    }
  • 相关阅读:
    Django的开发服务的搭建和使用
    Openerp
    Django Url设计 小知识点
    try...finally的用法
    SQL rownum的用法
    oracle 日期常用函數sysdate
    datetime.datetime.now()时间格式转化是碰到的问题
    CSS BACKGROUND汇总
    css3动画效果小结
    javascript花式理解闭包
  • 原文地址:https://www.cnblogs.com/zuferj115/p/5008154.html
Copyright © 2020-2023  润新知