Задержка между звуковыми играми? - PullRequest
1 голос
/ 11 апреля 2011

Я создаю некую простую игру, это красный квадрат, по которому вы можете перемещаться с помощью клавиш со стрелками, я сделал готовый объект, он обнаруживает, когда вы в него входите. Теперь я сделал так, чтобы, если «игрок» пересекался с «финишным объектом», он воспроизводил звук, но он проигрывал звук КАЖДЫЙ тик. Я попробовал Thread.sleep () и wait (), но это заставило мою игру спать, а не только задержку звука. Мой метод звукового сопровождения:

public void playSound( String filename ) throws IOException{
    InputStream in = new FileInputStream(filename);
    AudioStream as = new AudioStream(in);
    AudioPlayer.player.start(as);
}

и мой игрок заканчивает пересечение:

        //PLAYER1 LEVEL FINISHING
    if( player.getBounds().intersects(levelfinish.getBounds())){
        message = "A winner is you!";
        try {
            playSound("D:/BadGame/Sounds/winner.wav");
        } catch(Exception ex){
            ex.printStackTrace();
        }
    }
Сообщение

- это просто строка, которая отображается в середине экрана, все работает, но требует некоторой задержки, поэтому звук будет воспроизводиться не постоянно, а через каждые 10 секунд или только при пересечении с это, один раз. Ребята, можете ли вы дать мне понять, как это сделать? Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 апреля 2011

Меня слегка смущает то, что вы имеете в виду под галочкой. Если вы хотите, чтобы музыка воспроизводилась только один раз, простым решением было бы объявить булево поле где-нибудь, чтобы определить, был ли уже победитель. Тогда проигрывайте звук только в том случае, если не было победителя.

0 голосов
/ 11 апреля 2011

Причина, по которой звук продолжает воспроизводиться, заключается в том, что условия все еще остаются верными в каждом такте. Пересечение остается действительным после завершения звука, поэтому звук будет воспроизводиться снова.

Очень упрощенный способ предотвратить повторение - использовать переменную для отслеживания того, воспроизводился ли звук. Как то так, хотя это не проверено:

Поместите эту часть где-то, что не будет меняться каждый тик:

boolean soundPlayed = false;

Используйте эту часть в своей функции

 //PLAYER1 LEVEL FINISHING
 if( player.getBounds().intersects(levelfinish.getBounds())){
        message = "A winner is you!";
        if (soundPlayed == false) {
            try {
               playSound("D:/BadGame/Sounds/winner.wav");
               soundPlayed = true;
            } catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
...