love2d合并可执行文件中的模块失败,但在运行项目文件夹中的love.exe时成功

我按照love2d wiki上的步骤为我的游戏创建了一个合并可执行文件。当我启动生成的合并exe时,我会收到以下错误:

Error: main.lua:12: module 'util/strict' not found:
    no field package.preload['util/strict']
    no 'util/strict' in LOVE game directories.
    no file 'util/strict.dll' in LOVE paths.
    no file 'flowerpowers/scripts/util/strict.lua'
    no file 'flowerpowers/data/util/strict.lua'
stack traceback:
    [C]: in function 'require'
    main.lua:12: in main chunk
    [C]: in function 'require'
    [string "boot.lua"]:429: in function <[string "boot.lua"]:275>
    [C]: in function 'xpcall'

然而,当我通过将文件夹(即镜像zip压缩过程中制作的那个,两个直接包含main.lua、conf.lua以及项目所有子文件夹的文件夹)拖到love.exe上,它就像一场梦一样工作。

这是我的main.lua的顶部,直到它崩溃的那一行(注意:注释掉的BASEDIR是为了让它工作,但它同时打破了合并exe和拖拽文件夹方法):

io.stdout:setvbuf("no")
love.keyboard.setKeyRepeat(true)

BASEDIR = "flowerpowers"
-- BASEDIR = ""
package.path = BASEDIR..'/scripts/?.lua;'..BASEDIR..'/data/?.lua'

package.cpath = ""
package.preload = {}

require "util/strict"

我尝试了一些其他类似问题上建议的各种解决方案的组合,但什么都不起作用:将package.path附加到我上面设置的字符串,使用"\"代替"/",使用"."代替"/",在我的package.path字符串中明确包含项目的所有子文件夹,并从要求的目标中删除子文件夹。不幸的是,什么都不起作用。

这是我的文件夹结构:

+ FlowerPowers(我压缩内容的文件夹,不包括文件夹本身)
    - main.lua
    - conf.lua
    + data(包含其他文件和文件夹)
    + scripts(包含其他文件和文件夹,但仅列出相关文件)
        + util
            - strict.lua
+ bin
    - love.exe
    - [love DLL]
+ distro
    - FlowerPowers.exe(合并可执行文件)
    - [love DLL]

希望这就足够开始了,但如果我可以提供任何其他有用的信息,只要让我知道就行了。完全被为什么在运行我的文件夹时它能够在love.exe上工作,但不能在它们被合并时工作的事情困惑了。

编辑:我的合并exe似乎在从包含整个项目文件夹的文件夹运行时可以工作(即上面结构中的FlowerPowers)。但如果该文件夹丢失,则会出现此崩溃。

编辑#2:找到了解决方案!详见此处:https://love2d.org/forums/viewtopic.php?f=4&t=83142&p=206049#p206049

工作代码如下:

BASEDIR = love.filesystem.getRealDirectory("/scripts"):match("(.-)[^%.]+$")
BASEDIR = string.sub(BASEDIR, 1, string.len(BASEDIR)-1)
local myPath = BASEDIR..'/scripts/?.lua;'..BASEDIR..'/data/?.lua'
local myPath2 = 'scripts/?.lua;/data/?.lua'

package.path = myPath
love.filesystem.setRequirePath( myPath2 )
点赞