使用LWJGL和Slick-Util加载声音

时间:2013-05-23 14:38:30

标签: java audio nullpointerexception lwjgl

我正在创建一个基本游戏,我可以加载图片。现在,我正在尝试加载声音,但我一直在 NullPointerExceptions 。我100%确定路径是正确的,我已经尝试加载多个声音,我总是得到这个错误。我只能使用一次。

这是我的声音库:

public class SoundBank {

    public static Audio oggEffect;

    public SoundBank () {
        try {
            oggEffect = AudioLoader.getAudio("OGG", ResourceLoader.getResourceAsStream("Res/ping_pong_8bit_plop.ogg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

我的执行代码:

else if (Keyboard.isKeyDown(Keyboard.KEY_8)) {
    SoundBank.oggEffect.playAsSoundEffect(1.0f, 1.0f, true);
}

2 个答案:

答案 0 :(得分:0)

我很确定它应该是

/res/ping_pong...ogg

res/ping_pong...ogg

答案 1 :(得分:0)

永远不会通过构造函数初始化静态变量。

方法1(这可以防止您必须将new SoundBank();调用到init):

public class SoundBank {

    public static Audio oggEffect;

    static {
        try {
            oggEffect = AudioLoader.getAudio("OGG", ResourceLoader.getResourceAsStream("Res/ping_pong_8bit_plop.ogg"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

方法2(我的工作方式如下):

public class SoundUtils {
    public static void playSound(String res) {
        try {
            Audio a = AudioLoader.getAudio("OGG", ResourceLoader.getResourceAsStream("res/sfx/" + res + ".ogg"));
            a.playAsSoundEffect(1, 1, false);
        } catch (IOException e) {
            e.printStackTrace();
            //You don't need this.
            LoggerSys.get().getCurrentLogger().log("wtf i haz dun err0rz (" + e.toString() + ")");
        }
    }
}

编辑:哦,并确保路径正确(Res/...而不是res/...等。)