我按照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设置,使用&#34 ; \\&#34;而不是&#34; /&#34;,使用&#34;。&#34;而不是&#34; /&#34;,在package.path字符串中显式包含项目中的所有子文件夹,并从require目标中删除子文件夹。不幸的是,没有任何作品。
这就是我的文件夹结构:
+ FlowerPowers (the folder that I zip the contents of, not including the folder itself)
- main.lua
- conf.lua
+ data (contains other files and folders)
+ scripts (contains other files and folders, but only listing relevant ones)
+ util
- strict.lua
+ bin
- love.exe
- [love DLLs]
+ distro
- FlowerPowers.exe (fused executable)
- [love DLLs]
希望有足够的信息开始,但如果我能提供任何有用的信息,请告诉我。完全不知道为什么它在love.exe上运行我的文件夹时有效,但是当它们被融合时却没有。
编辑:当我从一个同样包含我整个项目文件夹的文件夹(即上面结构中的FlowerPowers)运行时,我的融合exe似乎有效。但如果缺少该文件夹,我就会崩溃。
编辑#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 )