我在这部分代码中遇到了问题,我正在使用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如果停止文件并执行另一次迭代的重新加载是否会请求内存泄漏。
希望有更有经验的人会回答,但也许这些想法会帮助你在此期间弄清楚一些事情。