2つの変更をします。
1.一つ前の円を消して軌跡を残さない
2.右端までいったら左へ進むようにし、左端へいったら右へ進むようにする
MovDisk2.javaをもとに、スレッドを使う MakeDisk6Move の部分だけ変わります。
//円を動かすクラス class MakeDisk6Move extends Thread { MyPanel pnl; BufferedImage image; Graphics bfg; Color bc; int x = 100; int y ; int lx =0; int d = 10; int dx = 10; int xmax,ymax; //コンストラクタpublic Color getBackground()/java.awt.Component public MakeDisk6Move(MyPanel pn) { pnl = pn; image = pn.buffimg; bfg = image.createGraphics(); xmax = image.getWidth(); ymax = image.getHeight(); y = (int)(ymax*Math.random()); bc = pnl.getBackground(); } @Override //add public void run() { //add bfg.setColor(Color.red); bfg.drawString(getName(),x-90,y); while ( true ){ bfg.setColor(bc); bfg.fillOval(lx-d/2,y-d/2,d,d); bfg.setColor(Color.red); bfg.fillOval(x-d/2,y-d/2,d,d); pnl.repaint(); lx = x; x+=dx; if (x >xmax){ x = 2*xmax-x; dx = -dx; } if (0 > x){ x = -x; dx = -dx; } //100ms(0.1秒)停止 try { Thread.sleep(100); } catch(InterruptedException ex) { System.err.println(ex); } }//end of while }//add end of run }//end of class MakeDisk6Move
強調部分が主要な変更です。
次の●を描くまえに前の●を消します。そのために2つの情報が必要です。
前の●の位置 : lx に前の x を記憶しています。
背景色 : コンストラクタで pnl.getBackground() により背景色を得て、bc におぼえて置きます。
やはり複数の●を動かせますし、green, blue も生きています。
左右で跳ね返ることを確認しなさい。