/* アニメーション実験 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 animation.Animation; import animation.animator.WaveAnimator; public class MemoryImageSourceAnimation extends Animation implements Runnable { /* --- Field --- */ private Thread loop=null; private boolean stop; private WaveAnimator animator; private Image image; /* --- Constructor --- */ public MemoryImageSourceAnimation(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; animator=new WaveAnimator(baseImage); image=component.createImage(animator.getImageProducer()); 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) { double k; k=((double)(counter%(24*4)))/(24*4); animator.nextFrame( 48,(int)(12-Math.abs(12-24*k)),-counter*Math.PI/5.0); g.drawImage(image,0,0,component); } public void stopAnimation() { if (loop!=null) { stop=true; try {loop.join();} catch (InterruptedException e) {} } } }