Java -практика использования

       

Анимация с помощью MemorylmageSource



Листинг 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);

// Задаем возможность анимации

mis.setAnimated(true);

img = createImage(mis);

setSize(350, 300);

setVisible(true);
 

public void paint(Graphics gr){

gr.drawImage(img, 10, 30, this);

}

public void update(Graphics g) { paint(g);
}

public void got){ 

while (count < 100){

int i = 0; 

// Изменяем массив пикселов по некоторому закону 

for(int у - 0; у < h;,y++)

for (int x. = 0; x < w; x++)

pix[i++J = (255 « 24)|(255 + 8 * count « 16)|

(8*count «8)| 255 + 8 * count; 

// Уведомляем потребителя об изменении 

mis.newPixels();
 

try{

Thread.sleep(100);
 

}catch(InterruptedException e){} 

count++; 

public static void main(String[] args){

InMemory f= new InMemory(" Изображение в памяти");

f.go();

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent ev){

System.exit(0);
 

}

));
 

}

Вот и все средства для анимации, остальное — умелое их применение. Комбинируя рассмотренные способы, можно добиться удивительных эффектов. В документации SUN J2SDK, в каталогах demo\applets и demo\jfc\Java2D \src, приведено много примеров апплетов и приложений с анимацией.



Содержание раздела