2016-09-16 7 views
-1

Я пытаюсь сделать игру типа whackamole. Я включил ImageViews hole1> отверстие 9. Вызов swapFace() меняет образ ImageView на случайный период, как я хочу.У вас возникли проблемы с CountDownTimer для игры в whackamole

Я хочу начать с вызова start(), который в onTick вызовет newPopup(). После случайного интервала до пяти секунд newpopup() должен вызвать swapface().

Вызов подкачки на собственные работы точно так же, как и должно быть, однако вызов start() не приводит к замене. У меня такое чувство, что я пропускаю что-то очевидное и ценю указатель.

private void start(){ 

    CountDownTimer myCount = new CountDownTimer(60000, 800){ 

     @Override 
     public void onTick(long millisUntilFinished) { 

      newPopup(); 
     } 

     @Override 
     public void onFinish(){} 
    }; myCount.start(); 
} 

private void newPopup(){ 

    Random rand = new Random(); 

    int w = rand.nextInt(5000); 

    CountDownTimer myCount3 = new CountDownTimer(w, 100) { 
     @Override 
     public void onTick(long millisUntilFinished) { 

     } 

     @Override 
     public void onFinish() { 

      swapFace(); 

     } 
    }; 
} 

private void swapFace(){ 

    Random rand = new Random(); 
    int holeNo = rand.nextInt(9); 

    final ImageView x; 

    if (holeNo ==0){ x = (ImageView) findViewById(R.id.hole1);} 
    else if (holeNo ==1){ x = (ImageView) findViewById(R.id.hole2);} 
    else if (holeNo ==2){ x = (ImageView) findViewById(R.id.hole3);} 
    else if (holeNo ==3){ x = (ImageView) findViewById(R.id.hole4);} 
    else if (holeNo ==4){ x = (ImageView) findViewById(R.id.hole5);} 
    else if (holeNo ==5){ x = (ImageView) findViewById(R.id.hole6);} 
    else if (holeNo ==6){ x = (ImageView) findViewById(R.id.hole7);} 
    else if (holeNo ==7){ x = (ImageView) findViewById(R.id.hole8);} 
    else { x = (ImageView) findViewById(R.id.hole9);} 

    x.setImageResource(R.drawable.sad); 

    int timeUp = rand.nextInt(3000) + 500; 

    CountDownTimer myCount = new CountDownTimer(timeUp, 100){ 

     @Override 
     public void onTick(long millisUntilFinished) { 

     } 
    } 
} 
+0

Вы можете вызвать 'newPopup()' до того, как закончится предыдущий 'CountTimer'? – c0der

+0

см. Http://stackoverflow.com/help/someone-answers – c0der

ответ

0

Я предполагаю, что вы хотите, чтобы предотвратить newPopup() вызывается прежде, чем его предыдущий экземпляр CountTimer закончен. Вы можете сделать это с помощью synchronized, или сделать клеща в myCount больше w (5000):

CountDownTimer myCount = new CountDownTimer(60000, 6000) 

Или вводят поле

private newPopupRunning = false; 

И использовать его:

private void newPopup(){ 

    if(newPopupRunning) return; 
    newPopupRunning=true; 

    Random rand = new Random(); 
    int w = rand.nextInt(5000); 

    CountDownTimer myCount3 = new CountDownTimer(w, 100) { 
     @Override 
     public void onTick(long millisUntilFinished) { 

     } 

     @Override 
     public void onFinish() { 

      newPopupRunning=false; 
      swapFace(); 

     } 
    }; 
}