Итак, я пришел из традиционной разработки игр, которая использует принципы ООП, и из того, что я видел, вы можете имитировать это, используя 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