ITADN
bjornbytes/cargo · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Cargo

Cargo 通过以 Lua 表的形式暴露项目目录,使管理 Love2D 项目中的资源变得轻松。 这意味着你可以自动地从表中访问文件,而无需先加载它们。 资源是惰性加载的,会被缓存,并且可以任意嵌套。

你还可以在特定时间手动预加载一组资源,以避免加载卡顿。

示例

如果你的项目结构如下:

├── main.lua
└── assets
    ├── config
    │   └── player
    │       └── stats.lua
    ├── fonts
    │   └── my_font.ttf
    └── images
        └── player.png

然后你可以这样做:

assets = require('cargo').init('assets')

function love.load()
  print(assets.config.player.stats.maxHealth)
  myFont = assets.fonts.my_font(16)
end

function love.draw()
  love.graphics.draw(assets.images.player)
end

它就能直接运行。 你还可以通过以下操作将整个项目暴露为 Lua 全局作用域的一部分:

setmetatable(_G, {
  __index = require('cargo').init('/')
})

在本示例中,如果你有一个位于 images/player.png 的图像,你可以直接调用 love.graphics.draw(images.player),而无需调用 love.graphics.newImage

高级

有两种方法可以告诉 cargo 加载一个目录。第一种是传入你想要加载的目录名称:

assets = cargo.init('my_assets')

第二种是通过传入一个选项表,从而让你对加载方式拥有更大的控制权:

assets = cargo.init({
  dir = 'my_assets',
  loaders = {
    jpg = love.graphics.newImage
  },
  processors = {
    ['images/'] = function(image, filename)
      image:setFilter('nearest', 'nearest')
    end
  }
})

在加载某项内容后,您可以将其设置为 nil 以将其从 cargo 表中清除。 请注意, 只有当没有其他引用时,它才会被垃圾回收。

您也可以通过将其(或其任何子项)作为函数调用来预加载 cargo 表中的所有资源:

assets = cargo.init('media')()     -- Load everything in 'media'
assets = cargo.init('media')(true) -- Load everything in 'media', recursively

assets.sound.background()          -- Preload all of the background music

加载器

loaders 选项指定如何加载资源。 Cargo 使用文件扩展名来确定如何加载文件。 loaders 表中条目的键是文件扩展名。 这些键映射到接收文件名并返回已加载资源的函数。 在上面的示例中,我们对任何以 .jpg 结尾的文件名运行函数 love.graphics.newImage

以下是使用的默认加载器列表:

扩展名加载器
lualove.filesystem.load
pnglove.graphics.newImage
jpglove.graphics.newImage
ddslove.graphics.newImage
ogvlove.graphics.newVideo
glsllove.graphics.newShader
mp3love.audio.newSource
ogglove.audio.newSource
wavlove.audio.newSource
flaclove.audio.newSource
txtlove.filesystem.read
fntlove.graphics.newFont

.ttf.otf 文件的加载器是特殊的。它不会直接返回资源,而是返回一个接受字体大小并返回指定大小的新字体的函数。

.fnt 文件的加载器要求在文件中设置图像文件路径,因为它不会传递给 love.graphics.newFont

要让 cargo 忽略具有特定扩展名的文件,请将 false 指定为加载器。

处理器

有时,在资源加载后对其进行一些额外处理会很有帮助。 这项额外工作可以通过 processors 选项进行配置。 键是匹配文件名的 Lua 模式,值是接收资源和资源文件名的函数。 在上面的示例中,我们为 images/ 目录中的所有资源设置了缩放过滤器,无论其扩展名如何。

许可证

MIT,详见 LICENSE