Суббота, 21 Декабря 2024, 21:30

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

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

ООП в LUA: От слов к практике
Здравствуйте уважаемые форумчане!
Решил визуально закрепить свою прошлую болтовню про замечательный ЛУА и ООП.
Я выбрал движок Leadwerks3D так как он мне "роднее" ))
Скачайте архив с проектом...

Движок требует создания двух функций:
первая
Код

function App:Start()
  return true
end

вызывается один раз при запуске игры, в ней будет инициализация всех переменных, функций и "классов"

Вторая
Код

function App:Loop()
  return true
end

Эта фунция вызывается каждый кадр пока мы находимся в игре. В не будем писать все, что обновляется/изменяется во время игры

итак, первая ф-ия:
Код

function App:Start() --эта функция вызывается один раз при запуске
   
  -- функции движка для открытия окна и тд..
  self.window=Window:Create(self.title)  
  self.context=Context:Create(self.window,0)  
  self.world=World:Create()  

  --эта переменная будет хранить координаты курсора мыши
  mpos = Vec2(1,1)

  --создаем класс автомобилей
  car = {}
  function car:new(name,ico)
  local obj = {}
  obj.name = name or "UAZ" --имя поумолчанию
  obj.ico = ico or Texture:Load("auto1.tex") --картинка машины поумолчанию
  obj.pos = Vec2(mpos.x, mpos.y) --координаты создания автомобиля  
  setmetatable (obj,self)
  self.__index = self
  return obj
  end

  -- функция для отрисовки автомобиля на экране
  function car:draw()
  return self.ico,self.pos.x, self.pos.y  
  end

  --функция для смены картинки автомобиля после его создания
  function car:get()
  self.ico = Texture:Load("auto2.tex")
  end

  -- функция для оживления автомобиля
  function car:upd()
  self.pos.x = self.pos.x + (1 * Time:GetSpeed()) --двигает авто вправо
  end

  --создадим массив для хранения всех экземпляров автомобилей
  mob = {}  
  k_mob = 0 -- эта переменная будет считать машины

  ------------- НАСЛЕДОВАНИЕ И ПОЛИМОРФИЗМ---------------------------
  -- создание "класса" мотоциклов
  moto = {}
   
  -- переопределим функцию обновления, будем двигать мотоцикл в противоположную сторону
  function moto:upd()
  self.pos.x = self.pos.x - (1 * Time:GetSpeed())
  end
  setmetatable(moto,{__index = car})

  -- создадим массив для хранения всех мотоциклов
  m = {}
  k_mot = 0 -- эта переменная будет считать мотоциклы

  return true
end


Теперь фторая функция:
Код

function App:Loop()
   
  if self.window:Closed() or self.window:KeyDown(Key.Escape) then return false end --для выхода из игры

  --присваиваем переменной координаты курсора мыши  
  mpos = self.window:GetMousePosition()

  --нажатием ЛКМ создаем автомобиль поумолчанию
  if self.window:MouseHit(1) then
  k_mob = k_mob+1 --считаем машины
  mob[k_mob] = car:new()
  end
  --нажатием на КОЛЕСИКО мыши меняем картинку последнего созданного автомобиля
  if self.window:MouseHit(3) then
  mob[k_mob]:get()
  end

  --нажатием ПКМ создаем мотоцикл
  if self.window:MouseHit(2) then
  k_mot = k_mot+1
  m[k_mot] = moto:new(nil,Texture:Load("moto.tex"))
  end

  --функции движка для обновления и рендера.
  self.world:Update()  
  self.world:Render()  
  self.context:Clear();

  --рисуем и обновляем сразу все автомобили
  for i=1,#mob do
  self.context:DrawImage(mob[i]:draw())
  mob[i]:upd()
  end

  --рисуем и обновляем все мотоциклы
  for i=1,#m do
  self.context:DrawImage(m[i]:draw())
  m[i]:upd()
  end

   
  self.context:Sync()
  return true
end


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

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

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • eXgine
  • MyRPG Master
  • Neobook
  • Emcore3D
  • ORTS
  • Reality Factory
  • EMG Studio
  • Amp II Game Engine
  • OpenSpace3D
  • BuildBox
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг