ユーザーが近接攻撃と遠隔攻撃を選択できるようにする戦闘システムをセットアップしようとしています (2 つのラジオ ボタンのいずれかを選択します)。変数に基づいて、ボタンが「範囲外」、「近接攻撃」、「攻撃範囲」、「リロード範囲」などのアクションを言うことができます。onresume radioButtons には正しいテキストがあります。初めて遠隔武器を発射した後 (遠隔武器が既にリロードされた状態で戦闘が開始されます) rangeRadio のテキストは「リロード範囲」に変わりますが、武器が「リロード」されても「リロード範囲」から「攻撃範囲」に戻りません。私がターンを終了するとき(およびセットアクションを実行するとき)にダメージを与えます。武器のリロードに 2 ターンかかる場合。2 ターンかけてリロードし、ホーム ボタンをクリックしてアクティビティに戻ると、テキストが正しく設定され、「
radioButtons を見つけます。最初に遠隔武器装備があるかどうかを確認する if ステートメント (rangeId == 50 は武器がないことを意味します)、次に武器が装填されているかどうかを確認し (int rangeReload = 100)、最後に攻撃範囲内にあるかどうかを確認します/火。
private void setActions(){
RadioButton meleeRadio = (RadioButton) findViewById(R.id.meleeRadio);
RadioButton rangeRadio = (RadioButton) findViewById(R.id.rangeRadio);
if (meleeRange >= distance){meleeRadio.setText(meleeString);}else{meleeRadio.setText(oorString);}
if (rangeId == 50){rangeRadio.setText(norangeString);}else{if(rangeReload<=99){rangeRadio.setText(reloadString);}else{
if (rangeRange >= distance){rangeRadio.setText(rangeString); Log.e(rangeString, "Range Attack called");}else{rangeRadio.setText(oorString);}}}
}
setActions(); を呼び出します。2か所で。preCombat() -> layoutcombat() 経由の onresume で
@Override
protected void onResume() {
new pullCombatActions().execute();
new prepCombat().execute();
super.onResume();}
private class prepCombat extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
playerBattlePrep();
findNPC();
return null;}
@Override
protected void onPostExecute(String result) {
new layoutCombat().execute();
}
}
private class layoutCombat extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
startCombat();
pullCombatText();
return null;}
@Override
protected void onPostExecute(String result) {
setActions();
popStats();
refreshStats();
combatStartText();}
}
setActions(); と呼ぶ 2 番目の場所。戦闘ターンの最後に実行して画面を更新し、ロールを介して何が起こったかをユーザーに表示する AsyncTask にあります。
private class replaceScreen extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
pullCombatStory();
return null;
}
@Override
protected void onPostExecute(String result) {
refreshStats();
refreshCombatStory();
highLightPlayerActions();
highLightNpcActions();
setActions();
}
}
rangeRadio を設定するときに if ステートメントの途中で停止するように見える理由がわかりませんが、onResume を使用すると、完全に完了し、rangeRadio の適切なテキストを表示できます。