现在,我正在使用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。