1

ほとんどの人が私がやろうとしていることを理解してくれると思うので、コードを省略することにしました。

基本的に、アクティビティの onCreate にプログラムで追加された Layout、TextView、および GameGraphics と呼ばれるカスタム ビューがあります。GameGraphics ビューは、すべてのインタラクションと描画 (基本的なゲーム) が行われるカスタム ビューです。TextView には、スコアや currentPlayer のターンなどの情報が表示されます。

ゲームの全体的なやり取りは、OnTouchListener を追加した GameGraphics のコンストラクター内から発生します。

    this.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
             // ALL GAME LOGIC GOES HERE    
                            }
                           return true;
     }});

ここで、カスタム ビューで画面全体を使い果たし、テキスト フィードバックをキャンバスに描画することができますが、学習のために TextView を使用したいと考えています。そのため、ゲームの進行に合わせて TextView テキストを変更する方法、つまり GameGraphics カスタム ビュー内から変更する方法を見つけようとしています。したがって、最終的には、TextView にカスタム GameGraphics ビューを「リッスン」させ、スコア、currentPlayer などの変数で再描画させようとしています。

私がやろうとしている方法がうまくいかないことは理解しています...ビューがまだ描画されている間に別のビューにそれ自体を再描画するように依頼するビューを取得することはできないと思います...またはそのようなもの。

私は本当にアイデアがありません。誰かがボタンを持っているという行に沿って何かを教えてくれたらどうすればよいかを理解できると思います。そのボタンが押されると、TextView のテキストが別のものに変わります。これは最終的に私がやろうとしていることだと思いますか?

その間ずっと探します…

4

2 に答える 2

0

この解決策は、Java 言語要素を使用することに帰着します。ゲーム ビューを制御する同じクラスのメンバーとして抽象リスナー クラスを作成します。次に、アクティビティでそのクラスのインスタンスを作成し、作成した抽象メソッドを実装します。

class gameGraphics
{
   public abstract class DataListener
   {
      public abstract void updateScore(String data);
   }
   private DataListener listener;
   public gameGraphics(DataListener listener){
      this.listener = listener;
   }
   private TheMethodThatGetsCalledWhenThingsChange(){
       this.listener.updateScore(...DATA....);
   }
}

class mainActivity extends Activity
{
   @Override
   public onCreate(...stuff...){
       ...on create stuff...
       new gameGraphics(new DataListener{
           public void updateScore(String data){
              ...set the listview...
           }
       }); 
   }
}
于 2012-04-11T13:04:59.477 に答える
0

GameGraphics クラスではなく、メインのアクティビティでゲーム ロジックを実行することは可能でしょうか? そうすれば、作成した TextView オブジェクトのハンドルを取得し、いつでも TextView で .setText("your string") を使用できます。これが役に立てば幸いです。誤解している場合はお知らせください。

于 2012-04-11T12:57:08.533 に答える