我有一个文件display.lua,其中我有代码来加载一些资源。
----display.lua
Resources = {}
function Resources:new(rootdir)
local newObj = {image = {}, audio = {}, root = ""}
newObj.root = rootdir
return setmetatable(newObj, self)
end
function Resources:getSpriteSheet(name)
--- etc etc etc
end
然后我有一个游戏变量用于存储游戏状态,这是另一个文件game.lua。
---game.lua
require "display.lua"
function Game:new()
local newObj = {mode = "", map = {}, player = {}, resources = {}}
self.__index = self
return setmetatable(newObj, self)
end
function Game:init()
self.resources = Resources:new("/home/example/etc/game/")
local spriteSheet = self.resources:getSpriteSheet("spritesheet.png")
end
我可以使用require
访问资源代码。我的问题是,在Game:init()
我无法访问Resources:getSpriteSheet()
,lua解释器抱怨"尝试调用方法(getSpriteSheet)为零值"
我在这里假设我必须在参考资料中导出这些方法,但我不知道我是如何做到这一点的,因为我对Lua很新。
答案 0 :(得分:2)
我认为你想要return setmetatable(newObj, {__index = self})
而不是return setmetatable(newObj, self)
。
此外,require "display.lua"
可能应该是require "display"
而game.lua
应该位于顶部的Game = {}
。通过这些更改,您的示例适用于我。