Как сделать некоторое подобие класса и как с этим работать? Помогите пожалуйста!
Через таблицы
Ghost2
извините пожалуйста, а можно на каком-нибудь простеньком примере?
bots={} -- тут хранятся все созданные объекты класса bot
function NewBot()
local b={} -- создаем объект класса (в луа это просто таблица)
-- переменные объекта (класса bot)
b.life=10 -- жизнь бота по умолчанию
bots[b]=b -- сохраняем его в таблицу всех ботов
-- его методы
function b:Hit(force) -- метод объекта класса bot
self.life=self.life-force
if self.life<=0 then
self:OnDie()
bots[self]=nil
end
end
function b:OnDie() -- еще метод
print('Bot died')
end
return b -- возвращаем созданный объект класса бот
end
bot=NewBot() -- создаем объект класса bot
bot:Hit(1) -- бьем его :)
на сколько помню
Aily
ух ты! Спасибо огромное! :)
А не подскажете как сделать что-то вроде delete this? Как понимаю надо удалить саму таблицу с ботом + очистить все его упоминания в таблице bots
Главное чтобы на него ссылок нигде не осталось, в этом примере ссылка в таблице bots записывается при создании
bots[b]=b
Дальше в методе b:Hit(force) бот удаляется из таблицы всех ботов при жизни 0, типа того
bots[self]=nil
А чтобы просто его удалить
bot=NewBot() -- создаем объект класса bot bot:Hit(1) -- бьем его :) .... bots[bot]=nil -- удалили bot=nil -- отсюда тоже уберем, чтоб совсем ссылок не осталось
Таблица в Луа, это Хеш-таблица на самом деле, Луа найдет объект bot и удалит ссылку на него, а гарбэдж коллектор потом его почистит сам.
Ещё вот здесь я оставлял пример работы с классами: http://www.gamedev.ru/code/forum/?id=147765&page=3#m41
Там сначала определяем функцию "class", потом уже работаем с ней.
Технически определение класса - это создание первого объекта с описанием функций, которые в нём используются и общих для класса данных и их начальных значений.
Ну а после того, как от этого класса создан объект, данные в нём уже меняются локально для него.
Тема в архиве.