import java.applet.Applet; import java.awt.*; /* */ public class AppBase extends Applet implements Runnable { private static final long serialVersionUID = -7315847869742475874L; Image bufferImage; // ダブルバッファリング用のイメージ Dimension appletSize; // アプレットサイズ // TextArea message; // メッセージエリア // 描画エリアサイズ final int WIDTH = 500, HEIGHT = 300; // final int MESSSAGE_HEIGHT = 100; final int SLEEP_WAIT = 4; // ここで全体のウェイトを調整する long start_time; // 開始時刻 private boolean main_loop; //ループの継続条件 public void init() { // アプレットサイズの指定 this.setBounds(0, 0, WIDTH, HEIGHT); // +MESSSAGE_HEIGHT); // コンポーネントの作成 // message = new TextArea( "", 80, 10, 1); // スクロールバー付き // message.setEditable(false); // 編集禁止 // this.setLayout( null ); // 絶対位置で指定 // this.add( message ); // message.setBounds( 0, HEIGHT, WIDTH, MESSSAGE_HEIGHT ); // アプレットサイズの取得 appletSize = getSize(); // モデルデータの設定 initModelData(); start_time = System.currentTimeMillis(); // 開始時刻を記録 main_loop = true; //自分を渡してThreadクラスを作成しスレッド起動 new Thread(this).start(); } public void paint(Graphics g) { // ダブルバッファリング用のイメージを作成 if(bufferImage == null) { bufferImage = createImage(appletSize.width, appletSize.height); } // バッファにモデルを描画 drawModel(bufferImage.getGraphics()); // バッファイメージをアプレットに描画 g.drawImage(bufferImage, 0, 0, this); } /** 描画更新時に背景の塗りつぶし処理を行わないためのオーバーライド */ public void update(Graphics g) { paint(g); } /** モデルデータの設定 */ protected void initModelData() { // ここでモデル初期値を設定する } /** モデルの描画 */ protected void drawModel(Graphics g) { // 全体をクリア g.setColor(Color.WHITE); g.fillRect(0, 0, appletSize.width, appletSize.height); } public void destroy() { main_loop = false; //ループの終了 super.destroy(); } public void run() { while(main_loop){ // モデルを動かす moveModel(); repaint(); // 再描画 try // 時間待ち { Thread.sleep(SLEEP_WAIT); } catch( InterruptedException ex ) { ex.printStackTrace(); } } } /** モデルを動かす */ protected void moveModel(){ // ここに動きを入れる } /** メッセージの表示 */ // void printMessage( String str ) { // message.append( str ); // } /** メッセージクリア */ // void clearMessage() { // message.setText( "" ); // } /** 経過時間(ms)を得る */ long current_time(){ return System.currentTimeMillis() - start_time; } }