//
/* ---------------------------------------------------------------------------------------------- stars.java GIFアニメ ver. 1.10 (JDK 1.02) ueyama@infonet.co.jp 2002.02.25 update: 2009.11.12 ---------------------------------------------------------------------------------------------- */ import java.applet.*; import java.awt.*; import java.util.*; public class stars extends Applet implements Runnable { int Xs=304, Ys=170; // スクロールバー表示位置 int Xb=378, Yb=193; // Run/Stop ボタン表示位置 int Fn=0; // フレーム No. int Wt[]={200,100,100,300,100,100,100,100,100,100,100,100,700,100,100,100}; // 表示時間 boolean Run=false; Image Img; Thread th=null; Graphics gr; public void init() { String Bg=getParameter("bgcolor"); int bgc=Integer.valueOf(Bg,16).intValue(); setBackground(new Color(bgc)); MediaTracker mt=new MediaTracker(this); Img=getImage(getCodeBase(), getParameter("figure")); mt.addImage(Img, 0); try { mt.waitForID(0); } catch(InterruptedException e){}; gr=getGraphics(); } public void start() { if(th==null) { th=new Thread(this); th.start(); } } public boolean inside(int x, int a, int b) { return (x<=Math.max(a,b) && x>=Math.min(a,b)) ? true:false; } public void dsp_img(int x, int y, int m, int n, int c) // 画像の表示 { int w=0, h=0, ox=0, oy=0; Graphics gx=gr.create(); switch(c) { case 0: w=48; h=59; ox= 0; oy= 0; break; // 踊る人 case 1: w=48; h= 9; ox= 0; oy=59; break; // フレーム No. case 2: w=16; h=15; ox=820; oy= 0; break; // <| & |> case 3: w=16; h=13; ox=820; oy=30; break; // スクロールバーつまみ case 4: w=26; h=23; ox=768; oy= 0; break; // Run/Stop } gx.clipRect(x,y,w,h); if(c==1) gx.clearRect(x, y, w, h); gx.drawImage(Img,x-(ox+m*w),y-(oy+n*h),this); gx.dispose(); } public void dsp_anm() // アニメ画像表示 { gr.setColor(new Color(0xe5e5de)); // スクロールバーの色 gr.fillRect(Xs+20, Ys+1, 136, 13); // スクロールバーの表示 dsp_img(367, 102, Fn, 0, 0); // 踊る人の表示 dsp_img(Xs+20+Fn*8, Ys+1, 0, 0, 3); // スクロールバーつまみの表示 dsp_img(415, 152, Fn, 0, 1); // フレーム No. の表示 } public void paint(Graphics g) { int i; for(i=0;i<16;i++) { dsp_img(i*49, 0, i, 0, 0); // 踊る人の表示 dsp_img(i*49, 61, i, 0, 1); // フレーム No. の表示 } dsp_img(Xs, Ys, (Fn>0)?0:2, 1, 2); // <| ボタンの表示 dsp_img(Xs+160, Ys, (Fn<15)?0:2, 0, 2); // |> ボタンの表示 dsp_img(Xb, Yb, 0, (Run)?1:0, 4); // Run/Stop ボタンの表示 dsp_anm(); // アニメ画像表示 } public void run() { while(th!=null) { if(Run) dsp_anm(); // 画像の表示 try { th.sleep((Run)?Wt[Fn]:256); } catch (InterruptedException e){} if(Run) { Fn++; Fn%=16; } } } public void stop() { if(th!=null) { th.stop(); th=null; } } public boolean mouseDrag(Event e, int mx, int my) // スクロールバーの操作 { if(inside(my, Ys-10, Ys+25) && inside(mx, Xs+28, Xs+148)) { Fn=(mx-(Xs+28))/8; // フレーム No. dsp_img(Xs, Ys, (Fn>0)?0:2, 1, 2); // <| ボタンの表示 dsp_img(Xs+160, Ys, (Fn<15)?0:2, 0, 2); // |> ボタンの表示 dsp_anm(); // アニメ画像の表示 } return true; } public boolean mouseDown(Event e, int mx, int my) { if(inside(my, Ys, Ys+15) && inside(mx, Xs, Xs+176)) // <| or |> ボタンをクリック { if(inside(mx, Xs, Xs+16) && Fn>0) // <| ボタンをクリック { Fn--; dsp_img(Xs, Ys, 1, 1, 2); // <| ボタンの表示 } if(inside(mx, Xs+160, Xs+176) && Fn<15) // |> ボタンをクリック { Fn++; dsp_img(Xs+160, Ys, 1, 0, 2); // |> ボタンの表示 } dsp_anm(); // アニメ画像の表示 } if(inside(mx, Xb, Xb+26) && inside(my, Yb, Yb+23)) // Run/Stop ボタンをクリック { dsp_img(Xb, Yb, 1, (Run)?1:0, 4); // Run/Stop ボタンの表示 Run=!Run; } return true; } public boolean mouseUp(Event e, int mx, int my) { if(inside(my, Ys, Ys+15) && (inside(mx, Xs, Xs+16) || inside(mx, Xs+160, Xs+184))) // <| or |> ボタン { dsp_img(Xs, Ys, (Fn>0)?0:2, 1, 2); // <| ボタンの表示 dsp_img(Xs+160, Ys, (Fn<15)?0:2, 0, 2); // |> ボタンの表示 } if(inside(mx, Xb, Xb+26) && inside(my, Yb, Yb+23)) // Run/Stop ボタン { dsp_img(Xb, Yb, 0, (Run)?1:0, 4); // Run/Stop ボタンの表示 if(!Run) dsp_anm(); } return true; } } //戻る