我正在学习编码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类,新函数创建了一个类的瞬间(我是否正确使用该词汇?)
对于使用该语言的完整首都首字母缩略词表示抱歉,我只是假设它代表某种东西!
答案 0 :(得分:1)
将self._index = self
设为self.__index = self
,因为此处_index
是无意义的。
你可以在我this answer中了解更多关于Oa的OO。
<强>加成:强>
将Unicorn.Draw(self)
设为Unicorn:Draw()
,以摆脱self
。并以这种方式使用它
alfred:Draw()
harry:Draw()
尽可能使用local
。因为local
对内存使用更快且更友好。