ПрограммированиеФорумОбщее

Классы в луа

#0
23:15, 29 мар 2014

Как сделать некоторое подобие класса и как с этим работать? Помогите пожалуйста!

#1
23:22, 29 мар 2014

Через таблицы

#2
23:48, 29 мар 2014

Ghost2
извините пожалуйста, а можно на каком-нибудь простеньком примере?

#3
0:07, 30 мар 2014

http://lua-users.org/wiki/ObjectOrientationTutorial

#4
14:03, 30 мар 2014
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)   -- бьем его :)


на сколько помню

#5
17:17, 30 мар 2014

Aily
ух ты! Спасибо огромное! :)
А не подскажете как сделать что-то вроде delete this? Как понимаю надо удалить саму таблицу с ботом + очистить все его упоминания в таблице bots

#6
18:46, 30 мар 2014

Главное чтобы на него ссылок нигде не осталось, в этом примере ссылка в таблице bots записывается при создании

bots[b]=b

Дальше в методе b:Hit(force) бот удаляется из таблицы всех ботов при жизни 0, типа того

bots[self]=nil

А чтобы просто его удалить

bot=NewBot() -- создаем объект класса bot
bot:Hit(1)   -- бьем его :)

....

bots[bot]=nil -- удалили
bot=nil -- отсюда тоже уберем, чтоб совсем ссылок не осталось

Таблица в Луа, это Хеш-таблица на самом деле, Луа найдет объект bot и удалит ссылку на него, а гарбэдж коллектор потом его почистит сам.

#7
23:11, 30 мар 2014

Ещё вот здесь я оставлял пример работы с классами: http://www.gamedev.ru/code/forum/?id=147765&page=3#m41
Там сначала определяем функцию "class", потом уже работаем с ней.
Технически определение класса - это создание первого объекта с описанием функций, которые в нём используются и общих для класса данных и их начальных значений.
Ну а после того, как от этого класса создан объект, данные в нём уже меняются локально для него.

ПрограммированиеФорумОбщее

Тема в архиве.