2011-06-25 101 views
0

我正在做一個小應用程序,它是一個記憶遊戲,你選擇了一張卡片,它變成了,你選擇了第二張卡片,如果他們是相同的,他們不在遊戲中,如果他們不匹配,他們再次被拒絕。如何做更新循環?

我有 public class PlayActivity extends Activity implements OnClickListener。 翻轉事件觸發點擊處理程序,聲明在public void onCreate(Bundle savedInstanceState)他們工作正常。

當選擇第一張卡片時,它會調用我的方法Action,這會將圖像從默認(卡片背面)設置爲「真實」圖像(卡片正面)。迄今爲止很好。 我的問題是第二張牌:當它被選中時,它會調用方法Action,在那裏它應該設置前面的圖像(讓我們稱之爲'中間動作'),然後一個停頓(一個while循環直到x毫秒)那麼它會檢查要做什麼(如果它們匹配或不匹配)並將它們關閉或退出遊戲。您可以看到問題出在哪裏:屏幕僅在x毫秒後顯示結果(「中間操作」未被繪製)。

因爲我已經用XNA做了一些小遊戲,我知道循環Update-Draw,所以我知道這裏兩次更新同樣的東西,所以總是繪製最後一個。但是在這裏,唯一的更新是觸發點擊事件時,我需要定期更新。

幫助?

回答

0

你可以使用TimerTask來處理它。你可以像下面這樣實現它。

這可能不是最強健的方法,但它是一個想法。如果我想出一個更好的方法在短時間內完成,我將編輯我的文章。 :)

另外我想補充一點,如果你想製作一個使用更新/繪製循環的遊戲,你可能需要使用SurfaceView來繪製你的遊戲。看看這裏的示例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 didnt工作..我想生病需要使用surfaceview,遺憾的是官方的API是不是很有用,無論如何感謝大衛 – Zukki