Понедельник, 25 Ноября 2024, 14:56

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [83]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [148]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [167]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [132]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Как вы относитесь к созданию игр без программирования?
Всего ответов: 10486
Главная » Статьи » Программирование

LUA: Создание инвентаря
Раз уж начался у меня "словесный понос" про луа, продолжу о полезном и интересном...
На этот раз подойду ближе к созданию игр, а именно будем создавать один из элементов игры - инвентарь
Движок снова возьму Leadwerks3D, но можно использовать любой другой с небольшими изменениями.

Архив с проектом!!!
обязательно прочтите предыдущие мои статьи иначе ничего не поймете первая вторая

Допустим инвентарь у нас будет иметь 3 столбца по 3 ячейки. Опишем его:
Код

  size_cell = 80 --размер ячейки
  kol_col = 3 --количество столбцов
  kol_row = 4 --количество строк
  kol_cell = kol_col*kol_row --количество ячеек
  def_image = Texture:Load("auto1.tex") --иконка пустой ячейки

Белый автомобиль - это пустая ячейка (лень было искать другую иконку)

Создадим инвентарь:
Код

  inventar={} --таблица инвентаря
  k=1 --счетчик
  --укажем каждой ячейке ее место
  for i=1,kol_row do
  for j=1,kol_col do
  local cell={} --таблица ячейки
  cell.x=size_cell*j
  cell.y=size_cell*i  
  --cell.status = 0
  inventar[k]=cell --загоняем ячейки в таблицу инвентаря
  k = k + 1  
  end
  end


Теперь отрисуем наш инвентарь:
Код

  function draw_inventar()
  for i,cell in ipairs(inventar) do --пробегаемся по массиву инвентаря
  if cell.object~=nil then --если в ячейке есть объект, то рисуем иконку этого объекта
  self.context:DrawImage( cell.object.image , cell.x , cell.y , size_cell , size_cell)
  else
  self.context:DrawImage( def_image , cell.x , cell.y , size_cell , size_cell) --если в ячейки ничего нет, то рисуем пустую.
  end
  end
  end


проверим:

Результат

Далее создадим класс автомобилей и потом засунем экземпляр объекта в первую ячейку

Код

  --создадим класс авто
  class_auto = {}
  function class_auto:new()
  local obj = {}
  obj.image = Texture:Load("auto2.tex")
  obj.description = "ololo, trololo, blablabla"
  setmetatable(obj,self)
  self.__index = self
  return obj
  end
  red = class_auto:new() --создадим красный авто

Теперь, для того чтобы засунуть красный авто в первую ячейку пишем:
Код

  inventar[1].object=red

Проверим:

Результат


Усовершенствуем инвентарь. По щелчку ЛКМ будем добавлять объект в выбранную ячейку, по челчку ПКМ - удалять, а при нажатии на колесико мыши будем выводить описание объекта.
Создадим соответствующие функции:
Код

  -- возвращает ячейку на которую указывает курсор мыши  
  function mouse_in_cell()
  for i,cell in ipairs(inventar) do
  if mpos.x > (cell.x - size_cell) and mpos.x < (cell.x + size_cell) and mpos.y > (cell.y - size_cell) and mpos.y < (cell.y + size_cell) then
  return i --возвращаем номер ячейки
  end
  end
  end
   
  -- всплывающая подсказка  
  function help_func()
  for i=1,kol_cell do  
  if empty_cell_num ~= nil then
  if inventar[empty_cell_num].object ~= nil and self.window:MouseDown(3) then  
  self.context:SetColor(0,1,1)
  self.context:DrawText(inventar[empty_cell_num].object.description , mpos.x , mpos.y)
  end  
  end
  end
  end
   
  --функция добавления и удаления объекта
  function add_dell(obj)
  -- добавление объекта в инвентарь
  if empty_cell_num ~= nil then --добавим проверку
  if self.window:MouseHit(1) then
  inventar[empty_cell_num].object=obj
  end
  end
   
  -- удаление объекта из мнвентаря
  if empty_cell_num ~= nil then
  if self.window:MouseHit(2) then
  inventar[empty_cell_num].object=nil
  end
  end  
  end

Если разобраться, то все просто.
Первая ф-я возвращает номер ячейки, над которой находится курсор мыши
Вторая ф-я выводит описание объекта над ячейкой, на которую указывает курсор мыши
Третья ф-я в зависимости от нажатой кнопки, добавляет или удаляет объект, на который указывает курсор мыши

Проверяем... ЛЕВОЙ КНОПКОЙ МЫШИ добавляем объект, ПРАВОЙ -удаляем, а НАЖАТИЕМ НА КОЛЕСИКО - выводим описание объекта. Радуемся!



PS. хотелось бы услышать вопросы и предложения ))
Категория: Программирование | Добавил: ant0N (17 Мая 2013) | Автор: Антон
Просмотров: 7962 | Комментарии: 5 | Рейтинг: 4.0/6 |
Теги: урок по LUA, Полиморфизм, oop, Lua Script, Метатаблицы, ЛУА, ООП в lua, наследование, LUA, Leadwerks 3
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «LUA: Создание инвентаря», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 5
+2-
5 Изя   (17 Августа 2013 23:30) [Материал]
Хороший урок, а по Hud'у статья будет?

+3-
1 Shkololo_Killer   (19 Мая 2013 08:28) [Материал]
Отличные уроки! Продолжение будет????

+1-
2 ant0N   (19 Мая 2013 09:20) [Материал]
ant0NСпасибо!
Продолжения скорее всего не будет, не вижу смысла в этом. Здесь правят C# и GML. smile

+2-
3 Mosquito   (21 Июня 2013 18:52) [Материал]
беру свои слова обратно строек кода не 20 а 60 smile
а по теме:
-растолковано все вполне хорошо;
-с учетом того что на код Сталкера вроде не похоже то молодец;
-с учетом того что подобных уроков по Луа крайне мало то может тебе стоит продолжить (разумеется если наберется достаточное количество тех кто эти уроки будет читать)ю

+1-
4 ant0N   (23 Июня 2013 08:32) [Материал]
ant0Nкстати, тот инвентарь совершенно иначе сделан, без ООП
Да и кода там побольше, в связи с манипулированием игровых объектов smile
спасибо за отзыв! очень приятно happy

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Litiengine
  • Kodu
  • Flame
  • Pyxel
  • Byond
  • Sprite Widget
  • ReMooD
  • AppGameKit Studio
  • Moddio
  • Wolfenstein 3D Classic iOS
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг