• 締切済み

repaintが実行されません(iアプリ)

Java初心者なのですが、頑張ってテトリスをiアプリで作ろうと思っています。 何分オブジェクト指向などをあまり理解できていないためソースがいまいち見苦しいかと思いますが、よろしければ手助けしていただけると幸いです。 関係があると思われるメソッドだけを載せます。 以下、ソース----------------------------- public final class Tetris extends Canvas implements Runnable{   /**   (変数などの設定が入ります)   **/   Thread t = new Thread(this);   t.start();   paintFrag = true;   Thread tp = new Thread(this);   GameLoop(); } //ゲームのメインループ public void GameLoop(){   //オープニングの表示   GameStart();   while(true){     //新しくミノを生成     //ゲームオーバーかどうかも同時にチェック     if(CreateMino() == 1){       GameOver();    //ゲームオーバー時のメソッド     }     while(true){       //1000ミリ秒待つ       try{         Thread.sleep(1000);       }       catch(Exception e){       }       //ミノを1つ落下させる       //1つ下に固定済みブロックがあれば1を返す       if(DropMino() == 1){         break;       }     }   } } public void run(){   //30フレームで画面を再描画   if(paintFrag == true){     while(true){       try{         Thread.sleep(33);       }       catch(Exception e){       }       System.out.println("テスト");       repaint();     }   }   //こっちではキー状態を監視   else{     while(true){     (まだ未実装です)     }   } } ソース終わり----------------------------- これで実行した場合、コンソール画面にはきちんと「テスト」とは33ミリ秒毎に表示されるのですが、実際のiアプリの画面には何も表示されずに真っ黒な状態のままです。 GameLoopの「while(true){}」のループを2つとも外した場合、起動してから1000ミリ秒は何も表示されず、1000ミリ秒以上経ってからは1マス落ちた状態のブロックが表示され、それ以後は何も動作がありません。 paintメソッドに「System.out.println("~~");」と記述してもこれはコンソール画面に表示されないので、どうやらGameLoopメソッドがループしている間はpaintメソッド自体が動作していないような感じなのですが、原因がなんなのか検討もつきません。 分かる方いらっしゃいましたらヒントでもいいので回答お願いします。 開発ツールはDoCoMoの公式サイトでダウンロードできるiappliTool for Doja 5.1(FOMA)を、Javaのバージョンは1.4.2_13を使用しています。

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

iモード対応Javaコンテンツ開発ガイド(詳細編)4章2節(必要なら4章3節も)や、サンプルとして提供されているスペースインベーダーゲームのソースコードを見てください。 基本的に、 (1)Tetrisクラスのpaint()メソッドを書く。 (2)ゲームループはrun()メソッド内のwhileループに統一する。 (主に、paint()が使う描画用パラメータを更新してからrepaint()をコールする。) (3)キーへの対応はイベント処理として書く。 (イベント処理の中でも、その最後にTetrisのrepaint()を呼ぶ場合が多い。) 現在のあなたのコードは、基本構造ができていないので、細部をとやかく言っても無駄と思います。(とにかく、いろんなwhileループがお互いを邪魔しあっています!。)

関連するQ&A