我有角色和怪物,想要模拟战斗。为此,我创建了两个主题,一个是角色攻击,另一个是怪物攻击。 角色和怪物有不同的攻击速度,所以他们的线程等待"时间会有所不同。我的方法看起来像这样(我总结了方法):
public void attack(){
//Character's attack thread
Thread characterAttackThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while(character.getHp()>0 && monster.getHp()>0){
int damage = character.getDamage();
monster.setHp(monster.getHp() - damage);
Thread.sleep(character.getSpeed());
}
if(character.getHp()<=0){
updateScreen("Character died"); //shows message to user
}else{
updateScreen("Monster died"); //shows message to user
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
//Monster's attack thread
Thread monsterAttackThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while(character.getHp()>0 && monster.getHp()>0){
int damage = character.getDamage();
monster.setHp(monster.getHp() - damage);
this.wait(character.getSpeed());
}
Thread.sleep(monster.getSpeed());
} catch (Exception e) {
e.printStackTrace();
}
}
});
characterAttackThread.start();
monsterAttackThread.start();
}
但是当我到达updateScreen("Message");
时,我收到了错误
Only the original thread that created a view hierarchy can touch its views.
我能做些什么才能解决问题?
提前致谢!
答案 0 :(得分:1)
你不能从除UI线程之外的任何其他线程修改android工具包
此链接将为您提供说明:
http://developer.android.com/guide/components/processes-and-threads.html
您可以执行以下操作之一:
在您的主题中使用以下代码:
id: FactoryGirl.create(:opinion)
public void run(){
MainActivity.this.runOnUiThread(new Runnable() {
});
希望这有帮助