2011-06-25 3 views
0

私はちょっとしたアプリをやっていますが、そのメモリゲームは、あなたが1枚のカードを選び、それが現れ、2枚目のカードを選び、それが現れます。再びターンダウンされます。更新ループの実行方法は?

私は public class PlayActivity extends Activity implements OnClickListenerです。 フリップイベントはクリックハンドラによってトリグされ、public void onCreate(Bundle savedInstanceState)で宣言されています。

最初のカードを選択すると、私のメソッドActionが呼び出され、画像がデフォルト(カードバック)から「実際の」画像(カードの前面)に設定されます。これまでのところ良い。 私の問題は2枚目のカードです:選択されたときには、前面の画像を設定する必要があるメソッドActionをコールします(中間アクションと呼ぶことができます)。その後、リトルポーズ(xミリ秒まで何もしないwhileループ)何をするかをチェックし(一致するかどうか)、それらを無効にするか、ゲームから外します。どこに問題があるかを見ることができます。画面には、xミリ秒後の結果のみが表示されます(「中間アクション」は描画されていません)。

私はXNAでいくつかの小さなゲームを行っているので、私はループUpdate-Drawを知っているので、ここでは同じことを2回更新するので、常に最後のものが描画されます。しかし、ここでは、クリックイベントがトリガされたときに、私は定期的に更新する必要があります。

ヘルプ?

答えて

0

おそらく、それを処理するためにTimerTaskを使用できます。次のように実装することができます。

これはおそらく最も堅牢な方法ではありませんが、それは考え方です。私が短時間でより良い方法を見つけ出すなら、私は自分の投稿を編集します。 :)

また、更新/描画ループを使用するゲームを作成する場合は、SurfaceViewを使用してゲームを描く必要があるかもしれないことを付け加えたいと思います。 didntのが働いhttp://developer.android.com/resources/samples/JetBoy/index.html

public class TestGameActivity extends Activity { 

    /* UIHandler prevents exceptions from 
    performing UI logic on a non-UI thread */ 
    private static final int MESSAGE_HIDE_CARD = 0; 

    private class UIHandler extends Handler { 
     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case MESSAGE_HIDE_CARD: 
       ImageView cardView = (ImageView) msg.obj; 
       cardView.setImageResource(R.drawable.faceDownCard); 
       break; 
      } 
     } 
    } 
    private UIHandler handler = new UIHandler(); 

    // Handle my click. V is the card view 
    public void onClick(View v) { 

     final int viewID = v.getId(); 
     // Create a hide task 
     TimerTask hideTask = new TimerTask() { 

      @Override 
      public void run() { 
       // Construct a message so you won't get an exception 
       Message msg = new Message(); 
       msg.what = MESSAGE_HIDE_CARD; 
       msg.obj = findViewById(viewID); 
       handler.sendMessage(msg); 
      } 
     }; 
     // Schedule the task for 2 seconds 
     new Timer().schedule(hideTask, 2000); 
    } 

} 
+0

TimerTaskをが..私はsurfaceviewを使用するには、病気の必要性を考えるここでは例を見て、悲しいことに、公式APIは、とにかく、デビッドのおかげで非常に有用ではありません – Zukki

関連する問題