Corona LUA and OOP Design

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

7
задан David Nelson 14 June 2011 в 14:44
поделиться