package graphtest; import java.awt.*; import java.awt.geom.*; import java.awt.image.* ; import javax.swing.*; class Graphtest extends JFrame { private Image background, plane; private int j=0, x=10, y=550, dx=10, vy=-20, g=1; Graphtest(String s) { super(s); MediaTracker tr = new MediaTracker(this); background = getToolkit().getImage("background.jpg"); plane = getToolkit().getImage("plane.png"); tr.addImage(background, 0); tr.addImage(plane, 0); try { tr.waitForAll ();} // Очікування на завантаження всіх зображень catch (InterruptedException e) {}; setSize(565, 620); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } @Override public void paint (Graphics g) { Graphics2D g2 = (Graphics2D) g; int w = getSize().width, h = getSize().height; BufferedImage bi = (BufferedImage) createImage(w, h);// створення буфера зображення Graphics2D big = bi.createGraphics(); // отримання його графічного контексту big.setColor(new Color(0,88,0)); // темно зелений колір малювання big.fillRect(0, 0, w, h); // заповнення вікна темно зеленим тлом big.drawImage(background,10,35,this); // виведення зображенння поверх зеленого тла big.drawImage(plane,555-x*2,50,this); // виведення зображенння поверх зеленого тла big.setColor(Color.red); // червоний колір малювання big.fill(new Arc2D.Double(x,y,10,10,0,360,Arc2D.OPEN)); g2.drawImage(bi, 0, 0, this); // виведення зображення-буферу на экран } public void go() { while(j < 520) { repaint(); try {Thread.sleep(100);} catch (InterruptedException e){} j++; x +=dx; // рівноприскорений рух без тертя y +=vy+g/2; vy+=g; if (y>560) {y=1200-y; vy=-vy;}// імітація відбивання від землі } } public static void main(String[] args) { Graphtest f = new Graphtest("Анімація поверх зображення"); f.go (); } }