Tutorial:A Guide to Getting Started with Love2D (Русский)
Ниже представлен перевод статьи Майкла Эбенса (BlackBulletIV) «A Guide to Getting Started with Love2D».
Contents
Что за LÖVE?
Я предполагаю, что вы уже знаете, но для тех, кто не знает, скажу: LÖVE — двумерный игровой движок (или, фреймворк). Это среда, которая содержит много предварительно созданного кода, направленная на разработку игр. Он взаимодействует с языком программирования Lua, во многом упрощая процесс создания игр.
По сравнению с другими 2D движками, LÖVE — это лучшее, что я видел до сих пор. Его API (интерфейс программирования приложений) очень прост и (обычно) интуитивен, Lua — это замечательный язык, окружающая среда в целом хороша, а сообщество очень дружественное и поддерживающие. Ах да, он абсолютно бесплатен, а ещё с открытым исходным кодом, распространяется под очень либеральной zlib/libpng лицензией.
Итак, если вы хотите узнать, как использовать LÖVE, читайте дальше.
Начало настройки
Первое, что нужно сделать, это зайти и скачать движок для вашей операционной системы на главной странице. Затем переходите к установке. Возможно, вы захотите установить Lua, вы можете скачать его со страницы загрузки, это позволит вам поиграть с Lua в интерактивном режиме с помощью команды lua
. Вам не нужно устанавливать Lua для запуска игр, так как Lua встроен в LÖVE.
Затем убедитесь, что у вас есть текстовый редактор, в вашей системе. Для Windows, Notepad++, очень хороший бесплатный редактор. На Mac вы можете скачать TextWrangler, если хотите что-нибудь бесплатное, а если нужно, что-то серьезное для программирования, я очень рекомендую вам купить TextMate. Для Linux, gedit, уже встроен в Ubuntu и подобные дистрибутивы Linux, насколько я знаю, он поддерживает Lua .
Далее, если вы на Mac, вам нужно сделать следующее, чтобы упростить запуск игр с терминала. Откройте в вашем текстовом редакторе файл, расположенный в ~/.bash_profile
(вам, возможно, придется делать это с помощью терминала) и скопируйте в него следующее:
alias love="/Applications/love.app/Contents/MacOS/love"
Если вы разместите файл love.app
в папку Applications
, это позволит вам запускать игры LÖVE с терминала с помощью команды love
.
Lua
Язык программирования Lua, которым вы будете рассказывать LÖVE, что делать. Если вы еще не знаете Lua, то вы определенно захотите узнать его основы, прежде чем погрузиться в LÖVE. Подучить Lua можно книгой «Programming in Lua», написанная создателем Lua. Я не совсем уверен, насколько он дружественен для не-программистов, но для тех, кто раньше немного программировал, то он не будет сложен.
Если книга вам не понятна, то попробуйте поискать руководство по Lua для начинающих. Вы можете поискать информацию о программировании в целом, чтобы сделать книгу более удобоваримой.
Структура игры
После того, как вы немного изучили Lua , то вам нужно узнать, как сделать игру. К счастью, LÖVE не требователен к структуре вашей игры. Сначала вы должны создать папку с любым названием. Одним из требований является присутствие файла с названием main.lua
в папке. main.lua
— это скрипт Lua, который запускается при запуске игры, отсюда вы можете загрузить другие скрипты, ресурсы и так далее. Наконец, вы должны поместить всё, с чем ваша игра должна работать (изображения, музыка, код и т.д.) в эту папку.
.love-файлы
Прежде всего вы должны знать при использование LÖVE о .love-файлах. Эти файлы являются стандартным способом упаковки папки игры в одном файле. На самом деле, это простые ZIP-файлы папки игры, за исключением смены расширения на .love
. Это позволяет двойным щелчком или перетаскиванием на исполняемый файл love
запустить игру.
Надо запомнить две вещи. Первое — файл main.lua
должным быть на верхнем уровне ZIP-файла. Это означает, что вы должны заархивировать содержимое папки игры, а не саму папку. Второе — внутри .love-файла, имена файлов и пути к каталогам чувствительны к регистру; так что, не полагайтесь на нечувствительность вашей файловой системы (относится к Windows и Mac).
Теперь, давайте узнаем, как создать .love-файл (информация взята из статьи о распространении игр):
Windows
- Создайте zip-архив
(эта функция встроена в XP, Vista и 7) - Скопируйте все ваши файлы в zip-архив, сохраняя структуру каталогов и убедившись, что файл main.lua в корневом каталоге
(если вы создадите zip-архив содержащим папку со всеми фаулами, это не будет работать) - Переименуйте расширение файла .zip в .love
По умолчанию, расширение файла скрыто. Вам нужно (нажав alt), перейти в свойства папки и снять галочку с "Hide extensions for known file types (Скрывать разрешения известных файлов)" чтобы появилась возможность переименовать zip-архив.
Linux / OS X
Из командной строки:
- Перейдите в каталог проекта например cd ~/Projects/EpicGame
- Запустите zip -r ../${PWD##*/}.love *
- Ваш полностью подготовленный файл .love должен находится прямо рядом с папкой вашего проекта
- Торт!
Для получения подробной информации о .love-файлах и распространении игр, почитайте статью о распространении игр.
API LÖVE
Ваша следующая задача — начало изучения API LÖVE. Он довольно большой, и в этом разделе я дам вам краткое пошаговое руководство о том, как подойти к нему. Прежде чем я начну, я укажу вам на заглавную страницу вики LÖVE, которая содержит полный справочник по API (см. там «Документация» для получения справки по модулям).
API разделён на модули. Каждый модуль (который является просто таблицой) живет в модуле (опять же таблице) под названием love
. Примеры модулей: love.graphics и love.filesystem. Каждые из этих модулей содержат функции, которые делают определенные операции. Например, love.graphics.circle позволяет нарисовать круг на экран.
Многие модули также содержат классы, которые служат определенной цели, как правило, хранение и обработка каких-то данных. Для тех, кто не знаком с объектно-ориентированное программирование (ООП), прокрутите вниз до раздела «Объектно-ориентированное программирование». Во всяком случае, большую часть времени вы будете создавать экземпляры этих классов и функцией с именем, начинающимся с new
, затем следуют имя класса (и эта функция, конечно, находится в модуле). Например, love.graphics.newImage создаёт новый экземпляр класса Image.
Первое в API, на что вы должны взглянуть — это функции обратного вызова расположенные в модуле love, которые вызываются на ключевых этапах игрового цикла. Обратите внимание на урок по обратным вызовам.
Познакомившись с этим, пришло время остановиться на некоторых модулях. Вам не нужно изучать все, поскольку половина из них может не понадобится в простой игре, это зависит от того, что вы хотите сделать. Перво-наперво, ознакомитесь с love.graphics; он самый большой модуль, и изучать весь необязательно. Но, лучше взглянуть на эту функции рисования, и некоторые из её классов.
Далее вам нужно, по меньшей мере ознакомиться с тем, как LÖVE работает с файлами. Для того, почитайте описание love.filesystem. Вы, скорее всего захотите взглянуть на материал в модуле.
После этого, я советую, взглянуть на love.keyboard для добавления ввода с клавиатуры, love.mouse для ввода с мыши, и love.audio для работы с воспроизведением аудио.
Эта часть охватывает основные модули. После этого, взгляните на другие модули, если вам нужно сделать материал более продвинутым. Например, если вам нужна физика, можете использовать love.physics. Вперёд, исследовать!
Объектно-ориентированное программирование
(Обратите внимание, что вам не обязательно нужно понимать ООП, чтобы начать работу с LÖVE, но нужны немного знаний, что и даются ниже.)
ООП является парадигмой программирования, которая базируется на необходимости связывания данных с функциями (также называемые методами), которые манипулируют этими данными. Есть много понятий, которые входят в ООП, так что я объясню только основные. Наиболее распространенным способом (используемым LÖVE) реализации ООП является использование классов и объектов. Классы, подобны плану создания определенного типа объекта. Классы определяют различные данные, которые каждый экземпляр класса (объекты) будут выполять, и методы, которым доступно управление этими данными.
Классы используются для создания объектов. Это означает, что объекты имеют свой собственный набор данных, которыми можно манипулировать, и методы, определенные классом, которые могут что-либо делать с этими данными.
Я знаю, что это всё очень абстрактно, но вот пример прямо из LÖVE:
-- love.graphics.newParticleSystem создаёт экземпляр класса ParticleSystem
-- Теперь переменная ps содержит объект класса ParticleSystem
ps = love.filesystem.newParticleSystem(image, 1000)
ps:getDirection() -- получение некоторых данных, которые содержит объект
ps:setDirection(0) -- установка некоторых данных объекта
ps:start() -- вызов метода, который что-либо делает с данными
Если вы хотите побольше узнать об ООП, сделайте некоторые исследования в Интернете; в этом может помочь статья в Википедии. Я также рекомендую прочитать вводный материал на эту тему, а именно урок NetTuts+; остальное про PHP, но в начале есть хорошие материалы по основным понятиям ООП.
Сообществе
Сообществе LÖVE является одним из его многочисленных опорных пунктов. Сообщество может быть очень полезным, дружелюбным, и обычно быстро реагирующим. Если вы когда-нибудь запутаетесь, проверьте активные форумы и попросите помочи в разделе «Support and Development» (но, конечно, сначала прочитайте правила!). Также есть IRC-канал, расположенный по адресу #love@irc.freenode.net, в котором обычно много людей.
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info