2015-07-31 4 views
0

У меня есть runnable, который я хочу выполнить 4 раза в секунду. Вот мой исполняемый:Обработчик - почему мой runnable не выполняется?

shoot = new Runnable() { 
     @Override 
     public void run() { 
      //Add bullet 
      parts.add(new Part(1, (int)(screenWidth*.01), 
        Part.TYPE_CIRCLE, (int)parts.get(activeShooter).center.x, 
        (int)parts.get(activeShooter).center.y)); 
      parts.get(parts.size()-1).x_vel = (int)(Math.cos(parts.get(activeShooter).rotation)*bulletSpeed); 
      parts.get(parts.size()-1).y_vel = (int)(-Math.sin(parts.get(activeShooter).rotation)*bulletSpeed); 
      activeShooter = (activeShooter == numShooters) ? 0 : activeShooter + 1; 
      shooter.postDelayed(shoot, 250); 
     } 
    }; 

И вот моя начальная установка обработчика:

private void startBullets(){ 
    Looper.prepare(); 
    shooter = new Handler(); 
    shooter.postDelayed(shoot, 250); 
} 

Во всех других моих проектах, я не должен назвать Looper.prepare, но он бросает исключение, если я не делайте этого проекта. Я не знаю почему. Я в основном скопировал рабочий код из другого проекта (который не требовал от меня вызова Looper.prepare()). Может ли кто-нибудь понять, почему мой runnable не выполняется?

ответ

0
private void startBullets(){ 
    shooter = new Handler(); 
    shooter.postDelayed(shoot, 250); 
} 

Убедитесь, что вы бросить Looper через Looper.quit(), когда вы закончите.

+0

Это, казалось, прерывало мой основной таймер, потому что когда я добавил Looper.loop(), программа перестала обновляться. (обычно обновляется 60 раз в секунду) – sadelbrid

+0

вы можете показать, как вы используете метод startBullets? это фоновый поток? –

+0

'if (! ReadyToShoot) { /* случайный материал */ } else { startBullets(); } } Эта задача выполняется в основном потоке, на который я верю. Я не очень хорошо знаком с потоками, но поток моей программы таков: всплывающие экраны экрана, затем я использую намерение ввести мой класс InGame - который содержит объект класса, с которым у меня возникают проблемы с обработчиком/runnable. Строка показана в методе, который вызывается примерно 60 раз в секунду через таймер, запланированный в моем классе InGame. – sadelbrid

Смежные вопросы