Допустим, у меня есть основной 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 () внутри этого объекта
Примечание для себя. Не делайте этого.
Многопоточность неправильным образом, в простом примере 243 максимальных потока, идущих в любой точке