我正在尝试创建一个迷你游戏循环,用户有10秒钟点击按钮或输掉游戏。当我运行while游戏循环时,我希望while循环启动计时器,然后等待计时器用完或用户单击按钮。此外,当代码运行时,应用程序在while循环中崩溃。不知道如何继续。
我对android很新。 提前谢谢。
public class MainGame extends Activity implements OnClickListener {
ProgressBar progress1;
Boolean gameon = true;
Button option1;
Button option2;
Button option3;
private CountDownTimer countDownTimer;
private final long startTime = 10*1000;
private final long interval= 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_game);
Log.d("Mark", "justCreated Completed");
initializebuttons();//also initializes timer, buttons, text, etc.
Log.d("Mark", "Initialize Buttons Function Completed");
maingameloop();
//Drawable draw = getResources().getDrawable(R.drawable.custom_progress_bar);
//progress1.setProgressDrawable(draw);
}
private void initializebuttons(){
option1 = (Button) findViewById(R.id.buttonchoice1);
option1.setOnClickListener(this);
option2 = (Button) findViewById(R.id.buttonchoice2);
option2.setOnClickListener(this);
option3 = (Button) findViewById(R.id.buttonchoice3);
option3.setOnClickListener(this);
countDownTimer = new MyCountDownTimer (startTime, interval);
Log.d("Mark", "Inside the initialize buttons function");
}
private void maingameloop(){
while (gameon){
Log.d("Mark", "while loop running");
countDownTimer.start();
}
}
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval){
super (startTime, interval);
synchronized(this){
}
}
@Override
public void onFinish() {
option1.setBackgroundColor(getResources().getColor(R.color.LightGreen));
}
@Override
public void onTick(long millisUntilFinished) {
}
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.buttonchoice1:
break;
case R.id.buttonchoice2:
break;
case R.id.buttonchoice3:
default:
break;
}
}
}
答案 0 :(得分:0)
我想我得到了你的意思,如果有的话,试试这个
而不是initializeButtons(),执行
countDownTimer = new MyCountDownTimer (startTime, interval);
countDownTimer.start();
然后在CountDownTimer的onStart()中调用initializeButtons();
private void initializebuttons(){
option1 = (Button) findViewById(R.id.buttonchoice1);
option1.setOnClickListener(this);
option2 = (Button) findViewById(R.id.buttonchoice2);
option2.setOnClickListener(this);
option3 = (Button) findViewById(R.id.buttonchoice3);
option3.setOnClickListener(this);
Log.d("Mark", "Inside the initialize buttons function");
}
在onClick(View v)中,假设答案和按钮文本相同
if(v.getText().toString().equals(answer)){
// do what you would do if you win
win = true; // win is a private class boolean I've created for you
countDownTimer.cancel();
}
然后在onFinish()
if(!win){
// do what you want for a loss
}
这将使您确定是否在限制内单击了按钮。如果是这样你赢了,如果不是你输了。这不完全基于您的代码,但可以修改为可以工作。
答案 1 :(得分:0)
有了这个
while (gameon){
Log.d("Mark", "while loop running");
countDownTimer.start();
}
您将运行代码
countDownTimer.start();
每次迭代我都确定不是你想要的东西。您根本不需要(想要?)while loop
。只需在需要时启动计时器,然后在onFinish()
运行您想要在时间用完时运行的代码,并将此代码也放在Button
点击中。显然你可以将这一切都放在一个函数中,并从onFinish()
和onClick()
或其他任何东西调用该函数。
我还建议检入onClick()
或运行代码的方法取消计时器并将其初始化为null
。