Я работаю над игрой. В определенный момент я хотел бы создать специальный GameObject. Специальный GameObject называется Projectile и является таким же, как GameObject, но имеет dx и dy, а также некоторые другие функции, которые будут иметь только снаряд. Я пытаюсь заставить Projectile расширить класс GameObject, но у меня возникают проблемы, когда я пытаюсь создать экземпляр Projectile. Я пробовал разные способы объявления снаряда и порядка перетасовки декларации, но не могу понять, почему я получаю ошибку, упомянутую в названии. Спасибо!
Следующее работает просто отлично:
table.insert(self.dungeon.currentRoom.objects, GameObject(
GAME_OBJECT_DEFS['pot'],
self.player.x,
self.player.y
))
Но когда я меняю "GameObject" на "Снаряд", это не так.
table.insert(self.dungeon.currentRoom.objects, Projectile(
GAME_OBJECT_DEFS['pot'],
self.player.x,
self.player.y
))
Остальное поддерживает код. Я использую код класса от Матиаса Рихтера
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
}
}