gpt4 book ai didi

java - 在 Eclipse 上按 'run' 时无法(同时)启动游戏和音乐

转载 作者:行者123 更新时间:2023-11-30 05:42:21 25 4
gpt4 key购买 nike

我有这个播放音乐的代码(在网上找到):

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();
}
}

单独使用效果很好。但问题是,在我将其实现到游戏中后,它要么在我启动音乐类时播放音乐,要么在我运行整个游戏时,它在没有音乐的情况下运行游戏。这是我的游戏的引导类:

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();
}
}

我知道音乐背景类位于 public static void main 中。但如何将其实现到引导类中?

最佳答案

更改背景音乐类以实现可运行:

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 调用将导致整个程序 hibernate (因为它当前是一个线程)。所以,这就是你的 main 方法现在的样子:

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();
}
}

关于java - 在 Eclipse 上按 'run' 时无法(同时)启动游戏和音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com