Иллюстрированный самоучитель по Java



     окб тсп |          

Улучшение изображения двойной буферизацией - часть 2


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());




Содержание  Назад  Вперед