Retour à la leçonMission
Mission : un PNJ qui n'aboie jamais
Diagnostiquer une chaîne d'héritage cassée entre entités de jeu et implémenter une surcharge d'opérateur manquante.
Contexte
Un système d'entités de jeu définit une hiérarchie Animal -> Dog, mais quelque chose cloche :
lua
local Animal = {}
Animal.__index = Animal
function Animal.new(name, sound)
local self = setmetatable({}, Animal)
self.name = name
self.sound = sound
return self
end
function Animal:makeSound()
print(self.name .. " fait " .. self.sound)
end
local Dog = {} -- oubli : pas de setmetatable(Dog, { __index = Animal })
function Dog.new(name)
local self = Animal.new(name, "Wouf")
return setmetatable(self, Dog)
end
local rex = Dog.new("Rex")
rex:makeSound() -- erreur: attempt to call a nil value (method 'makeSound')L'équipe veut aussi pouvoir additionner deux entités Vector2 (positions) avec +, mais l'opérateur n'est pas encore défini pour ce type.