所以我有一个运行简单的蛇和梯子游戏的活动,我想让玩家点击一个按钮然后移动,随后计算机会移动。我的问题是,一旦玩家移动,计算机立即移动。
相反,我希望活动在计算机移动之前等待。我经常环顾四周,发现等待涉及使用一个线程,但我没有实现它而没有我的应用程序崩溃
我尝试宣布一个帖子:
final Runnable runnable = new Runnable() {
@Override
public void run()
{
while (true)
{
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
};
Thread thread= new Thread(runnable);
按钮的onClick()方法:
Button rollButton = (Button) (findViewById(R.id.rollButton));
rollButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//executes only if current player is a human
if(GAME_BOARD.getCurrentPlayer().isHuman()) {
GAME_BOARD.rollDie(); // rolls the die
showDie(GAME_BOARD); // displays die on screen
GAME_BOARD.move(); // moves the player and sets next player as current player
playerTurn.setText(GAME_BOARD.getCurrentPlayer().getName() +"'s turn");// sets TextView to display who's player's turn it is
thread.start();
if(!GAME_BOARD.getCurrentPlayer().isHuman()) {
GAME_BOARD.rollDie();
showDie(GAME_BOARD);
GAME_BOARD.move();
playerTurn.setText(GAME_BOARD.getCurrentPlayer().getName() +"'s turn");
}
}
}
});
所以再一次,我的问题是,如何让它在第二个if语句执行之前,活动等待,比如4秒?
答案 0 :(得分:3)
您可以使用句柄在延迟一段时间后发布在runnable中定义的任务
使用这个 内部活动定义
Handler hand = new Handler();
并像这样在
Runnable run = new Runnable() {
@Override
public void run() {
**your Task here.......**
}
};
点击事件
btnStartShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
hand.postDelayed(run,3000); // For delay three seconds
}
});
还通过在适当的地方调用以下句子来删除所有待处理的消息
hand.removeCallbacksAndMessages(null);
答案 1 :(得分:2)
您可以使用Handler.postDeleayed
。您必须提供Runnable执行和延迟时间(以毫秒为单位)。 {0}将在UI线程上执行
答案 2 :(得分:1)
使用CountDownTimer:
CountDownTimer timer = new CountDownTimer(4000, 1000) {
@Override
public void onFinish() {
*function containing the second statement*
}
@Override
public void onTick(long millisLeft) {
// not ticking
}
};
并在点击监听器的onClick方法中使用:
timer.start();
答案 3 :(得分:0)
尝试以下方法,
rollButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Runnable runnable = new Runnable() {
@Override
public void run() {
// whatever you would like to implement when or after clicking rollButton
}
};
rollButton.postDelayed(runnable, 5000); //Delay for 5 seconds to show the result
}