【发布时间】:2019-04-27 03:01:02
【问题描述】:
现在,我正在使用 LibGDX 在 Android Studio 中编写一个可以在桌面和 Android 设备上运行的视频游戏。
在游戏的某些部分,我想使用 Sound 变量播放音效:
public Sound sound5;
在Screen的show()函数中,我通过设置音效音频文件的路径来初始化声音:
sound5 = Gdx.audio.newSound(Gdx.files.internal("C:/Users/coder/Desktop/Catacombs - Copy/android/res/raw/nff_confirm_02.wav"));
然后,在 hide() 函数中,我处理 sound 变量:
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 文件夹内的 raw 文件夹中。文件名没有任何大写或空格,所以这应该不是问题。
我尝试了音频文件的多个文件路径,例如:
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 目录中有一个“assets”目录,但是每当我尝试将正在使用的音频文件粘贴到 assets 目录时,它会自动将文件放入android 目录,所以我认为这不是问题。
欢迎任何建议来帮助我在 LibGDX 中播放声音文件,而我的文件路径不会给我 FileNotFoundException。
【问题讨论】:
标签: javascript android-studio libgdx