我正在尝试设置一个战斗系统,允许用户在近战攻击和远程攻击之间进行选择(从两个单选按钮中选择一个)。基于变量按钮可以说什么动作,“超出范围”,“攻击近战”,“攻击范围”,“重新加载范围”。 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();在两个地方。在onresume通过preCombat() - &gt; 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的正确文本。
答案 0 :(得分:0)
只是一个建议,尝试移动
RadioButton meleeRadio = (RadioButton) findViewById(R.id.meleeRadio);
RadioButton rangeRadio = (RadioButton) findViewById(R.id.rangeRadio);
在onResume方法之外,并将其放在onCreate(或onActivityCreated,如果它是一个片段)方法上,并将rangeRadio和meleeRadio作为私有变量放在您的活动(或片段)中
然后,由于你使用的是链接的AsyncTasks,我不确定你的所有onPostExecute是否都在你的UI线程上运行,所以我会尝试将你对rangeRadio.setText()的所有调用封装在这样的处理程序上:< / p>
关于你的活动onCreate:
handler = new Handler();
然后在设置文本时执行:
handler.post(new Runnable() {
public void run() {
rangeRadio.setText("...");
}
});
答案 1 :(得分:0)
TY帮助。我急忙找到一个好的停止场所,我忘了在角色重新加载时设置AsyncTask。所以当玩家没有进攻时因为超出范围或玩家正在重装时没有调用setActions()。