声音文件在带有LibGDX的桌面上运行良好,但在Android设备上崩溃

时间:2018-11-25 04:24:29

标签: javascript android-studio libgdx

现在,我正在使用LibGDX在Android Studio中编写一个视频游戏,该游戏可以在台式机和Android设备上运行。

在游戏的某些部分,我想使用Sound变量播放声音效果:

public Sound sound5;

在屏幕的show()函数中,我通过设置声音效果音频文件的路径来初始化声音:

sound5 = Gdx.audio.newSound(Gdx.files.internal("C:/Users/coder/Desktop/Catacombs - Copy/android/res/raw/nff_confirm_02.wav"));

然后,在hide()函数中,设置声音变量:

sound5.dispose();

在按钮的功能之一中,我播放声音:

sound5.play();

当我在桌面上运行游戏时,只要按一下按钮,游戏就会运行得很好,并且可以播放声音文件,但是当我尝试在Android设备上运行游戏时,游戏一旦崩溃就会出现FileNotFoundException异常启动。这是崩溃的日志:

E/AndroidRuntime: FATAL EXCEPTION: GLThread 24292
              Process: com.efe.gamedev.catacombs, PID: 24651
              com.badlogic.gdx.utils.GdxRuntimeException: Error loading audio file: C:/Users/coder/Desktop/Catacombs - Copy/android/res/raw/nff_confirm_02.wav
              Note: Internal audio files must be placed in the assets directory.
                  at com.badlogic.gdx.backends.android.AndroidAudio.newSound(AndroidAudio.java:181)
                  at com.efe.gamedev.catacombs.MenuScreen.show(MenuScreen.java:117)
                  at com.badlogic.gdx.Game.setScreen(Game.java:61)
                  at com.efe.gamedev.catacombs.CatacombsGame.showMenuScreen(CatacombsGame.java:25)
                  at com.efe.gamedev.catacombs.CatacombsGame.create(CatacombsGame.java:20)
                  at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:311)
                  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1537)
                  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1253)
               Caused by: java.io.FileNotFoundException: C:/Users/coder/Desktop/Catacombs - Copy/android/res/raw/nff_confirm_02.wav
                  at android.content.res.AssetManager.openAssetFd(Native Method)
                  at android.content.res.AssetManager.openFd(AssetManager.java:370)
                  at com.badlogic.gdx.backends.android.AndroidFileHandle.getAssetFileDescriptor(AndroidFileHandle.java:237)
                  at com.badlogic.gdx.backends.android.AndroidAudio.newSound(AndroidAudio.java:176)
                  at com.efe.gamedev.catacombs.MenuScreen.show(MenuScreen.java:117) 
                  at com.badlogic.gdx.Game.setScreen(Game.java:61) 
                  at com.efe.gamedev.catacombs.CatacombsGame.showMenuScreen(CatacombsGame.java:25) 
                  at com.efe.gamedev.catacombs.CatacombsGame.create(CatacombsGame.java:20) 
                  at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:311) 
                  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1537) 
                  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1253) 

音频文件“ nff_confirm_02.wav”确实存在于res文件夹内的原始文件夹中。该文件名没有大写字母或空格,因此应该没有问题。

我尝试了音频文件的多个文件路径,例如:

sound5 = Gdx.audio.newSound(Gdx.files.internal("android/res/raw/nff_confirm_02.wav"));

或者只是:

sound5 = Gdx.audio.newSound(Gdx.files.internal("raw/nff_confirm_02.wav"));

但是,两者都必须不正确,因为游戏在台式机和Android上都崩溃了。 我不确定为防止Android设备向我发送FileNotFoundException而需要采取的措施。

顺便说一句,我在日志中查找了崩溃,发现它说:

Note: Internal audio files must be placed in the assets directory.

我的LibGDX项目的android目录中有一个“资产”目录,但是每当我尝试将我正在使用的音频文件粘贴到资产目录中时,它都会自动将该文件放置到资产目录中的“ res”目录中。 android目录,所以我不认为这是问题所在。

任何建议都可以帮助我在LibGDX中播放声音文件,而我的文件路径却没有FileNotFoundException。

1 个答案:

答案 0 :(得分:2)

您的所有资产都应位于LibGDX项目中android模块的assets文件夹中。

请查看Project Explorer:

enter image description here

通过这种方式创建声音对象:

Sound sound = Gdx.audio.newSound(Gdx.files.internal("sounds/nff_confirm_02.wav"));
sound.play();

对于台式机,配置应如下所示:

enter image description here

交叉检查工作目录路径。