2016-10-02 144 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。謝謝葉戈爾。