You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Factorio模组开发:实现游戏内设置控制音乐开关的问题

解决Factorio模组中通过设置控制音乐专辑启用/禁用的问题

核心问题原因

你遇到的报错本质是Factorio模组的阶段API隔离:

  • data表仅在启动阶段(data.lua、data-updates.lua、data-final-fixes.lua)可用,游戏运行时(control.lua)无法访问。
  • settings.global仅在运行阶段(control.lua)可用,启动阶段只能访问settings.startup(启动时生效的设置)。

正确实现方案

要控制音乐专辑的启用/禁用,因为音乐属于启动阶段定义的data内容,必须用启动型设置,用户修改后需重启游戏生效,具体步骤如下:

1. 在settings.lua中定义启动设置

创建开关型启动设置,对应每个专辑的启用状态:

data:extend({
  {
    type = "bool-setting",
    name = "my-mod-enable-album-1",
    setting_type = "startup",
    default_value = true,
    order = "a"
  },
  {
    type = "bool-setting",
    name = "my-mod-enable-album-2",
    setting_type = "startup",
    default_value = true,
    order = "b"
  }
})

2. 在data.lua中根据设置加载音乐

直接在音乐加载逻辑中判断启动设置,仅加载启用的专辑:

-- 定义专辑1的音乐数据
local album_1 = {
  {
    type = "music",
    name = "album1-track1",
    filename = "__your-mod__/sound/album1/track1.ogg",
    volume = 0.8
  },
  -- 专辑1的其他曲目...
}

-- 定义专辑2的音乐数据
local album_2 = {
  {
    type = "music",
    name = "album2-track1",
    filename = "__your-mod__/sound/album2/track1.ogg",
    volume = 0.8
  },
  -- 专辑2的其他曲目...
}

-- 根据启动设置添加对应专辑
if settings.startup["my-mod-enable-album-1"].value then
  data:extend(album_1)
end

if settings.startup["my-mod-enable-album-2"].value then
  data:extend(album_2)
end

备选方案:在data-final-fixes.lua中移除禁用的音乐

如果已经在data.lua中加载了所有音乐,可在启动阶段的最后一步(data-final-fixes.lua)根据设置移除禁用的专辑:

-- 移除专辑1的所有曲目
if not settings.startup["my-mod-enable-album-1"].value then
  data.music["album1-track1"] = nil
  data.music["album1-track2"] = nil
  -- 其他曲目...
end

-- 移除专辑2的所有曲目
if not settings.startup["my-mod-enable-album-2"].value then
  data.music["album2-track1"] = nil
  data.music["album2-track2"] = nil
  -- 其他曲目...
end

关于运行时动态开关的说明

如果想要实现无需重启游戏的动态开关,不能直接修改data表,而是要在control.lua中监听settings.global的变化,通过脚本控制音乐播放逻辑(比如拦截播放请求、调整音量为0),但这种方法无法真正卸载已加载的音乐资源,仅能控制播放状态。

内容的提问来源于stack exchange,提问作者Izon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:39:55