【问题标题】:How to export, then access exported methods in Lua如何导出,然后在 Lua 中访问导出的方法
【发布时间】:2015-01-08 00:32:46
【问题描述】:

我有一个文件 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) 为 nil 值”

我在这里假设我必须导出资源中的方法,但我不知道该怎么做,因为我对 Lua 还很陌生。

【问题讨论】:

    标签: oop lua


    【解决方案1】:

    我想你想要return setmetatable(newObj, {__index = self}) 而不是return setmetatable(newObj, self)

    另外,require "display.lua" 可能应该是 require "display" 并且 game.lua 应该在顶部的某个地方有 Game = {}。通过这些更改,您的示例对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多