【问题标题】:How can I call a class function inside a class using middleclass in Lua如何在 Lua 中使用中间类调用类中的类函数
【发布时间】:2017-02-10 18:11:24
【问题描述】:

我一直试图弄清楚如何在 Lua 中的另一个类函数中调用一个类函数,但我认为可行的方式却没有。

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 框架。

感谢您抽出宝贵时间回答。

【问题讨论】:

  • 只写self:get(x, y)而不是self.Level:get(x, y)
  • 它现在工作了,我觉得很愚蠢,谢谢。

标签: oop lua love2d


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2011-06-19
    • 2020-03-29
    • 2021-04-15
    • 2014-11-20
    • 2020-10-19
    相关资源
    最近更新 更多