// // グラフィックのスクロール表示 // // 1998/ 7/ 8 - 2001/ 2/21 宍戸 輝光 // import java.awt.*; public class scroll1 extends java.applet.Applet implements Runnable { Panel p1; Button start; Thread runner=null; Image parts[]=new Image[4]; Image screen,scrol; Graphics g_screen,g_scrol; byte map[][]=new byte[128][16]; volatile boolean running=false; public void start() { int i,j; setBackground(Color.lightGray); screen=createImage(256,256); // 表示用イメージ g_screen=screen.getGraphics(); scrol=createImage(272,256); // バッファイメージ g_scrol=scrol.getGraphics(); start=new Button("Start"); setLayout((LayoutManager)null); p1=new Panel(); p1.reshape(16,280,256,40); p1.setLayout(new FlowLayout(FlowLayout.CENTER,4,4)); p1.add(start); add(p1); map_make(); // マップと表示用のグラフィックパーツを作成 for (i=0;i<16;i++) /*最初の画面を作成*/ for (j=0;j<16;j++) g_screen.drawImage(parts[map[j][i]],j*16,i*16,this); repaint(); } public void stop() { // 終了処理 if (runner!=null) { running=false; } } public void run() { // スクロール int i,j,x; x=0; // 現在位置をマップの左端に設定 while(running && x<110) { // 右方向へスクロール for (i=0;i<16;i++) // バッファにスクロールさせるイメージを描く for (j=0;j<17;j++) g_scrol.drawImage(parts[map[j+x][i]],j*16,i*16,this); for (i=0;i<16;i++) { // バッファを左にずらしながら表示 g_screen.drawImage(scrol,-i,0,this); // 表示用イメージをアプレットに描画 Graphics g=getGraphics(); paint(g); g.dispose(); try { Thread.sleep(10); } /*ウエイト*/ catch (InterruptedException e) {} } x++; // マップ上の位置を1つ右にずらす } } public boolean action(Event evt,Object what) { if (evt.target==start) { // ボタンが押されたらスクロール開始 if(runner==null) { // スクロール表示用スレッド生成 runner=new Thread(this); running=true; runner.start(); } start.enable(false); // Start ボタン無効 return true; } return false; } public void map_make(){ // マップと表示用パーツ作成 int i,j; Graphics g_parts; parts[0]=createImage(16,16); g_parts=parts[0].getGraphics(); g_parts.setColor(Color.blue); g_parts.fillRect(0,0,15,15); g_parts.setColor(Color.white); g_parts.fillRect(6,6,3,3); parts[1]=createImage(16,16); g_parts=parts[1].getGraphics(); g_parts.setColor(Color.green); g_parts.fillRect(0,0,15,15); g_parts.setColor(Color.orange); g_parts.fillOval(2,2,11,11); parts[2]=createImage(16,16); g_parts=parts[2].getGraphics(); g_parts.setColor(Color.red); g_parts.fillRect(0,0,15,15); g_parts.setColor(Color.yellow); g_parts.drawLine(0,0,15,15); g_parts.drawLine(15,0,0,15); parts[3]=createImage(16,16); g_parts=parts[3].getGraphics(); g_parts.setColor(Color.cyan); g_parts.fillRect(0,0,15,15); g_parts.setColor(Color.magenta); g_parts.drawRect(2,2,10,10); g_parts.drawRect(3,3,8,8); for (i=0;i<16;i++) // 乱数でマップデータを作成 for (j=0;j<128;j++) // 各要素に0ー3を設定 map[j][i]=(byte)(Math.random()*4); } public void paint(Graphics g) { g.drawImage(screen,8,8,this); // 表示用イメージを表示 } public void update(Graphics g){ paint(g); // updateをオーバーライドしてちらつき防止 } }