したがって、次のようにスコアを保持するための TextView を使用したアクティビティがあります。
public class PlayGameActivity extends Activity {
private GameThread mGameThread;
private GameView mGameView;
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_game);
final TextView scoreView = (TextView) findViewById(R.id.textView2);
mGameView = (GameView) findViewById(R.id.gameView1);
mGameThread = mGameView.getThread();
mHandler.post(new Runnable() {
@Override
public void run() {
if (mGameView != null) {
scoreView.setText(mGameThread.getScore());
}
}
});
}
}
次に、GameView で関数を次のように宣言します。
class GameView extends SurfaceView implements SurfaceHolder.Callback {
class GameThread extends Thread {
int score = 0;
public String getScore(){
return Integer.toString(score);
}
@Override
public void run() {
synchronized (mSurfaceHolder) {
if (something){
score++
}
}
}
}
}
問題は、mGameThread.getScore() がスコアが更新されているのに更新されていないかのように常に 0 を返すことです。
誰かが刺激を持っているなら、それは大歓迎です。また、上記のスニペットから多くの不要なコードを取り除きました。全文を見たい場合は、次の場所で行うことができます。