Java 游戏中的重叠音乐 LibGDX 实现
Overlapping music in a Java game with LibGDX implementation
我在这部分代码中遇到问题,我正在 Java 中创建一个非常简单的游戏并实现 LibGDX。
我有三种不同的游戏状态,它们在三种不同的 类:
中处理
- 创建状态
- 菜单状态
- 播放状态
除了一件事,它们都工作得很好。当玩家进入游戏结束并且状态更改模式以重新开始或返回菜单时,我插入并在 StateCreation 中创建的音乐应该重新开始。这不会发生并且音乐重叠
public class GameBarbo extends ApplicationAdapter {
//impostazioni base dell'applicazione
public static final int WIDTH = 480;
public static final int HEIGHT = 800;
public static final String TITLE = "Cavaliere";
private GameStateManager gsm = new GameStateManager();
private SpriteBatch batch;
private Music music;
@Override
public void create () {
batch = new SpriteBatch();
music = Gdx.audio.newMusic(Gdx.files.internal("sound.mp3"));
music.setVolume(0.1f);
music.play();
Gdx.gl.glClearColor(1, 0, 0, 1);
gsm.push(new MenuState(gsm));
}
@Override
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
gsm.update(Gdx.graphics.getDeltaTime());
gsm.render(batch);
}
@Override
public void dispose() {
super.dispose();
music.dispose();
}
}
您的代码看起来非常像我在 this guide 中找到的代码(尽管它们不包括 super.dispose()
。)
有没有可能你的游戏状态改变的时候,dispose()
方法没有执行?我很久没用过 libgdx,但可能 dispose()
只在您退出程序时执行。
我从 this wiki 看到 Music
class 有一个 stop()
方法。也许这需要在游戏结束时直接调用。但是 IDK 如果停止文件并为另一次迭代执行重新加载是否要求内存泄漏。
希望有更多经验的人来回答,但也许这些想法会帮助您同时想出一些办法。
我在这部分代码中遇到问题,我正在 Java 中创建一个非常简单的游戏并实现 LibGDX。 我有三种不同的游戏状态,它们在三种不同的 类:
中处理- 创建状态
- 菜单状态
- 播放状态
除了一件事,它们都工作得很好。当玩家进入游戏结束并且状态更改模式以重新开始或返回菜单时,我插入并在 StateCreation 中创建的音乐应该重新开始。这不会发生并且音乐重叠
public class GameBarbo extends ApplicationAdapter {
//impostazioni base dell'applicazione
public static final int WIDTH = 480;
public static final int HEIGHT = 800;
public static final String TITLE = "Cavaliere";
private GameStateManager gsm = new GameStateManager();
private SpriteBatch batch;
private Music music;
@Override
public void create () {
batch = new SpriteBatch();
music = Gdx.audio.newMusic(Gdx.files.internal("sound.mp3"));
music.setVolume(0.1f);
music.play();
Gdx.gl.glClearColor(1, 0, 0, 1);
gsm.push(new MenuState(gsm));
}
@Override
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
gsm.update(Gdx.graphics.getDeltaTime());
gsm.render(batch);
}
@Override
public void dispose() {
super.dispose();
music.dispose();
}
}
您的代码看起来非常像我在 this guide 中找到的代码(尽管它们不包括 super.dispose()
。)
有没有可能你的游戏状态改变的时候,dispose()
方法没有执行?我很久没用过 libgdx,但可能 dispose()
只在您退出程序时执行。
我从 this wiki 看到 Music
class 有一个 stop()
方法。也许这需要在游戏结束时直接调用。但是 IDK 如果停止文件并为另一次迭代执行重新加载是否要求内存泄漏。
希望有更多经验的人来回答,但也许这些想法会帮助您同时想出一些办法。