Метод двойной буферизации стал фактическим
big.clearRect(0, 0, w, h);
// Восстанавливаем текущий цвет
big.setColor(getForeground());
// Выводим что-нибудь в графический контекст big
// ...
// Выводим буфер на экран
g2.drawImage(bi, 0, 0, this);
}
Метод двойной буферизации стал фактическим стандартом вывода изменяющихся изображений, а в библиотеке Swing он применяется автоматически.
Данный метод удобен и при перерисовке отдельных частей изображения. В этом случае в изображении-буфере рисуется неизменяемая часть изображения, а в методе paint() — то, что меняется при каждой перерисовке.
В листинге 15.12 показан второй способ анимации — кадры изображения рисуются непосредственно в программе, в методе update (), по заданному закону изменения изображения. В результате красный мячик прыгает на фоне изображения.
Листинг 15.12.
Анимация рисованием
import Java.awt.*;
import j ava.awt.event.*;
import Java.awt.geom.*;
import java.awt.image.*;
class DrawAniml extends Frame{
private Image img;
private int count;
DrawAniml(String s) {
super(s);
MediaTracker tr = new MediaTracker(this);
img = getToolkit().getlmage("back2.jpg");
tr.addlmage(img, 0);
try{
tr.waitForlD(0) ;
}catch(InterruptedException e) {}
SetSize(400, 400);
setvisible(true);
}
public void update(Graphics g){
Graphics2D g2 = (Graphics2D)g;
int w = getSizeO.width, h = getSize().height;
Bufferedlmage bi = (Bufferedlmage)createlmage(w, h) ;
Graphics2D big = bi.createGraphics();
// Заполняем фон изображением img
big.drawlmage(img, 0, 0, this);
// Устанавливаем цвет рисования
big.setColor(Color.red);
// Рисуем в графическом контексте буфера круг,
// перемещающийся по синусоиде
big.fill(new Arc2D.Double(4*count, 50+30*Math.sin(count),
50, 50, 0, 360, Arc2D.OPEN));
// Меняем цвет рисования
big.setColor(getForeground());
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий