Суббота, 27 Апреля 2024, 13:56

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

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

Создаем игру Space Invaders на LOVE2D
Всем привет. Сегодняшний урок будет посвящен игре Space Invaders на движке LOVE2D. Я думаю все знают что это и с чем это едят. Перейдем от слов к делу.

Создадим папку с проектом и сделаем файл main.lua, в котором пропишем дефолтные три функции:

Код

function love.load()
   
end

function love.update(dt)
   
end

function love.draw()
   
end


Я думаю вы знаете что они делают, иначе бы вы не зашли сюда. Теперь мы создадим таблицу с нашем героем, love.load пишем:

Код

function love.load()
  hero = {}
  hero.x = 400
  hero.y = 500
  hero.w = 64
  hero.h = 32
end


Тут все просто, мы создаем таблицу в который записаны будущие координаты по осям x,y и ширина с высотой. Давайте заставим его двигаться. В love.update(dt) пишем:

Код
function love.update(dt)
  if love.keyboard.isDown("a") then
  hero.x = hero.x - (100 * dt)
  elseif love.keyboard.isDown("d") then
  hero.x = hero.x + (100 * dt)
  end
end


Тут так же все просто, мы проверяем нажатия клавиш и изменяем положение персонажа по оси x. Настало время нарисовать его, в love.draw:

Код

function love.draw()
  love.graphics.setColor(0,0,255,255)
  love.graphics.rectangle("fill",hero.x,hero.y,hero.w,hero.h)

  love.graphics.setColor(0,255,0,255)
  love.graphics.rectangle("fill",0,532,love.graphics:getWidth(),68)
end


Тут так же все просто, первой строчкой мы изменяем цвет в палитре RGB на синий, ведь Red Green Blue, первое значение отвечает за красный цвет, второе за зеленый, третье за синий и наконец четвертое за прозрачность. Дальше мы рисуем прямоугольник в координатах и с такой шириной/высотой, которые мы указали в love.load. Следующие строчки делают тоже самое, но ставят другой цвет и рисуют землю ниже нашего героя. ( метод love.graphics:getWidth() получает ширину экрана, полезная функция). Дальше мы сделаем врагов. В love.load добавляем:

Код

enemies = {}

for i =0,7 do
  enemy = {}
  enemy.w = 32
  enemy.h = 16
  enemy.x = i * (enemy.w + 50) + 100
  enemy.y = 120
  table.insert(enemies, enemy)
end


Тут чуть сложнее, мы создаем пустую таблицу, о ней чуть позже, а потом циклом создаем еще 8 в которых мы описываем наших врагов и потом вставляем это в нашу пустую таблицу. Думаю все понятно, теперь можно и нарисовать их. В love.draw добавляем:

Код

love.graphics.setColor(255,0,0,255)
  for i, v in ipairs (enemies) do
  love.graphics.rectangle("fill",v.x,v.y,v.w,v.h)
  end


Тут мы выставляем красный цвет и потом перебираем таблиц enemies и рисуем в нужных координатах, с нужной высотой/шириной.
Теперь пусть они начнут падать, в love.update(dt) пишем:

Код

for i,v in ipairs (enemies) do  
  v.y = v.y + (25 * dt)
end


Тут мы перебираем таблицу enemies и и изменяем переменную y. Можно тестить.

Теперь мы подошли к финальной части нашего урока, стрельба. В love.load пишем:

Код

bullets = {}


Мы просто создаем пустую таблицу. Дальше дописываем функцию:
Код

function love.keypressed(key)
  if key == " " then
  newBullet = {x = hero.x + 32, y = hero.y, w = 4, h = 16}
  table.insert(bullets,newBullet)
  end
end


В ней мы проверяем нажатие пробела и дальше создаем новую таблицу с данными пули и запихиваем это в нашу пустую таблицу bullets
Теперь в love.update(dt) пишем:

Код

  for i,v in ipairs (bullets) do
  v.y = v.y - (150 * dt)
  end


Объяснять не буду, это было ранее. Теперь нарисуем их. love.draw:

Код

love.graphics.setColor(0,255,255,255)
for i,v in ipairs (bullets) do
  love.graphics.rectangle("fill",v.x,v.y,v.w,v.h)
end


Остался финальный штрих, столкновение пули и врага. Дописываем функцию взятую с вики.
Код

function CheckCollision(x1,y1,w1,h1, x2,y2,w2,h2)
  return x1 < x2+w2 and
  x2 < x1+w1 and
  y1 < y2+h2 and
  y2 < y1+h1
end


Почитайте про нее сами. Теперь идем в love.update(dt):

Код

  for i,v in ipairs (enemies) do
  for j, c in ipairs (bullets) do
  if CheckCollision(v.x,v.y,v.w,v.h,c.x,c.y,c.w,c.h) then
  table.remove(enemies,i)
  table.remove(bullets,j)
  end
  end
  end


Тут все просто, перебираем таблицы и при исполнении функции CheckCollision в заданных координатах, мы уничтожаем и врага и пулю.
Теперь вы сами должны сделать конец игры, если враги все таки упадут на землю. Пользуйтесь вики и все будет хорошо. А в следующем уроке мы разберем создание Scroll-Shooter'a. Всем пока!
Категория: Создание игр | Добавил: Madeline (09 Июля 2015)
Просмотров: 8433 | Комментарии: 1 | Рейтинг: 4.0/8 |
Теги: 2d, ЯП, ЛУА, , движок, Love2D, туториал, Урок, лове, LUA
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

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

Всего комментариев: 1
+2-
1 --antonyvolkoff--   (24 Июля 2015 11:43) [Материал]
--antonyvolkoff--Можно было скриншотами разбавить, для привлекательности smile

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • TotoyeVN
  • CryEngine V
  • DEngine
  • Odamex
  • WinDoom
  • Seccia
  • C64Studio
  • Empty Clip
  • Adventure Game Studio
  • 8bitworkshop
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг