我有一个文件,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非常陌生。
发布于 2015-01-07 16:32:46
我想你想要return setmetatable(newObj, {__index = self})
而不是return setmetatable(newObj, self)
。
此外,require "display.lua"
可能应该是require "display"
,而game.lua
应该把Game = {}
放在顶端。通过这些更改,您的示例对我来说是有效的。
https://stackoverflow.com/questions/27823398
复制相似问题