J'ai implémenté la POO dans mon environnement LUA mais ça ne semble pas marcher.Pourquoi mon implémentation de classe Lua ne fonctionne-t-elle pas?
Je pense que cela a quelque chose à voir avec la façon dont je gère le __index et mon utilisation incorrecte de require et module, mais je ne suis pas sûr à 100%.
Voici le code:
Class = function(prototype)
local derived = {}
local derivedMT = {
--When indexing into a derived class, check the base class as well
__index = prototype,
--When invoking a class, return an instance
__call = function(proto, ...)
local instance = {}
local instanceMT = {
--When indexing into an instance, check the class hierarchy as well.
__index = derived,
--Calling instances is a no-no!
__call = function()
print("WARNING! Attempt to invoke an instance of a class!")
print(debug.traceback())
return instance
end,
}
setmetatable(instance, instanceMT)
if (instance.__constructor) then
instance:__constructor(...)
end
return instance
end,
}
setmetatable(derived, derivedMT)
return derived
end
Et voici comment je l'utilise, la référence nul est un appel à une fonction de classe de base, qui est l'erreur/problème im avoir est il semble que la base La classe n'est pas référencée.
require "Core.Camera.FreeCamera"
local T = Core.Camera.FreeCamera.FreeCamera(0,0,-35)
c = T:getObjectType() -- nil reference
print(c .." --Type")
et voici Camera.lua la classe de base
local _G = _G
module(...)
local M = _G.Class()
Camera = M
function M:__constructor(x,y,z) --This never gets called.
--self.Active = false
--self.x = x
--self.y = y
--self.z = z
--self.ID = EngineManager:getCamera()
print("InCameraInstance_-_-_-_-_-__-_--_-__-_-_-_--_-_-_-_-_--_-_-_--_--__-_---_--_---__-")
end
function M:getObjectType()
return "camera"
end
Enfin caméra libre qui tente d'hériter la caméra.
local require = require
local _G = _G
module(...)
require "Core.Camera.Camera"
local M = _G.Class(_G.Core.Camera.Camera) --Gross, lame might be the culprit
FreeCamera = M
function M:__constructor(x,y,z) ---WHOOPS, this does get called... the other one doesnt
self.Active = false
self.x = x
self.y = y
self.z = z
self.ID = _G.EngineManager:getCamera()
--_G.print("got Id of:" .. self.ID)
self:setCameraPosition(x, y, z, self.ID)
_G.print("<<<Camera in lua>>>")
end
Je suis à court d'idées. Toute aide serait appréciée.
Désolé, constructeur photo gratuit ne s'appelle ... La caméra ne marche pas de – Joe