无法加载声音文件 LibGdx

2023-12-20

我想使用 AssetManager 直接从扩展 OBB 文件加载文件。我实现了自己的FileHandleResolver

public class CustomFileHandleResolver implements FileHandleResolver
{
    @Override
    public FileHandle resolve(String fileName) {
        return new CustomFileHandle(fileName);
    }
}

我将其设置为我的 AssetManager。我创建了自己的 FileHandle 并重写了 read() 函数

@Override
public InputStream read()
{
    InputStream input = null;

    try {           
        input = GameInfo.expansionFile.getInputStream(file.getPath().replace('\\', '/'));
    } catch (IOException e) {
        e.printStackTrace();
    }   

    return input;
}

它加载所有文件,如 .PNG、.PACK、.FNT,除了 .OGG 文件,所以我猜所有声音文件都不会被加载。我收到此错误:

com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load dependencies of asset: SFx/button_click.ogg

还有这个错误:

com.badlogic.gdx.utils.GdxRuntimeException: java.lang.ClassCastException: com.solidgamesstudio.threedefendersn.framework.CustomFileHandle cannot be cast to com.badlogic.gdx.backends.android.AndroidFileHandle

我读到zip不能被压缩。在7zip中我选择压缩为“Store”,这样它就根本不被压缩,但仍然出现这个问题。

我遍历了加载文件时发生的情况,发现 AssetManager 调用了我的CustomFileHandleResolver这创造了CustomFileHandle。对于每个不是 .OGG 的文件,它调用InputStream read()。在此函数中,它从 zip 加载文件,这很好。但正如我所说,当加载 .OGG 时,它不会调用此函数。所以它甚至还没有尝试从 zip 中获取文件。问题是,为什么 .OGG 文件不调用InputStream read() in CustomFileHandle()?

UPDATE

遍历多了发现不会调用InputStream read()因为它无法以某种方式从 FileHandle 创建声音。线索是

CustomFileHandle cannot be cast to AndroidFileHandle

要创建声音,您需要传递 fileHandle。

public Sound newSound (FileHandle fileHandle);

这是从调用的SoundLoader

@Override
public void loadAsync (AssetManager manager, String fileName, FileHandle file, SoundParameter parameter) {
    sound = Gdx.audio.newSound(file);
}

该 soundLoader 使用我的 CustomFileHandleResolver。我不知道声音的处理方式是否与其他类型的文件不同。但默认情况下 AssetManager 使用

public class InternalFileHandleResolver implements FileHandleResolver {
    @Override
    public FileHandle resolve (String fileName) {
        return Gdx.files.internal(fileName);
    }
}

我无法进入Gdx.files.internal看看是否对声音有任何特殊处理。

UPDATE

进一步的分析给我线索,主要问题是前面提到的。

CustomFileHandle cannot be cast to AndroidFileHandle

我不知道为什么在加载 OGG 文件时将我的 FileHandle 转换为 AndroidFileHandle 。如果它加载其他类型的文件,这可能意味着它不会为它们进行转换。这意味着OGG很特殊,需要选角。有什么线索吗?


我还没有找到从 zip 文件加载声音文件的方法。问题是AssetManager加载声音文件与其他文件类型不同。问题是它正在铸造FileHandle to AndroidFileHandle,并且自从CustomFileHandle延伸FileHandle不可能将其投射到AndroidFileHandle。我找不到解决这个问题的方法,因为它根深蒂固。

CustomFileHandle cannot be cast to AndroidFileHandle

在这种情况下,我必须从 OBB 文件中取出所有声音文件,并将它们与应用程序放在一起。我创建了 AssetManager 的另一个实例,只是为了加载声音。因此,声音会像您一样正常加载AssetManager对于我使用的任何其他类型的文件AssetManager使用我自己的FileHandlerResolver它使用我自己的FileHandle从 zip 返回文件的类。此方法的唯一问题是您只能拥有最多 50 MB 的声音文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法加载声音文件 LibGdx 的相关文章

随机推荐

  • 当前对控制器类型“DinnersController”上的操作“Index”的请求在以下操作方法之间不明确[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在尝试实现分页支持后收到此错误 我
  • 使用 np.zeros 时在 Windows 上出现 MemoryError,但在 MacOS 上则不然 [重复]

    这个问题在这里已经有答案了 我想构建一个 numpy 数组 但在具有 16 GB RAM 的 Windows 中出现 MemoryError 为了提供更多信息 详细信息如下 Python 2 7 13 Anaconda custom 64
  • 使用 log4j2.xml 的 Apache Log4j2 包特定日志记录

    我正在使用 log4j2 但我面临的问题是它记录了所有日志 我想 从特定包记录到特定文件 并将其他包记录到另一个文件 我使用 log4j2 xml 进行配置 请问有人可以帮忙吗 log4j2 xml
  • .Net Remoting 与 WCF

    我想知道我可以从 net 远程处理和 WCF 中执行相同的操作 那么为什么 WCF 比 Net 远程处理更受青睐 我可以在哪里 或在什么情况下 选择 Net 远程处理或 WCF NET 远程处理应用程序可以使用 HTTP TCP 和 SMT
  • nls - 收敛失败:奇异收敛 (7)

    下列nls代码抛出以下错误Convergence failure singular convergence 7 for fm2 for Data2 但对于相似的数据集 相同的代码可以正常工作 fm1 for Data1 适合该数据集 Dat
  • MySql 软删除

    我有一个现有的应用程序 带有 MySQL DB 我刚刚收到一个新要求 我需要从主要实体之一删除一些记录 我不想在这里应用硬删除 因为这对整个应用程序来说是有风险的 如果我使用软删除 我必须添加另一个字段 is deleted 因此我必须更新
  • javascript 中的异步等待 sqlite

    我正在看本教程 https www scriptol com sql sqlite async await php 它有一个名为 aa sqlite 的库 用于用 async await 替换 Promises 语法 I m 没有看到 aa
  • 导入并使用 Polymer-Dart 1.0.0 候选版本

    我确实喜欢 Polymer 也喜欢 Dart Polymer Dart 库几乎是 Web 开发史上最好的事情 恕我直言 Polymer 1 0 已经发布一段时间了 Google 员工正在努力构建相应的 Dart 包装器 如 Dart 的 W
  • PyQt没有button.clicked.connect函数?

    我有 PyQt4 和 python 3 4 并且出现了这个奇怪的错误 每当我尝试调用 btn clicked connect 时 Pycharm 都会抛出此错误 Cannot find reference connect in functi
  • HTTPClient 在成功之前收到两个 401(发送错误的令牌)

    我正在尝试使用以下方式与自托管 WebAPI 客户端进行通信HttpClient 客户端是使用以下代码创建的 HttpClientHandler clientHandler new HttpClientHandler UseDefaultC
  • 将加载图像添加到 jquery ajax 帖子中

    我有以下 javascript 通过 ajax 发布表单而不刷新屏幕 由于帖子需要一段时间 我想在处理过程中添加加载图像 I see 本文 http www electrictoolbox com load content jquery a
  • 使用 PHP 实时从 MySQL 获取数据?

    我想知道如何从 MySQL 数据库获取数据并使用 PHP 实时显示它 无需刷新页面 谢谢 使用 AJAX 我建议为此使用 jQuery 库 并让 AJAX 脚本 用 PHP 编写 查询 MySQL 数据库
  • 尝试使用作曲家时出现意外的“使用”(T_USE)

    所以 我正在尝试使用 coinbase API 我正在尝试进行一个简单的测试 看看是否可以使其工作 但我遇到了各种作曲家错误 目前 我对这段代码感到意外的 使用 use Coinbase Wallet Client use Coinbase
  • 在什么条件下使用 std::memcpy 在对象之间复制是安全的?

    在什么条件下可以安全使用std memcpy从一个对象复制到另一个对象 例如 需要什么条件T src and dest满足以下条件是安全的 template
  • C# 类型或命名空间预期会出现混淆

    我对 C 错误感到有点困惑 Type t thing GetType t现在是一种类型 但如果我尝试这样做 new GenericThing
  • 如何在 PHP 中检索并使用网站的 JSON 响应?

    我必须在我的 PHP 代码中访问以下 url 上面的 url 返回一个 json 响应 我的查询是 如何检索 php 代码中的响应 请为此提供一个代码示例 因为我在 php 的这个领域还很陌生 使用 PHP JSON 连接 json dec
  • 使用 Win32 API 更新许多 Windows 的 Z 顺序

    场景是 我有一个顶级窗口的窗口句柄列表 我想移动它们 以便它们按照我选择的 z 顺序排列 我首先迭代列表 我希望最后一个窗口位于顶部 调用SetForegroundWindow在每一个上 这似乎在某些时候有效 但并非总是有效 当我在每次通话
  • 字体大小到底对应什么?

    我正在尝试查找中设置的值font sizeCSS属性是对应的 为了给出上下文 我想在 CSS 中获取大小em我从 OS 2 指标中了解到的字体部分 大写高度之上和基线之下 这em单位是相对于给定的font sizeOS 2 指标是相对于em
  • 生成 2D 系统的分岔图

    绘制一维系统的分岔图很清楚 但如果我有以下形式的二维系统dx dt f x y r dy dt g x y r 我想在 MATLAB 中生成 x 与 r 的分叉图 这样做的主要想法是什么 或者有什么可以帮助我的提示吗 你首先必须做一些数学计
  • 无法加载声音文件 LibGdx

    我想使用 AssetManager 直接从扩展 OBB 文件加载文件 我实现了自己的FileHandleResolver public class CustomFileHandleResolver implements FileHandle