fix(audio): 修复音频系统初始化及资源加载问题

- 修改音频系统初始化逻辑,增加备用初始化参数
- 优化音乐和音效加载方式,直接加载文件而非内存
- 增加错误日志输出,便于排查问题
- 更新MingW平台构建脚本,完善依赖DLL复制
This commit is contained in:
2026-03-20 02:36:11 +08:00
parent 9ce47cc501
commit 6c11e4d8be
7 changed files with 63 additions and 39 deletions

View File

@@ -33,15 +33,16 @@ target("Frostbite2D")
print("Copy assets directory: " .. assets_dir .. " -> " .. target_assets_dir)
end
-- 复制 SDL2 和 SDL2_mixer DLL (Windows 平台)
-- 复制所有依赖的 DLL (Windows 平台)
if is_plat("mingw") or is_plat("windows") then
for _, pkg_name in ipairs({"libsdl2", "libsdl2_mixer"}) do
-- 复制所有包的 DLL 文件
local all_pkgs = {"libsdl2", "libsdl2_image", "libsdl2_mixer"}
for _, pkg_name in ipairs(all_pkgs) do
local pkg = target:pkg(pkg_name)
if pkg then
local libfiles = pkg:get("libfiles")
if libfiles then
for _, libfile in ipairs(libfiles) do
-- 查找 DLL 文件
if libfile:endswith(".dll") then
local target_dll = path.join(output_dir, path.filename(libfile))
os.cp(libfile, target_dll)
@@ -52,21 +53,31 @@ target("Frostbite2D")
end
end
-- 尝试从 xmake 包目录复制 SDL2 和 SDL2_mixer DLL
local dll_paths = {
path.join(os.getenv("USERPROFILE") or "", ".xmake/packages/l/libsdl2/**/bin/SDL2.dll"),
path.join(os.getenv("USERPROFILE") or "", ".xmake/packages/l/libsdl2/**/lib/SDL2.dll"),
path.join(os.getenv("USERPROFILE") or "", ".xmake/packages/l/libsdl2_mixer/**/bin/SDL2_mixer.dll"),
path.join(os.getenv("USERPROFILE") or "", ".xmake/packages/l/libsdl2_mixer/**/lib/SDL2_mixer.dll"),
-- 从 xmake 包目录复制所有可能的依赖 DLL
local user_profile = os.getenv("USERPROFILE") or ""
local packages_dir = path.join(user_profile, ".xmake/packages/l")
local common_dll_patterns = {
path.join(packages_dir, "libogg/**/*.dll"),
path.join(packages_dir, "libvorbis/**/*.dll"),
path.join(packages_dir, "libvorbisfile/**/*.dll"),
path.join(packages_dir, "libmpg123/**/*.dll"),
path.join(packages_dir, "libflac/**/*.dll"),
path.join(packages_dir, "libsndfile/**/*.dll"),
path.join(packages_dir, "libmodplug/**/*.dll"),
path.join(packages_dir, "opus/**/*.dll"),
path.join(packages_dir, "opusfile/**/*.dll"),
path.join(packages_dir, "**/*.dll")
}
for _, dll_pattern in ipairs(dll_paths) do
for _, dll_pattern in ipairs(common_dll_patterns) do
local dll_files = os.files(dll_pattern)
for _, dll_file in ipairs(dll_files) do
local target_dll = path.join(output_dir, path.filename(dll_file))
local dll_name = path.filename(dll_file)
local target_dll = path.join(output_dir, dll_name)
if not os.isfile(target_dll) then
os.cp(dll_file, target_dll)
print("Copy DLL from: " .. dll_file)
print("Copy dependency DLL: " .. dll_name)
end
end
end