Эффект мерцания, переливы цвета, затемнение
// Рисуем горизонтальную прямую
big.draw(new Line2D.Double(0, 125, w, 125));
// Выводим изображение-буфер на экран
g2.drawlmage(bi, 0, 0, this); }
public void go(){
while(count < 100){
repaint();
try{
Thread.sleep(10);
}catch(InterruptedException e){}
count++;
}
}
public static void main(String[] args){
DrawAniml f = new DrawAniml(" Анимация");
f.go();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
}
}
Эффект мерцания, переливы цвета, затемнение и прочие эффекты, получающиеся заменой отдельных пикселов изображения, удобно создавать с помощью класса Memoryimagesource. Методы newPixeis() этого класса вызывают немедленную перерисовку изображения даже без обращения к методу repaint(), если перед этим выполнен метод setAnimated(true). Чаще всего применяются два метода:
newPixels(int x, int y, int width, int height) — получателю посылается указанный аргументами прямоугольный фрагмент изображения;
nevPixels() — получателю посылается все изображение.
В листинге 15.13 показано применение этого способа. Квадрат, выведенный на экран, переливается разными цветами.
Листинг 15.13.
Анимация с помощью MemorylmageSource
import Java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
class InMemory extends Frame{
private int w = 100, h = 100, count;
private int[] pix = new int[w * h];
private Image img;
MemorylmageSource mis;
InMemory(String s){ super(s);
int i = 0;
for(int у = 0; у < h; y++){
int red = 255 * у / (h - 1);
for(int x = 0; x < w; x++){
int green = 25$ * x / (w - 1);
pix[i++] = (255 « 24}|(red << 16)|(green << 8)
|
128;
}
}
mis = new MemorylmageSource(w, h, pix, 0, w);
// Задаем возможность анимации
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий