你好,开发人员,这个问题对一些读者来说可能是愚蠢的,它以前可能已经回答过了,但是我在这个论坛上看到了很多关于我的问题的答案,但是我无法理解其中的一个。所以,如果可以的话,请友好地回答我的问题。
问题是,我正在尝试开发类似于游戏的东西,并试图将计算机或人工智能玩家添加到人类玩家身上。
为此,我在OnCreate
方法中添加了一个OnCreate
,它只工作了一次,因为OnCreate只执行了一次。但是,当我试图在一个runnable和那个while循环中添加一个while循环时,我添加了相同的CountdownTimer,但是它开始给我带来错误。
if(player2_name.equals("Computer")) {
Runnable r = new Runnable() {
@Override
public void run() {
while (player2_name.equals("Computer")) {
CountDownTimer computer_player;
ct = 5;
firstplayer_game_button.setClickable(false);
computer_player = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
ct = ct - 1;
// timer_counter.setText("" + ct);
if (ct == 1) {
firstplayer_game_button.setClickable(true);
}
}
@Override
public void onFinish() {
// secondplayer_game_button.setBackgroundResource(R.drawable.button_player_2);
// firstplayer_game_button.setBackgroundResource(R.drawable.button_player_1);
// firstplayer_game_button.setClickable(true);
if (player2_name.equals("Computer")) {
secondplayer_game_button.setClickable(false);
} else {
secondplayer_game_button.setClickable(true);
}
if (checker != 1) {
Click_Condition_checker(2);
}
}
};
computer_player.start();
}
}
};
Thread mythread = new Thread(r);
mythread.start();
我知道Runnable不能直接与UI交互,为此我们需要处理程序,这就是我注释所有UI接口的原因。但还是没有运气。不幸的是,我无法识别这些错误。如果有人能帮忙的话,对我这样一个愚蠢的开发人员来说,这将是非常好的。
发布于 2018-06-02 22:06:03
首先,您不需要使用Runnable
来使CountDownTimer
工作。这是因为如果运行在CountDownTimer
中的代码可以直接与UI交互。
第二,您不应该在代码中使用while循环。特别是对于以下代码:
while (player2_name.equals("Computer")) {
CountDownTimer computer_player;
...
computer_player = new CountDownTimer(5000, 1000) {}
...
}
这意味着要创建新对象,直到耗尽所有设备内存,或者直到player2_name不是"Computer"
为止。
你应该用布尔标志代替。
我认为您需要的是通过这样的方法重新启动CountDownTimer
:
// use a more readable variable name instead of computer_player
final CountDownTimer cdtPlayer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// do something
}
@Override
public void onFinish() {
// do something
// restart to do all again
cdtPlayer.start();
}
};
cdtPlayer.start();
关于你的下列声明:
如果有人能帮忙的话,对我这样一个愚蠢的开发人员来说,这将是非常好的。
当开始学习的时候,每个人都是愚蠢的。不要对自己太苛刻;)
发布于 2018-06-02 22:04:15
不确定你的目标,但你的时间循环似乎很麻烦。在测试一个字符串而不改变它的值的时候,它会一遍又一遍地运行(然后创建许多我不认为是您意图的CountdownTimer )。
https://stackoverflow.com/questions/50663603
复制相似问题