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 如果停止文件并为另一次迭代执行重新加载是否要求内存泄漏。

希望有更多经验的人来回答,但也许这些想法会帮助您同时想出一些办法。