【问题标题】:Sound file runs fine on Desktop with LibGDX, but crashes on android device声音文件在带有 LibGDX 的桌面上运行良好,但在 android 设备上崩溃
【发布时间】: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


    【解决方案1】:

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

    请看一下 Project Explorer :

    随时以这种方式创建声音对象:

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

    对于桌面,配置应该是这样的:

    交叉检查工作目录路径。

    【讨论】:

    • 很抱歉,我在桌面配置中没有看到工作目录路径。我使用的是 Android Studio 3.0.1,它不是最新版本。是这个问题吗?
    • 我刚刚更新到 Android Studio 3.2.1,但在桌面配置中仍然没有看到工作目录选项。我的 Gradle 版本是 3.3,不是最新版本。这会影响我看不到工作目录路径的原因吗?
    • 你能分享一下你的配置吗??
    • 好吧,我放在“assets”文件夹中的所有文件都自动转到“res”文件夹的原因是因为我将“sounds”文件夹设置为具有原始资源类型的 android 资源目录。我通过在普通目录下创建“声音”文件夹来修复它,这是一个非常简单的修复。
    • 最后,我不需要对工作目录路径做任何事情。
    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2020-07-15
    相关资源
    最近更新 更多