尝试索引本地 '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
def
是 nil
所以在
function GameObject:init(def, x, y)
-- string identifying this object type
self.type = def.type
你索引了一个 nil 值。
x
和 y
也会发生同样的情况
我正在开发一款游戏。在某个时候,我想创建特殊的 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
def
是 nil
所以在
function GameObject:init(def, x, y)
-- string identifying this object type
self.type = def.type
你索引了一个 nil 值。
x
和 y