2016-04-07 9 views
0

ここでは中プロジェクトで、スティッキーな状況から素早く汚い方法を探しています。カード推測ゲームでは、セカンドカードは中間のスレッドを描画しません

ゲームはこのようになります。再生するには、カードをクリックして別のカードをクリックし、一致する場合は両方が表示されたままになります。すべて一致し、ゲームは終了しました。私は1枚のカードが示されている私の場合

enter image description here

、ユーザが第2カード処理ロジックを選択した場合、目に見える、一致がある場合だけにして、チェックするカードを設定する必要があります。そうでない場合は、カードを古い画像に戻します。

このコードは、私がしようとしていることを理解するのに役立ちます。

gridLayout.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      //HOW DO I FORCE THE INTERFACE TO REDRAW BEFORE CONTINUING THE THREAD? 
      engine.setCardStateToShow(position); 
      gridLayout.invalidate(); 
      gridLayout.invalidateViews(); 
      try{ 
       Thread.sleep(1000); 
      }catch (Exception x){ 

      } 
      //DETERMINE IF THE CARDS MATCH AND IF NOT -- SET CARD INVIS 
      String message = engine.itemClicked(position, gridLayout); 
      Toast.makeText(getApplication(), message, Toast.LENGTH_SHORT).show(); 

      //If engine returns a value of WASWINNER, we can end the activity and end the game. 
      if (message.equals(GameEngine.WASWINNER)) { 
       startActivity(endActivity); 
      } 
     } 
    }); 
} 

最後の結果は、アプリケーションが画像を表示するように変更し、一致するものがない場合は表示しないように変更することです。その後、新しい値でインターフェイスを再描画するので、エンドユーザーには一致しなかった場合、「間違った」タイルは表示されません。これは「表示しない」に戻されるためです。

ご質問ありがとうございました。ありがとうございました。

+0

コードのスクリーンショットを投稿しないでください。すべてのテキストをテキストとして投稿してください。 –

+0

申し訳ありませんまだ私はまだ比較的新しいです。私はルールを見つけて読むことを試みます。 – JoshuaTree

答えて

0

さて、AsyncTask抽象クラスを使用してこの問題を解決することができました。 AsyncTaskを使用することによって、私は事実上、「マルチスレッド」することができ、比較ロジックをUIロジックから分離することができました。その結果、以下の基本的な説明のように、UIを直接的かつ個別に管理することができました。

onPreExecute()を使用することで、カードを示しました。

doInBackground()を使用すると、カードの表示状態の処理を確認して設定できます。

onPostExecute()を使用することで、AsyncTask実装のDoInBackground()メソッドの結果に基づいて、UIスレッドで直接カードを最終的なビュー状態に戻すことができます。

関連する問題