从文件夹中加载模块

我的项目结构如下:

--Shooter
----sprites
------background.png
------player.png
------zombie.png
----units
------player.lua
------zombie.lua
----main.lua
----load.lua
----update.lua
----draw.lua

我的 main.lua 文件将包含以下内容:

local Bullet = require("units.bullet")
local Player = require("units.player")
local Zombie = require("units.zombie")

require("load")
require("update")
require("draw")
require("functions")

love.window.setTitle("Shooter")

function love.load()
    Load()
end

function love.update(dt)
    Update(dt)
end

function love.draw()
    Draw()
end

例如,bullet.lua 文件如下:

local Bullet =  {}
bulletSprite = love.graphics.newImage('sprites/bullet.png')

function Bullet.create()
    local newBullet = {
        pos = {},
        speed = 10,
        sprite = bulletSprite,
        direction = 0,
        dead = false
    }
    return setmetatable(newBullet, {__index = Bullet})
end

function Bullet:setPos(x, y)
    self.pos.x = x
    self.pos.y = y
end

function Bullet:setDirection(angle)
    self.direction = angle
end

function Bullet:move(dt)
    local distance = self.speed * dt * 60
    self.pos.x = self.pos.x + math.cos(self.direction) * distance
    self.pos.y = self.pos.y + math.sin(self.direction) * distance
end

function spawnBullet(bullets, player)
    local newBullet = Bullet.create()
    newBullet:setPos(player.pos.x, player.pos.y)
    newBullet.direction = player.angle

    table.insert(bullets, newBullet)
end

问题在于 units 文件夹中的文件没有正确加载。从错误日志中可以看到,它尝试在根目录和各种 love2dlua 库中搜索 bullet.lua 文件。

我尝试了各种方法,如将 require("./units/bullet") 替换为 require("units.bullet"),或者用 . 替换 / ,但是到目前为止都没有成功。

将这些文件从 units 文件夹中提取到根文件夹中将会起作用。不过,从 sprites 文件夹加载图像是有效的。(例如 love.graphics.draw(sprites.background, 0, 0))

可以帮帮我吗?

点赞
用户5525442
用户5525442

两件事情值得注意。

  1. 确保将 LUA_PATH 设置为您的项目目录。
  2. 在您创建的每个模块中添加return Bulletreturn Player等等……。
2018-10-07 05:12:59
用户2835825
用户2835825

我发现问题在于虽然我的 main.lua 文件里的 require 是正确的,但是我的 update 文件里没有。

2018-10-07 10:48:21