ダブルバッファリングを行なう場合でも、クリッピングを行なって描画領域を絞った方が効率的で、描画も速くなります。
ここではupdate()メソッドの中で
off_g.clipRect(minX, minY, maxX - minX + r, maxY - minY + r); g.clipRect(minX, minY, maxX - minX + r, maxY - minY + r);
と裏の黒板と表の黒板の両方をクリッピングして、裏の黒板への描画と、裏の黒板と表の黒板を入れ換えるときの描画の効率を向上させています。
ところで、皆さんの環境ではこのアプレット正常に動作しているでしょうか?
私の環境(Macintosh PowerBook5300)ではApplet Viewerでは正常に動作するんですが、Netscape3.0[ja]では残像が残ってしまいました。
Thread.sleep(10)の10を100位にするとちゃんと動作します。どうもpaint()やupdate()で色々やっているうちに、x, y, lastPaintedX, lastPaintedYが変化してしまうような感じです。
残像を減らすためにはクリップ領域の計算などをupdate()メソッドからrun()メソッドに移し、update()やpaint()でする処理を少なくすると良いようです。残像を完全になくすために色々やったんですが、解決できなかったのでほってあります。原因が解る人は教えて下さい。