Итак, я пришел из традиционной разработки игр, использующей принципы ООП, и из того, что я видел, вы можете имитировать это с помощью LUA, если знаете, что делаете. В некоторых публикациях кода я узнал, как вы можете использовать класс Director и создавать файлы с функцией new () и т. Д.
Я ищу способ управлять своим оружием. У меня есть игрок и противник, и я бы предпочел иметь один класс оружия, например, weaponCanon. Я сделал следующее:
-- private vars here
local power
local canonSprite
local whatever
local someFunction = function()
...
end
-- Private stuff here
local weaponCanon = {}
weaponCanon.fire = function(atX, atY)
...
end
weaponCanon.reset = function()
...
end
return weaponCanon
Затем в моем коде уровня я просто делаю:
local weaponCanon = require("weaponCanon")
weaponCanon.fire(100, 100)
Это отлично работает и позволяет мне использовать "частный" и "общественный" менталитет при кодировании моего оружия. Проблема в том, что если я хочу, чтобы у игрока и оппонента был канон:
local playerWeapon = require("weaponCanon")
local opponentWeapon = require("weaponCanon")
Это просто возвращает тот же объект вместо нового экземпляра этого объекта. Так что я получаю только одну пушку на локации противника. Очевидно, теперь это то, что я хочу / нужно.
В нашей игре много оружия, и было бы неплохо иметь только одну версию каждого файла с настройкой, сообщающей нам, оружие ли это противника или оружие игрока. Альтернативой является копирование каждого файла и создание weaponPlayerCanon и weaponOpponentCanon, но я съеживаюсь при мысли об изменениях в одном файле и необходимости каждый раз менять 2+ файла.
Как я могу заставить его возвращать экземпляр и что это за структура файла LUA для этого?
Спасибо или всякая помощь
-d