Всем привет. Сегодняшний урок будет посвящен игре 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. Всем пока!
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создаем игру Space Invaders на LOVE2D», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.