/* アニメーション実験 Ver 0.10 */ /* */ /* */ /* by Atsushi 2005/8/20 */ package animation.animation; import java.awt.*; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import net.antun.lib.awt.image.WaveImageFilter; import animation.Animation; public class BasicAnimation extends Animation implements Runnable { /* --- Field --- */ private Thread loop=null; private boolean stop; /* --- Constructor --- */ public BasicAnimation(Image baseImage) { super(baseImage); } /* --- アニメーション --- */ public void startAnimation() { if (loop==null && component!=null) { stop=false; loop=new Thread(this,"Animation"); loop.start(); } } public void run() // loop { Graphics g; int counter; counter=0; g=component.getGraphics(); component.paint(g); while (true) { if (stop) break; paintImage(counter++); component.update(g); if (stop) break; synchronized (this) { try {Thread.sleep(40);} catch (InterruptedException e) {} } } loop=null; } private void paintImage(int counter) { MediaTracker tracker; Image image; ImageFilter filter; double k; int x,y; tracker=new MediaTracker(component); k=((double)(counter%(24*4)))/(24*4); filter=new WaveImageFilter( 48,(int)(12-Math.abs(12-24*k)),-counter*Math.PI/5.0); image=component.createImage( new FilteredImageSource(baseImage.getSource(),filter)); tracker.addImage(image,0); try {tracker.waitForAll();} catch (InterruptedException e) { e.printStackTrace(); } x=baseImage.getWidth (null)/2-image.getWidth (null)/2; y=baseImage.getHeight(null)/2-image.getHeight(null)/2; g.drawImage(image,x,y,component); image.flush(); } public void stopAnimation() { if (loop!=null) { stop=true; try {loop.join();} catch (InterruptedException e) {} } } }