使用LibGDX实现的Java游戏中的重叠音乐



我在这部分代码中遇到了问题,我正在使用LibGDX的实现在Java中创建一个非常简单的游戏。我有三种不同的游戏状态,它们由三个不同的类处理:

  • StateCreation
  • MenuState
  • PlayState

它们都工作得很好,除了一件事。我在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();
}
}

您的代码看起来非常像我在本指南中找到的代码(尽管它们不包括super.dispose())

是否有可能当你的游戏状态改变时,dispose()方法没有执行?我已经很久没有使用libgdx了,但是dispose()可能只在退出程序时执行。

我从这个wiki上看到Music类有一个stop()方法。也许需要在游戏结束时直接调用。但是IDK如果停止文件并执行另一次迭代的重新加载是否会请求内存泄漏。

希望有更有经验的人会回答,但也许这些想法会帮助你在此期间弄清楚一些事情。

最新更新