我正在尝试设置一个战斗系统,允许用户在近战攻击和远程攻击之间进行选择(选择两个单选按钮之一)。基于变量按钮可以说什么动作,“超出范围”,“攻击近战”,“攻击范围”,“重新加载范围”。onresume 单选按钮具有正确的文本。在第一次射击远程武器后(战斗开始时远程武器已经重新加载) 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(); 在两个地方。在 onresume 通过 preCombat() -> layoutcombat()
@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(); 在我的 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 显示正确的文本。