2016-10-02 153 views
1

我一直在试图弄清楚如何在Lua中的另一个类函数内部调用类函数,但我认为的方式不会。如何在Lua中使用middleclass在类中调用类函数

local class = require 'libs.middleclass' 

local Level = class('Level') 

function Level:initialize(width, height, tileSize) 
    self.width = width 
    self.height = height 
    self.tileSize = tileSize 
    self.data = {} 
    --Generate a 1D Array for the map data 
    for x = 1, self.width do 
     for y = 1, self.height do 
      table.insert(self.data, 0) 
     end 
    end 
end 

function Level:get(x, y) 
    return self.data[x + (y-1) * self.width] 
end 

function Level:set(x, y, type) 
    self.data[x + (y - 1) * self.width] = type 
end 

function Level:draw() 
    for x = 1, self.width do 
     for y = 1, self.height do 
      if self.Level:get(x, y) == 0 then 
       love.graphics.setColor(255, 255, 255) 
       love.graphics.rectangle("fill", x * tileSize, y * tileSize, tileSize, tileSize) 
       love.graphics.setColor(0, 0, 0) 
       love.graphics.rectangle("line", x * tileSize, y * tileSize, tileSize, tileSize) 
      elseif self.Level:get(x, y) == 1 then 
       love.graphics.setColor(255, 255, 255) 
       love.graphics.rectangle("fill", x * tileSize, y * tileSize, tileSize, tileSize) 
      end 
     end 
    end 
end 

return Level 

不知道,如果你需要所有的代码,但是这是我在我的level.lua对象类啄。我想到用self.method将工作调用它,但它给了我:

objects/level.lua:29: attempt to index field 'Level' (a nil value) 

这就是所有我能说些什么,因为我是新的做在lua OOP,还我使用的Love2D如果这个框架有任何相关性的话。

感谢您花时间回答。

+1

简单地写'self:get(x,y)'而不是'self.Level:get(x,y)' –

+0

它现在工作我觉得很蠢,谢谢。 – MeArio

回答

0

所以叶戈尔回答了这个问题,但是在评论中这样做了。无论如何,我所要做的就是使用self而不是self.Level。谢谢叶戈尔。