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

如何在Love2D中设置自定义文件保存目录

LÖVE自定义截图保存路径实现方案

love.graphics.captureScreenshot直接传入文件名的调用方式,默认会将文件保存到LÖVE沙盒指定的存档目录(也就是你看到的C:\Users\<user>\AppData\Roaming\LOVE\下对应项目名的文件夹),受文件系统沙盒限制,无法直接通过传入绝对路径的方式写到外部目录,你可以根据需求选以下两种方案实现:


方案1:回调+原生IO写入任意路径(开发调试首选,无配置依赖)

这个方案不需要改项目配置,可以把截图存到任意你有权限访问的位置,灵活性最高。captureScreenshot支持传入回调函数,截图生成后会返回ImageData对象,你只需要把它编码为PNG格式,再用Lua原生IO库写入自定义路径即可,完全绕过沙盒限制。
可直接运行的示例代码:

-- 在这里配置你要存截图的自定义路径,Windows下推荐填桌面、非系统盘目录
-- 路径用正斜杠/即可,不需要转义,Windows系统可正常识别
local SCREENSHOT_SAVE_PATH = "C:/Users/你的用户名/Desktop/MyGameScreenshots/"

function love.load()
    -- 启动时自动创建不存在的目标目录
    os.execute('mkdir "' .. SCREENSHOT_SAVE_PATH .. '"')
end

function love.keypressed(key)
    if key == "c" then
        love.graphics.captureScreenshot(function(imageData)
            local saveName = os.time() .. ".png"
            local fullSavePath = SCREENSHOT_SAVE_PATH .. saveName
            -- 将截图数据编码为PNG格式二进制
            local pngData = imageData:encode("png")
            -- 以二进制写模式打开目标文件
            local file = io.open(fullSavePath, "wb")
            if file then
                file:write(pngData:getString())
                file:close()
                print("截图已保存至:" .. fullSavePath)
            else
                print("截图保存失败,请检查路径权限")
            end
        end)
    end
end

function love.draw()
    love.graphics.circle("fill", 400, 300, 200)
end

注意事项:

  • 打开文件必须用wb二进制写模式,否则生成的PNG文件会损坏
  • 如果要存到Program Files这类系统受保护目录,需要给程序管理员权限
  • 路径尽量不要包含特殊中文符号避免编码问题,除非你已经配置好了Lua的UTF-8路径兼容

方案2:修改配置让默认存档目录指向自定义位置(发布游戏首选)

如果你希望所有游戏生成的文件(截图、存档、配置文件)都统一存在自定义位置,不想写额外IO逻辑,可以通过配置融合模式实现:

  1. 在项目的conf.lua中添加如下配置:
function love.conf(t)
    t.identity = "screenshot_example"
    t.appendidentity = false
    t.externalstorage = true
end
  1. 将游戏打包为独立EXE文件,放到你希望存储数据的自定义目录下
  2. 在EXE同级目录新建名为saves的文件夹
    配置完成后,你再调用love.graphics.captureScreenshot(os.time() .. ".png"),文件就会自动保存到EXE同级目录/saves/screenshot_example/下,不需要额外改截图逻辑,玩家找文件也更方便。

避坑提示

  • 不要直接给captureScreenshot传入外部绝对路径字符串,沙盒机制会自动过滤路径里的特殊字符,最终文件还是会存到默认AppData目录
  • 安卓平台要存公共目录只需要开启t.externalstorage = true即可,不需要额外写IO逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:48:23