Блоги :: Колонка пользователя vanek-ridal :: Игровой движок Phoenix Game Engine - Часть 2

 
 
 
PSP Club
AllHits.Ru - Прокачай свою PSP на максимум!
Разделы портала
Поиск




Авторские колонки о PSP - Расскажи всем о своих впечатлениях
Колонки / Блоги пользователей PSP-Club.Ru

Игровой движок Phoenix Game Engine - Часть 2

Автор: vanek-ridal | Пишет Инструкции Инструкции | Опубликовано 17.10.2009 16:27

Игровой движок Phoenix Game Engine - Часть 2

И снова привет всем!
Я продолжаю серию статей о Phoenix Game Engine.
Это уже вторая часть, а первую Вы можете почитать здесь:
Игровой движок Phoenix Game Engine - Часть 1

------------------------------------------------------------------------

В предыдущей части мы остановились на главе 3, поэтому здесь начнём с четвёртой.

4. Продолжаем разбираться

4.1. Рассматриваем "Hello, World"

Здесь я снова приведу код программы "Hello, World".

Цитата:

white = pge.gfx.createcolor(255,255,255) -- создаём белый цвет

MyFont = pge.font.load("verdana.ttf",12) -- загружаем шрифт из файла verdana.ttf с размером 12
-- комментарии пишутся после двух чёрточек

while pge.running() do -- цикл до тех пор пока pge выполняется
pge.gfx.startdrawing() -- начало рисования
pge.gfx.clearscreen() -- очистка экрана
MyFont:activate() -- активируем шрифт перед использованием
MyFont:print(25,20,white,"Hello, World!") -- печатаем белым цветом в координатах (25,20)
pge.gfx.enddrawing() -- конец рисования
pge.gfx.swapbuffers() -- это тоже относится к концу рисования
end -- конец цикла


В прошлый раз мы рассмотрели загрузку шрифта и вывод текста, а также создание цвета.
В этот раз мы рассмотрим те операторы и функции, о которых я не говорил.

Во-первых, комментарии. Как Вы заметили, они пишутся в таком виде:
Цитата:
-- комментарий


Во-вторых, цикл WHILE. Он записывается так:
Цитата:

while условие do
команды
end

Команды внутри цикла WHILE выполняются до тех пор,
пока условие не станет ложным.

В-третьих, pge.gfx.startdrawing() и pge.gfx.enddrawing().
Эти две функции нужны для работы с экраном.
Перед тем, как выводить текст или изображения на экран нужно вызвать функцию pge.gfx.startdrawing().
Она переключает вывод графики на виртуальный экран.
После того как мы отрисовали что-либо на виртуальном экране,
мы должны вывести содержимое виртуального экрана на реальный экран (дисплей PSP).
Для этого нужна функция pge.gfx.enddrawing().
Всё это нужно для того, чтобы избежать эффекта мерцания.
После функции pge.gfx.enddrawing() непременно должна идти функция pge.gfx.swapbuffers().
Она завершает вывод графики на реальный экран.

Проще говоря, функция pge.gfx.startdrawing() начинает рисование графики,
функция pge.gfx.enddrawing() завершает рисование графики,
а функция pge.gfx.swapbuffers() отрисовывает всю графику на дисплее PSP.

4.2. Правила оформления кода в PGELUA

Код каждой нормальной игры на движке PGE должен иметь следующий вид:

- Цикл пока PGE выполняется
- Начало рисования
- Очистка экрана
- Рисование
- Конец рисования
- Вывод графики на дисплей
- Конец цикла

Если описать эту схему на языке Lua:

Цитата:

while pge.running() do -- цикл до тех пор пока pge выполняется
pge.gfx.startdrawing() -- начало рисования
pge.gfx.clearscreen() -- очистка экрана
-- здесь идёт рисование
pge.gfx.enddrawing() -- конец рисования
pge.gfx.swapbuffers() -- вывод графики на экран
end -- конец цикла


Вот у нас получился шаблон для будущих программ.
Начинайте писать игру именно с этого шаблона.

------------------------------------------------------------------------

Итак, с теорией, наконец, покончено!
Но я обязательно к ней вернусь, ведь мне нужно будет многое объяснить.
А пока я предлагаю Вам несколько уроков, благодаря которым Вы сможете написать простую игру.
Вся пятая глава будет состоять из практических уроков.
Если Вы оказались здесь, потому что Вам лень было читать теорию, лучше вернитесь на 1 главу назад
- без теории Вы не сможете полностью вникнуть в код, который я буду приводить.

5. Уроки

5.1. Урок 1. Нажимаем кнопки

Итак, чтобы определить, нажата ли в данный момент определённая кнопка,
используется функция pge.controls.held().

Цитата:

pge.controls.held(кнопка)


Кнопка задаётся одним из следующих значений:
Цитата:

PGE_CTRL_SELECT - select
PGE_CTRL_START - start
PGE_CTRL_UP - вверх
PGE_CTRL_DOWN - вниз
PGE_CTRL_LEFT - влево
PGE_CTRL_RIGHT - вправо
PGE_CTRL_CROSS - крестик
PGE_CTRL_CIRCLE - кружок
PGE_CTRL_TRIANGLE - треугольник
PGE_CTRL_SQUARE - квадрат
PGE_CTRL_RTRIGGER - кнопка R
PGE_CTRL_LTRIGGER - кнопка L


Справа подписаны кнопки, которые соответствуют данным значениям.

Обратите внимание, данные значения не являются строками, это константы.
Короче говоря, кавычки писать не нужно.

Пример:
Цитата:

MyFont:activate()
if pge.controls.held(PGE_CTRL_CROSS) then
MyFont:print(45,20,white,"Cross button is pressed!")
end


В этом примере проверяется нажатие кнопки X, и, в случае, если она нажата выводится надпись "Cross button is pressed!".

Есть и другая функция проверки нажатия кнопок:
Цитата:

pge.controls.pressed(кнопка)


Она отличается тем, что срабатывает, когда кнопку только что нажали,
в то время как предыдущая функция проверяет, удерживается ли кнопка.

Внимание! Чтобы функции с кнопками работали, нужно после while pge.running() do добавить pge.controls.update()

Готовая программа:
Цитата:

green = pge.gfx.createcolor(0,255,0) -- создаём зелёный цвет

MyFont = pge.font.load("verdana.ttf",12) -- загружаем шрифт из файла verdana.ttf с размером 12
-- комментарии пишутся после двух чёрточек

while pge.running() do -- цикл до тех пор пока pge выполняется
pge.controls.update()
pge.gfx.startdrawing() -- начало рисования
pge.gfx.clearscreen() -- очистка экрана
MyFont:activate()
if pge.controls.held(PGE_CTRL_CROSS) then
MyFont:print(25,20,green,"Cross button is pressed!")
end
pge.gfx.enddrawing() -- конец рисования
pge.gfx.swapbuffers() -- это тоже относится к концу рисования
end -- конец цикла


5.2. Урок 2. Текстуры

Напоминаю, что текстуры должны быть в формате PNG.
Для этого урока нарисуйте какую-нибудь небольшую текстуру и положите её в каталог со скриптом.

Итак, чтобы использовать текстуру, её сначала нужно загрузить:

Цитата:

pge.texture.load(путь к текстуре)


Пример:
Цитата:

MyTexture = pge.texture.load("image.png")


Когда текстура загружена, мы можем её выводить.
Для этого используется следующая функция:
Цитата:

pge.texture.draw(текстура,x,y)

или упрощённый вариант:

текстура:draw(x,y)


Пример:
Цитата:

MyTexture:draw(25,20)


Внимание! Подобно шрифтам, текстуры нужно активировать перед использованием:
Цитата:

текстура:activate()


Пример:
Цитата:

MyTexture:activate()
MyTexture:draw(25,20)


Готовая программа:
Цитата:

MyTexture = pge.texture.load("image.png") -- загружаем текстуру

while pge.running() do
pge.controls.update()
pge.gfx.startdrawing() -- начало рисования
pge.gfx.clearscreen() -- очистка экрана
MyTexture:activate()
MyTexture:draw(25,20)
pge.gfx.enddrawing() -- конец рисования
pge.gfx.swapbuffers()
end


Есть возможности для вывода текстуры с прозрачностью, наклоном, растяжением и т.п., но об этом я расскажу позже.

5.3. Урок 3. Джойстик

Итак, чтобы получить инфу о джойстике, нам понадобятся 4 функции
(лично я не использую 1-ю и 2-ю, поскольку они мне совсем не нужны)

Получение координат джойстика:
Цитата:

pge.controls.analogx() -- возвращает координату X
pge.controls.analogy() -- возвращает координату Y


Возвращаемые значения этих функций - числа от -127 до 128.
Таким образом, центр находится где-то в положении 0.5.

Вот ещё две функции, более удобные:

Цитата:

pge.controls.analogangle() -- возвращает угол, на который повёрнут джойстик, в радианах
pge.controls.analogmag() -- возвращает магнитуду (степень отклонения от центра)


pge.controls.analogmag() возвращает значение от 0 до 1 (число с плавающей точкой)

Внимание! Аналоговый джойстик PSP имеет достаточно низкую точность измерений.
Поэтому все эти функции для работы с джойстиком возвращают постоянно колеблющиеся значения.
То есть, Вам придётся выделить мёртвую зону джойстика.
Например, мёртвая зона для магнитуды джойстика равна 0 - 0.3.
Это значит, что если текущая магнитуда джойстика меньше 0.3, то мы считаем, что она равна нулю.

5.4. Урок 4. Рисуем фигуры

Нарисуем для начала линию:

Цитата:
pge.gfx.drawline(x, y, x2, y2, цвет)


x,y - координаты начальной точки, x2,y2 - координаты конечной точки.

Вот программа, рисующая зелёную линию:

Цитата:

green = pge.gfx.createcolor(0, 255, 0) -- делаем зелёный цвет

while pge.running() do

pge.gfx.startdrawing() -- начало рисования
pge.gfx.clearscreen() -- очистка экрана

pge.gfx.drawline(50, 70, 400, 200, green) -- рисуем зелёную линию

pge.gfx.enddrawing() -- конец рисования
pge.gfx.swapbuffers()

end


Вот ещё фигуры:
(аргументы в [скобках] не обязательные)

Цитата:

pge.gfx.drawstar(x, y, наружный радиус, внутренний радиус, количество вершин, цвет, [поворот])
-- это закрашенная звезда

-- З.Ы. Поворот задаётся в радианах

pge.gfx.drawstaroutline(x, y, наружный радиус, внутренний радиус, количество вершин, цвет, [поворот])
-- а это незакрашенная звезда (только обводка)

pge.gfx.drawcircle(x, y, радиус, количество сторон, цвет)
-- это круг

-- З.Ы. На самом деле это многоугольник, чтобы сделать его более круглым, сделайте больше сторон

pge.gfx.drawcircleoutline(x, y, радиус, количество сторон, цвет)
-- это окружность

pge.gfx.drawrect(x, y, ширина, высота, цвет, [поворот])
-- закрашенный прямоугольник

pge.gfx.drawrectoutline(x, y, ширина, высота, цвет, [поворот])
-- незакрашенный прямоугольник



------------------------------------------------------------------------

Вот и закончилась вторая часть.
Мы разобрались:

- с программой "hello, world"
- с правилами оформления кода

Мы научились:

- работать с кнопками и джойстиком
- загружать и выводить текстуры
- выводить различные фигуры

В следующей части:

- мы ещё лучше научимся работать с графикой
- познакомимся с остальными возможностями PGE
- увидим ответы на часто задаваемые вопросы
- узнаем, кто такой InsertWittyName
- найдём несколько полезных ссылок
- посмотрим на результаты работы

------------------------------------------------------------------------

Ссылка на следующую часть: https://psp-club.ru/blogs/user/103987/Igrovoy_dvizhok_Phoenix_Game_Engine_-_Chast_3/

Специально для PSP-Club.Ru

С Вами был vanek-ridal, всем спасибо за внимание!
PSP Club Vote Bar Проголосовать противПроголосовать за!
Текущий рейтинг +46 Голосов против 4 Голосов за 50
Для того чтобы добавить комментарий, вам необходимо авторизоваться.
Это не займет много времени, а авторизованные пользователи получают доступ к расширенным возможностям клуба.


 
 
Контакты | Обратная связь | Реклама на сайте | RSS RSS Лента. Сводка последних добавлений игр для PSP
MaxiPack Web Projects © 2021. При копировании материалов ссылка на сайт обязательна.
"PSP" и "Play Station" - зарегистрированные торговые марки корпорации Sony Computer Entertainment.