Воспроизведение звука с моего L oop один раз без остановки остальной петли - PullRequest
0 голосов
/ 06 апреля 2020

Допустим, у меня есть основной GameL oop

Внутри этого l oop У меня есть свои игровые обновления

Я обрабатываю свои События для тестирования столкновения Sprite с каждой итерацией

Если столкновение истинно, воспроизведите аудиофайл

Здесь возникает проблема

Аудиоклип будет воспроизводиться быстро, пока игра заморожена

или

Он будет играть с задержкой, как я хочу, но вся игра остановится, кроме аудиоклипа.

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

Примечание. Я бы расширил Thread для основного класса, но уже расширяю Холст, необходимый.

    public Main()
    {

        boolean running = true;

        while(running)
        {

            // check for collision (returns boolean)
            // if true proceed to execute Entity.doLogic()
            // this then activates the AudioClip class' .playAudioClip(this, path)
            // the audio Clip is then played and once it's done it'll return
            // returns and instantly goes back to playing again
            // meanwhile the loop Freezes up on me.

        }

    }

И это фактический класс Sound.class

public class Sounds
{

    public void startSound()
    {
        String path = "path";
        playAudioClip(game, path);
    }

    public void playAudioClip(String path)
    {
        try
        {
            Clip clip = AudioSystem.getClip();
            clip.open(AudioSystem.getAudioInputStream(new File(path)));
            clip.start();
        }
        catch(Exception e)
        {
            System.out.println("Problem loading audio file");
        }
        try{Thread.sleep(500);}catch(Exception ex){System.out.println("Problem with Sleep");};
    }
}

Я пробовал нижеприведенную и ту же ситуацию (вызывая ее с помощью s.start () и s .run () без разницы) с помощью .start () выдает ошибку в потоке, воссоздает очень быстро и делится) ) определяет только run () внутри этого объекта

enter image description here Примечание для себя. Не делайте этого.

Многопоточность неправильным образом, в простом примере 243 максимальных потока, идущих в любой точке

...