Любовь в пикселях или что такое Love2d

от автора

Что же такое Love2d и о чем этот пост? Это кроссплатформенный фреймворк для разработки 2d игр. Почему именно love2d? Потому что это бесплатный, легкий, кроссплатформенный, с открытым исходным кодом, а главное сделанный с любовью движок.

Подготовка

Писать игры на нем можно хоть в блокноте, но я буду использовать Sublime Text 2, так как он прост и гибок. Скачать love можно вот здесь под все популярные десктопные платформы. Запускаем Sublime text и сразу идем в Tools->Build System->New Build System… И пишем туда вот такое:

{     "selector": "source.lua",     "cmd": ["c:\\Program Files\\LOVE\\love", "${project_path:${folder}}"] } 

(Если у вас x64 меняем путь к love)

Это для удобства запуска, теперь все, что нужно это нажать Ctrl+B. Создаем папку где мы будем хранить нашу игру. В ней создаем main.lua. В этом файле будет хранится основа нашей игры. А в Sublime text добавляем папку в проект. Все готово. Должно получиться что то вроде этого:

.

Хочу код!

Вся логика будет обновляться в функции love.update(dt), а прорисовка у нас в love.draw(), инициализация происходит love.load(). Поэтому давайте сразу напишем их:

function love.load() 	 end  function love.update(dt) 	 end  function love.draw()  end 

Теперь давайте добавим загрузим картинку и сразу ее нарисуем. Картинки загружаются с помощью функции love.graphics.newImage(filename), а рисуются в love.graphics.draw(image, x, y). Добавляем в папку вот эту картинку. И пишем код:

local habrImage, width, height  function love.load() 	habrImage = love.graphics.newImage("habr.png") 	width = love.graphics.getWidth() 	height = love.graphics.getHeight() end  function love.update(dt) 	 end  function love.draw() 	love.graphics.draw(habrImage, width / 2 - habrImage:getWidth() / 2, height / 2 - habrImage:getHeight() / 2) end 

Ctrl + B и у нас что-то не красивое, давайте подправим и сделаем фон белым. Добавим в начале отрисовки вот такую строчку:

love.graphics.setBackgroundColor(255, 255, 255) 

И вот, приятная глазу, картинка.

Это все, конечно круто, но давайте добавим жизни нашей игре и сделаем действия с картинкой, а именно:
— По клавише R картинка будет крутится
— По клавише S картинка будет увеличиваться\уменьшаться
— По клавише M картинка будет двигаться.

Чтобы это реализовать, добавим переменные state (будет отвечать за происходящие), rotation (угол картинки), scale (ее размер), ox, ox (смещение центра картинки) и delta(эта переменная будет отвечать за апдейт переменных). Теперь о инпуте, в love когда клавиша опускается вызывается функция love.keypressed(key, unicode), а при поднятии love.keyreleased(key). Мы будем отслеживать опускание клавиш. Теперь сам код:

local habrImage, width, height, state, rotation, scale, ox, oy, delta  --инициализируем все function love.load() 	habrImage = love.graphics.newImage("habr.png") 	width = love.graphics.getWidth() 	height = love.graphics.getHeight() 	state = "none" 	resetVariables() end  --никто не любит писать одно и тоже много раз function resetVariables() 	rotation = 0 	scale = 1 	ox = 0 	oy = 0 	delta = 1 end  --смотрим что было нажато function love.keypressed(key, unicode) 	if key == "r" then 		state = "rotation" 		resetVariables() 	elseif key == "s" then 		state = "scalling" 		resetVariables() 	elseif key == "m" then 		state = "moving" 		resetVariables() 	elseif key == "space" then -- чтобы не залипать (: 		state = "none" 		resetVariables() 	end end  --логика игры function love.update(dt) 	if state == "rotation" then 		--крутим картинку 		rotation = rotation + delta * dt 	elseif state == "scalling" then 		--увеличиваем 		scale = scale + delta * dt 	elseif state == "moving" then 		--здесь немного посложнее, но все же просто: 		--каждый раз мы увеличивыем дельту 		--а потом берем ее за угол для косинису и синуса 		--и крутим картинку 		delta = delta + delta * dt 		local radius = 50 		ox = radius * math.sin(delta) 		oy = radius * math.cos(delta) 	end end  --рисуем function love.draw() 	--рисуем белым 	love.graphics.setBackgroundColor(255, 255, 255) 	--рисуем картинку 	love.graphics.draw(habrImage, width / 2 - habrImage:getWidth() / 2, height / 2 - habrImage:getHeight() / 2, rotation, scale, scale, ox, oy) end 

На этом все, господа. Удачи с созданием игр! Для помощи вот вам вики и офф сайт.

З.Ы. Это все писалось на 0.8.0.
З.З.Ы. Не забудьте выбрать Build System, чтобы запускать.

ссылка на оригинал статьи http://habrahabr.ru/post/202540/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *