Elite Games - Свобода среди звезд!

Уроки для программистов - Движущееся окно, фон, туманности

GML: УРОК 2: ДВИЖУЩЕЕСЯ ОКНО, ФОН, ТУМАННОСТИ

Немного об GM`e
— Созданные на нём проекты не требуют лицензии. Скачав и зарегистрировав GM, вы можете свободно распространять сделанное на нём. Даже продавать (!)
— Напрямик связанное с предыдущем. Шароварных игр (ShareWare (платные: 30 дней бесплатной игры, а потом – гони денежки)) созданных на GM`e в Интернете – пруд пруди. Может даже больше, чем фриварных (FreeWare (бесплатных)). Согласитесь, довольно веский довод в его пользу
— Надеюсь, не надо объяснять, что ось Y идёт по направления вниз. :)
— Прокрадываются слухи о разработке версии 7.0. Пока не проверенные

Внимание: Продолжаем сделанное в предыдущем уроке И дополнении. Надеюсь вы не забыли сохранить проект :)

Понятно, что на кусочке размером 640х480 точек симулятор не сделать. Поэтому, первая часть данного урока описывает увеличение пространства.

Движущееся окно


Заходим в настройки комнаты. В левом окне переключаемся на вкладку settings (рис. 1).
Name — Название комнаты, употребляемое в списке ресурсов и в кодах. Ставим sys_test01
Caption — Употребляется... Сам не знаю где :). Смысл это использовать был только в GM`t 5.3A. В новой версии смысла я не вижу. Можете писать всё, что угодно
Width — Ширина комнаты. Устанавливаем 4096
Height — Высота комнаты. Устанавливаем 4096
Speed — Скорость. Везде ставьте не менее 60. Иначе будет идти очень медленно. В нашем уроке – везде 64
Persistant — Сохраняет данные о комнате при перезапуске оной. Пока отключаем
Creation Code — Уникальный код, запускающейся при запуске комнаты. Пока оставляем пустой


Запускаем игру и получаем вот этот ужас (рис. 2).

Исправляем ситуацию добавляя камеры (будем их так называть, но по англ. views)

Заходим на вкладку views (рис. 3)
Enable the use of Views — Включить камеры. Конечно
Список камер — Чем больше камер вы используете, тем большая нагрузка на комп. Ибо последнему приходиться перерисовывать всю комнату для каждой камеры. Нам понадобиться только одна камера. View 0. Выделяем её
Visible when the room starts — Этот параметр используется для вкл./выкл. Камер. Включаем
View in the room — Координата и размер от нее. Указывают площадь «записи» камеры. Ставим X:0 Y:0 Width:1024 Height:768
Port on screen — Позиция на пользовательском экране. Ставим X:0 Y:0 Width:1024 Height:768
Object following — Объект, за которым будет наблюдать камера. Выбираем наш корабль. Ставим Hbor и Vbor на половину ширины камеры – 512 и 384 соответственно. Hsp Ии Vsp — максимальная скорость, с какой камера будет летать за объектом. -1 – значит неограниченная. Это и ставим. -1

Запускаем. Всё ок? Нет? Перечитайте еще раз. :)
Если вы не будете находиться у края комнаты, то корабль будет оставаться в центре экрана. Не бойтесь, корабль двигается! Чтобы увидеть это – создаем фон.

Создание фона


Сохраняем картинку (рис. 4)


Нажимаем в главной панели на кнопку с картиной. В списке ресурсов появиться новоиспечённый фон и его настройки (рис. 5)
Name — Название. Меняем на bkg_stars
Load Background — Загрузить фон. Загружаем сохранённую картинку
Width — Ширина фона
Height — Высота фона
Transparent — Будет ли фон прозрачен (цвет левого нижнего пикселя – считается прозрачностью). Да
Edit Sprite — Редактировать фон
Smooth Edges — см. то же для спрайтов. Не включать!!!
Use as tile set — Использовать фон как набор спрайтов. В космосимах это ни к чему. Это нужно при создании РПГ.
ОК — :)


Возвращаемся в комнату и переключаемся на вкладку backgrounds (рис. 6)
Draw background color — Рисовать одноцветный фон (такой как у нас сейчас). Да
Color — Цвет фона. Ставим чёрный
Список фонов — Фоны не влияют на производительность, так как камеры, но свою долю они, всё-таки, отгрызают. Рекомендую использовать 2-3 фона максимум. Выбираем 4-й. На всякий случай
Visible when the room starts — Значит то же, что и для камер
Foreground image — Будет ли фон выше всех других объектов и фонов. Желательно никогда не включать
Выбрать фон — Выбираем наш фон bkg_stars
Tile Hor. — Тайловать фон по горизонтали
Tile Vert. — Тайловать фон по вертикали
Stretch — Растягивает фон по размеру комнаты. Представьте, что будет, когда фон 256х256 растянется на 4096х4096 :). Не представляете? А вы попробуйте включить... :)
Х — Начальная точка фона по X. Оставляем 0
Y — Начальная точка фона по Y. Оставляем 0
Hor. Speed — Горизонтальная скорость движения фона. Оставляем 0
Vert. Speed — Вертикальная скорость движения фона. Оставляем 0

А теперь запускаем. Заметно, что корабль движется?

А теперь примёмся за туманности.

Создание туманностей


Сохраняем картинку (рис. 7). Она и будет нашей туманностью.

Создаем спрайт spr_nebula01 с отключенной прозрачностью. Нажимаем на кнопку center, размещая origin в центр спрайта. Отключаем precise collision checking.

Создаем объект obj_nebula01. Можно даже спрайт ему не ставить. Пишем в <CREATE>

rot = random(360)
rotspeed = 0.05+random(0.1)

B <STEP>

rot += rotspeed

B <DRAW>

draw_set_blend_mode(bm_add)
draw_sprite_ext(spr_nebula01,-1,x,y,1,1,0,c_aqua,0.25)
draw_set_blend_mode(bm_normal)

Объясняю. При создании объекта мы устанавливаем две переменные:
rot – переменная отвечает за вращение объекта
rotspeed – переменная отвечает за скорость вращения

Значение rot выбирается случайное от 0 до 359. За это отвечает функция random(x). Вместо x указывается любое число и random(x) заменяется случайным числом то 0 до x-1. То есть, число всегда меньше x.
rotspeed. Здесь к числу 0.05 градусов за кадр добавляется случайное число от 0 до 0.09. То есть, rotspeed может быть от 0.05 до 0.14.

Каждый кадр к переменной rot добавляется значение rotspeed.

С рисованием надо разобраться поглубже.
draw_set_blend_mode(mode) – Вместо mode указывается одно из этих значений: bm_add, bm_max, bm_subtract, bm_normal.
bm_add – если следующие спрайты будут накладываться один на один, то в месте накладывания будет увеличиваться яркость
bm_max – то же, но яркость увеличиваться не будет. С этим типом часто бывают проблемы.
bm_subtract – вместо цветного спрайта будет рисоваться чёрый вариант.
bm_normal – отключает установленный перед ним тип

draw_sprite_ext(sprite,image,x,y,xscale,yscale,rotation,blend,alpha) — Вместо sprite указываете объект, который рисуется, вместо image – кадр (-1 – все по очереди), вместо x – точка по x, на которой будет рисоваться, вместо y – точка по y, на которой будет рисоваться, вместо xscale – ширина по х (1 – такая как спрайт), yscale – то же, но по y, вместо rotation – поворот (0-359), вместо blend – цвет (c_red, c_orange, c_lime, c_green и т.д.), вместо alpha – прозрачность (0-1).

Мы рисуем спрайт spr_nebula01 со всеми кадрами (-1) на точке x, y объекта (x, y) с размерами, такими как у спрайта, вращением, указанным в rot, цвета аква (c_aqua), и четвертичной прозрачностью.

Потом мы закрываем блендинг bm_normal`ом для того, чтобы другие объекты не рисовались с тему же настройками.

С этими кодами вы создадите отличный эффект «клубящейся» туманности за счет, всего-навсего, её кручения.

Дальше открываем комнату, переходим на панель объектов, отключаем Delete underlying и начинаем штамповать туманности. Где хотите. Всё.

Ах да, отключать эту функцию надо потому, что GM по умолчанию удаляет старый объект, если на него ставить новый. Ну, думаю, вы поняли.

Теперь уж действительно всё.

А, ещё :): если вы хотите увеличить спрайты туманностей, не надо сразу лезть в ФотоШоп или, не дай бог, в Paint. Надо просто увеличить значения xscale и yscale. Например, 1.5.

ВСЁ! :)
ZEUStiger
К началу раздела | Наверх страницы Сообщить об ошибке
Уроки для программистов - Движущееся окно, фон, туманности
Все документы раздела: Для тех, кто хочет писать игры | Движок на OpenGL | Создание игр в Game Maker | Bump mapping | Использование Direct Input | XNA framework |


Дизайн Elite Games V5 beta.18
EGM Elite Games Manager v5.17 02.05.2010