Русскоязычный мануал по PGE.
В связи с появлением соавторов и желанием исправить старые ошибки, считаю нужным перезапустить этот проект. Отныне у него три автора -
.
Все статьи для лучшего понимания будут переписаны, а также, для удобства, будут собраны в шапке этой темы. Всё это сделает чтение статей более комфортным. *про привлечение новых читателей я тактично умолчу*
Тема будет периодически обновляться. Свои отзывы, пожелания и предложения оставляйте в комментариях.
1. Комментарии автора непосредственно в тексте (не в исходном коде программ) будут помещены в символы **. По одному в начале и конце комментария. Комментарии необязательны к ознакомлению, но всё же вам следует обратить на них внимание.
2. Статьи будут разделены на логические части. В основном это будут теория, практика и приложение. Хотя, могут присутствовать и другие части. О них авторы упомянут вас заранее.
Если вы читаете эту статью, то, скорее всего, вы уже знаете что такое PGE. Ну а если нет – не страшно - краткое описание вы можете увидеть под спойлером.
PGE (Phoenix Game Engine) – преимущественно игровой движок, написанный для PSP.
Основная информация:
Авторы: InsertWittyName и MK2k
Язык движка: собственный диалект – ответвление от lua.
Последняя версия: 0.02
Что вам нужно знать.Для чтения этого мануала, вам следует знать некоторые вещи:
1. Английский язык. Достаточно и начального уровня.
2. Знать lua/любой другой язык программирования. *Не обязательно, но предпочтительно. Они будут способствовать пониманию происходящего.*
Подготовка.Подготовим всё нужное для успешного программирования:
1. Сам движок. *Его вы можете найти по ссылке //www.luaplayer.org/?page_id=81.
На странице загрузок выберите файл PGE 0.02. Нажмите гиперссылку с аналогичным названием. После этого скачка начнётся автоматически. Скаченный архив распакуйте в удобное для вас место. Из папки заранее удалите файл script.lua и папку samples – они нам не понадобятся*
2. Любой текстовый редактор, будь то блокнот или wordpad.
3. PSP/ эмулятор PSP.* PSP будет нужна для тестирования*
4. PSPBrew – её назначение будет описываться в отдельной статье.
Если у вас на компьютере присутствуют все элементы, указанные выше, то вы готовы начать программировать! Именно этим мы и займёмся в следующем уроке.
Подведём итог. В этом уроке мы подготовили всё нужное для дальнейшего успешного программирования.
В следующем уроке мы изучим основы PGE и напишем свою первую программу!
В этом уроке мы приступим к изучению PGE-диалекта, а также напишем нашу первую программу.
Теория.
Начнётся наше изучение языка с теории. Мы не будем углубляться в ориентировку языка, дату его создания и т.п. Мы просто расскажем вам, как устроена структура исходного кода *условимся называть его “листинг”*, а также в чём особенность языка LUA *именно LUA. Просто PGE-диалект будет иметь те же самые особенности. А относить их именно к PGE будет неправильно*. Также мы опишем процесс инициализации *определения* различных объектов.
Особенности языка LUA. В этом разделе я расскажу вам лишь об одной, но очень важной особенности – в LUA нет жёсткой типизации *то есть, если вы присвоите какому-то типу значение, которое не подходит его типу, то изменится именно тип, а не значение.*, что приводит нас к такому понятию, как контейнеры *это не совсем точное название, но условимся называть их именно так*.
Контейнеры. Контейнер – это пространство, где хранится значение какого-либо объекта. Контейнеру не важен тип объекта, ему важно лишь то, что в нём хранится значение. Если вы при просто объявите контейнер *об объявлениях, определениях и инициализации будет написано под спойлером в конце абзаца*, а не инициализируете, то он попросту не будет создан. Пример *два символа -, то есть “--”, означают комментарий в LUA*:
сonteyner -- контейнер не будет создан
conteyner = 2 -- создастся контейнер, содержащий значение “2”
Объявление – простыми словами, процесс, при котором вы просто говорите компьютеру, что объект существует, но не указываете его значение.
Определение *в данном случае аналогично инициализации* - процесс, в котором вы указываете компьютеру на существование объекта и сразу наделяете его значением.
Структура исходного кода. Как и во многих других языках программирования, LUA имеет свою структуру исходного кода.
Структура исходного кода – это не визуальный *никакими визуальными способами он не выделяется* порядок предоставления компонентов компьютеру. Иными словами, мы должны писать программы по определённому плану, стараясь его не нарушать *придерживаться этой структуры – хороший стиль программирования*.
LUA (и PGE в том числе) имеет следующую структуру (план):
• Инициализация переменных;
• Функции;
• Основная часть программы *будем называть её “телом”*;
Это всё, что вам надо знать о структуре исходного кода в LUA. Переходим к
практике!
Практика. В этом уроке практика будет немного необычной – начнётся она с теории. Но вся эта теория будет сразу же применена на практике, так что всё же позволю себе совместить эти два раздела.
Программа “Hello, World!” Цели и задачи:• Написать программу, выводящую на экран PSP фразу: “Hello, World!”;
• Фон должен быть чёрным;
• Шрифт должен быть белым.
• Шрифт – Arial.
Думаю, что для первой программы этого будет достаточно.
Приступим. Будем делать всё по пунктам, чтобы было понятней.
1. Создание скрипт-файла.1. Откройте любой текстовый редактор.
2. Нажмите на пункт файл главного меню.
3. В выпадающем меню выберите “Сохранить как”.
4. Выберите пункт “Все форматы”.
5. Напишите в строке “Имя файла” “script.lua” *скобки в данном случае необязательны*.
6. Сохраните файл в папке с PGE.
2. Написание программы.Итак, напишем, наконец, нашу первую программу. Она будет выводить на экран psp фразу ”Hello, World!”
Откройте файл ”script.lua”. В нём пока пусто, но мы это исправим. Для начала, добавьте в папку с script.lua шрифт-файл(он имеет формат “.ttf”, а найти стандартные шрифту можно через “Пуск – Панель управления - Шрифты”).
Теперь нам надо указать программе, что этот шрифт существует и показать, где он находится, т.е. инициализировать.
Шаблон инициализации шрифта:
= pge.font.load(“название шрифта”, размер шрифта, участок памяти, в который будет записан шрифт(лучше используйте PGE_RAM, т.к. он обеспечивает бОльшую память).
И пример:
verdana12 = pge.font.load(“verdana.ttf”, 12, PGE_RAM)
Далее обозначим контейнер, в котором будет храниться цвет шрифта. Инициализация цвета происходит через функцию pge.gfx.createcolor(степень красного, степень зелёного, степень синего). Степень цвета (т.е. интенсивность его использования) может находиться в промежутке от 0 до 255. Причём, если поставить все 3 показателя на 0, то они использоваться не будут, и, соответственно, создастся чёрный цвет (как стандартный). Если поставить все по 255, то получим белый цвет.
Шаблон инициализации цвета:
= pge.gfx.createcolor(степень красного, степень зелёного, степень синего)
И пример(создаём красный цвет):
red = pge.gfx.createcolor(255, 0, 0)
Создайте белый цвет. Он будет цветом нашего шрифта. Назовите его “white”.
Далее создадим переменные с координатами положения нашего текста. Их делаем как обычные lua-переменные.
Пример:
x = 200
y = 130
В них хранятся соответственно x и y координаты.
Всё, с объявлением переменных мы закончили. Теперь приступим непосредственно к ”начинке” нашей программы.
Тело программы будет выглядеть следующим образом:
while pge.running() do -- заставляет программу работать, пока мы сами из неё не выйдем
pge.gfx.startdrawing() -- начало отрисовки в буфер
pge.gfx.clearscreen() -- очистка экрана *изначально он содержит “мусор”*
<основной код программы> -- здесь всё понятно
pge.gfx.enddrawing() -- завершение отрисовки в буфер
pge.gfx.swapbuffers() -- вывод из буфера на экран
end -- завершение цикла while
Этот шаблон тела мы будем использовать во всех программах. Постепенно он будет дополняться новыми функциями.
Приступим к основному коду программы.
Для того, чтобы использовать визульные файлы в нашей программе, их нужно активировать. Если их не активировать, то они не будут отображаться.
Активация проходит по следующему шаблону:
:activate()
Пример:
verdana12:activate()
Теперь создадим строки, которые будут непосредственно выводить текст в буфер. Вывод текста происходит через обращение к самому шрифту.
Шаблон обращения выглядит так:
:print(координата x, координата y, цвет, “Текст”)
Вот пример с использованием ранее инициализированных нами объектов:
verdana12:print(x, y, white, “Hello, World!”).
Соедините все части программы в одну. Всё. Поздравляю, Вы сделали свою первую программу на PGE *а может и не первую. Фраза рассчитывалась на новичков, так что не судите.*
Далее приводится полный листинг программы(для тех, кто что-то не понял, или что-нибудь не получилось):
white = pge.gfx.createcolor(255,255,255)
verdana12 = pge.font.load("verdana.ttf",12, PGE_RAM)
x = 200
y = 130
while pge.running() do
pge.gfx.startdrawing()
pge.gfx.clearscreen()
verdana12:activate()
verdana12:print(x,y,white,"Hello, World!")
pge.gfx.enddrawing()
pge.gfx.swapbuffers()
end
Подведём итог. В этом уроке мы узнали про структуру исходного кода LUA, контейнеры, а также научились работать с текстом и даже написали первую программу!
В следующем уроке мы изучим средства ввода в PGE LUA, научимся работать с изображениями, а также сделаем заготовку для нашей первой игры-платформера!