尝试索引本地 'def'(一个零值)

attempt to index local 'def' (a nil value)

我正在开发一款游戏。在某个时候,我想创建特殊的 GameObject。特殊的 GameObject 称为 Projectile,与 GameObject 相同,但具有 dx 和 dy 以及一些只有弹丸才会具有的其他功能。我试图让 Projectile 扩展 GameObject class,但是当我尝试创建 Projectile 的实例时,我 运行 遇到了问题。我尝试了不同的方式来声明 Projectile 和改组声明顺序,但似乎无法弄清楚为什么我会收到标题中提到的错误。谢谢!

以下工作正常:

table.insert(self.dungeon.currentRoom.objects, GameObject(
                        GAME_OBJECT_DEFS['pot'],
                        self.player.x,
                        self.player.y
                    ))

但是当我将 "GameObject" 更改为 "Projectile" 时,它不会。

table.insert(self.dungeon.currentRoom.objects, Projectile(
                        GAME_OBJECT_DEFS['pot'],
                        self.player.x,
                        self.player.y
                    ))

剩下的就是支持代码了。我正在使用来自 Matthias Richter

的 Class 代码
require 'src/Projectile'
require 'src/GameObject'
require 'src/game_objects'

GameObject = Class{}

function GameObject:init(def, x, y)
    -- string identifying this object type
    self.type = def.type

    self.texture = def.texture
    self.frame = def.frame or 1

    -- whether it acts as an obstacle or not
    self.solid = def.solid

    self.defaultState = def.defaultState
    self.state = self.defaultState
    self.states = def.states

    -- dimensions
    self.x = x
    self.y = y
    self.width = def.width
    self.height = def.height

    -- default empty collision callback
    self.onCollide = def.onCollide
end

Projectile = Class{__includes = GameObject}

function Projectile:init()
    GameObject.init(self, def)

    self.dx = 0
    self.dy = 0
end

GAME_OBJECT_DEFS = {
    ['pot'] = {
        type = 'pot',
        texture = 'tiles',
        frame = 14,
        width = 16,
        height = 16,
        solid = true,
        defaultState = 'idle',
        states = {
            ['idle'] = {
                frame = 14,
            }
        },
        onCollide = function()
        end
    }
}
function Projectile:init()
    GameObject.init(self, def)

    self.dx = 0
    self.dy = 0
end

defnil

所以在

function GameObject:init(def, x, y)
    -- string identifying this object type
    self.type = def.type

你索引了一个 nil 值。

xy

也会发生同样的情况