在love2d融合的可执行文件中,require模块失败,但在我的项目文件夹

时间:2016-11-24 05:08:20

标签: lua love2d

我按照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 )

0 个答案:

没有答案