尝试在本地' def '索引(空值)

我正在开发一个游戏。在某个特定点上,我想创建一个特殊的 GameObject。特殊的 GameObject 称为 Projectile,与 GameObject 相同,但具有 dx 和 dy,以及一些仅 Projectile 才会具有的其他函数。我正在尝试使 Projectile 扩展 GameObject 类,但是当我尝试创建 Projectile 实例时遇到问题。我尝试过不同的声明方式和打乱声明顺序,但似乎无法找出为什么会出现标题中提到的错误。谢谢!

以下正常工作:

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

但当我将“GameObject”更改为“Projectile”时,它不起作用。

table.insertself.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)
    --字符串标识此对象类型
    self.type = def.type

    self.texture = def.texture
    self.frame = def.frame或1

    --是否充当障碍或不是
    self.solid = def.solid

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

    --维度
    self.x = x
    self.y = y
    self.width = def.width
    self.height = def.height

    --默认的空碰撞回调
    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',
        质地= '瓷器',
        边框= 14,
        宽度= 16,
        高度= 16,
        固体= true,
        defaultState = 'idle',
        states = {
            ['idle'] = {
                frame = 14,
            }
        },
        onCollide = function()
        end
    }
}
点赞
用户2858170
用户2858170
函数 Projectile:init()
    GameObject.init(self, def)

    self.dx = 0
    self.dy = 0
end

其中 defnil

因此在

函数 GameObject:init(def, x, y)
    -- 用于标识该对象类型的字符串
    self.type = def.type

中你对 nil 值进行了索引。

对于 xy 也会发生同样的情况。

2020-04-29 06:10:34