Проблемы с запуском игры и музыки (одновременно) при нажатии «Run» на Eclipse - PullRequest
1 голос
/ 29 марта 2019

У меня есть этот код для воспроизведения музыки (найден в Интернете):

import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;

public class MusicBackground {
    public static void main(String[] args) throws Exception {


        URL url = MusicBackground.class.getResource("backgroundMusic.wav");
        AudioClip clip = Applet.newAudioClip(url);
        clip.play();
        Thread.sleep(1000);
        clip.loop();
    }
}

Работает в одиночку.Но дело в том, что после того, как я внедрил его в свою игру, он либо воспроизводит музыку, когда запускаю музыкальный класс, либо когда я запускаю всю игру, он запускает игру без музыки.Вот мой класс Boot для моей игры:

import static helpers.Artist.BeginSession;
import org.lwjgl.opengl.Display;
import helpers.Clock;
import helpers.StateManager;

public class Boot {
    public Boot() {

        //Call static method in Artist class to initialize OpenGL calls
        BeginSession();

        //Main game loop
        while (!Display.isCloseRequested()) {
            Clock.update();
            StateManager.update();
            Display.update();
            Display.sync(60);
        }
        Display.destroy();
    }

    public static void main(String[] args) {
        new Boot();
    }
}

Я знаю, что класс музыкального фона находится в общедоступном static void main.Но как мне внедрить его в загрузочный класс?

1 Ответ

1 голос
/ 29 марта 2019

Измените класс фоновой музыки, чтобы реализовать работоспособный:

import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;
import java.lang.Runnable;

public class MusicBackground implements Runnable {

public void run() throws Exception {
URL url = MusicBackground.class.getResource("backgroundMusic.wav");
AudioClip clip = Applet.newAudioClip(url);
clip.play();
Thread.sleep(1000);
clip.loop();
}
}

Затем вы можете создать тему для фоновой музыки в основной теме вашей игры. Если вы просто направите или вставите этот код фоновой музыки в основной игровой цикл, то вызов .sleep приведет к тому, что вся программа перейдет в спящий режим (поскольку в настоящее время это один поток). Итак, вот как будет выглядеть ваш основной метод:

import static helpers.Artist.BeginSession;
import org.lwjgl.opengl.Display;
import helpers.Clock;
import helpers.StateManager;

public class Boot {

public Boot() {

    //Call static method in Artist class to initialize OpenGL calls
    BeginSession();
    Thread backgroundPlayer;
    Try {
        backgroundPlayer = new Thread(new MusicBackground());
        backgroundPlayer.start();
    }
    catch(Exception e)
    {
        System.out.println("Problem firing the background thread");
        e.printStackTrace();
    }

    //Main game loop
    while (!Display.isCloseRequested()) {
        Clock.update();
        StateManager.update();
        Display.update();
        Display.sync(60);
    }
    Display.destroy();
}

public static void main(String[] args) {
new Boot();
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...