Lua和OOP(我做错了什么?)

时间:2014-08-28 08:54:23

标签: lua

我正在学习编码lua并相信我已经走得很远,并且最近选择了LOVE2D引擎。我决定尝试一些OOP来整理我的编码,但所有的努力似乎都失败了,错误

  

main.lua:31:尝试呼叫字段"绘制"(零值)

function love.load()
Unicorn = {
    name = "Default",
    breedname = "Default Class of a unicorn",
    description = "Quite a default Unicorn",
    imgclass = love.graphics.newImage("UnicornA.gif"),
    x = 20,
    y = 20,
    height = 0,
    width= 0,
    age = 0,
    maxage = 20,
    health = 100
    }
function Unicorn.Draw(self)
    love.graphics.draw(self.imgclass, self.x, self.y)
end
function Unicorn:new(o)
    o = o or {}
    setmetatable(o, self)
    self._index = self
    return o
end
alfred = Unicorn:new()
alfred.x = 50
harry = Unicorn:new()
end

function love.draw()
    love.graphics.print("Unicorn Farm Simulator 2014", 0, 0)
    alfred.Draw(alfred)
    harry.Draw(harry)
end

要清除爱情.draw是一个回调,所以是love.load。我正在使用Draw函数和New函数创建Unicorn类,新函数创建了一个类的瞬间(我是否正确使用该词汇?)

对于使用该语言的完整首都首字母缩略词表示抱歉,我只是假设它代表某种东西!

1 个答案:

答案 0 :(得分:1)

self._index = self设为self.__index = self,因为此处_index是无意义的。

你可以在我this answer中了解更多关于Oa的OO。

<强>加成:

  1. Unicorn.Draw(self)设为Unicorn:Draw(),以摆脱self。并以这种方式使用它

    alfred:Draw()
    harry:Draw()
    
  2. 尽可能使用local。因为local对内存使用更快且更友好。