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。
以下是使用的默认加载器列表:
| 扩展名 | 加载器 |
|---|---|
| lua | love.filesystem.load |
| png | love.graphics.newImage |
| jpg | love.graphics.newImage |
| dds | love.graphics.newImage |
| ogv | love.graphics.newVideo |
| glsl | love.graphics.newShader |
| mp3 | love.audio.newSource |
| ogg | love.audio.newSource |
| wav | love.audio.newSource |
| flac | love.audio.newSource |
| txt | love.filesystem.read |
| fnt | love.graphics.newFont |
.ttf 和 .otf 文件的加载器是特殊的。它不会直接返回资源,而是返回一个接受字体大小并返回指定大小的新字体的函数。
.fnt 文件的加载器要求在文件中设置图像文件路径,因为它不会传递给 love.graphics.newFont。
要让 cargo 忽略具有特定扩展名的文件,请将 false 指定为加载器。
处理器
有时,在资源加载后对其进行一些额外处理会很有帮助。
这项额外工作可以通过 processors 选项进行配置。
键是匹配文件名的 Lua 模式,值是接收资源和资源文件名的函数。
在上面的示例中,我们为 images/ 目录中的所有资源设置了缩放过滤器,无论其扩展名如何。
许可证
MIT,详见 LICENSE。