Циклы - Game Maker - Конструкторы игр, системы разработки игр
Навигация по сайту
Сайт:

Дополнительно:

Файловый архив:

Каталог статей:

Форум:


Категории раздела
Game Maker [27]
Flash [3]
FPS Creator X9, X10 [1]
Scirra Construct [14]
Multimedia Fusion [0]
001 Game Maker, Map 001 [0]
3D RAD [16]
3D Game Studio [1]
Silent Walk FPS Creator [0]
Blender (Блендер) [1]
Game Editor [0]
Остальное [1]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Какой ОС Вы пользуетесь?
Всего ответов: 1070

Партнеры сайта
....

Циклы

00:51
Прежде чем...

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

GML (Game Maker Language) - язык программирования Game Maker.

Объект-контроллер - часто невидимый игровой объект, осуществляющий ряд важных функций (подгрузка частиц, ресурсов, проверка опций игры, генерация событий по времени, контроль очков, жизней и т.д.). Прямого участия в игровом процессе (стрельба, движение, столкновение) данные объекты не принимают. Исходя из названия, данный объект призван следить за ходом игры и по возможности делать его более реалистичным, динамичным и т.п.

Объект-генератор - объект, который что-то создает или запускает какие-то функции. Такие объекты могут быть, как видимы (взрыв здания), так и невидимы (генерация облаков при помощи частиц). Такой объект не осуществляет непосредственного контроля, он реагирует на совершение определенного события, например рисования, столкновения, уничтожения и т.д.

Введение

Некоторые люди, начинающие изучать GML, возможно, сталкивались с проблемой реализации циклов. Это особенно было актуально для тех, кто с программированием как таковым столкнулся впервые. Скорее всего, возникали вопросы и утверждения типа: «А куда эти циклы вставлять», «А для чего они вообще нужны?», «А почему моя игра зависла из-за одного вставленного цикла?», «Да просто вставлю в Destroy, условий десять, и не буду париться с этой шнягой...». Как все же показывает практика циклы - не только полезная, но и зачастую просто необходимая вещь.

Задумайтесь, например, как можно в комнате расставить повторяющиеся предметы на одной линии (пускай будет по ширине)? Допустим, что нужный объект шириной в 32 пикселя, и он является, к примеру, несущей стеной в комнате (объект - o_wall).

Ответ новичка: «Зайти в редактор комнат и расставить вручную».

А если комната шириной в 2560 пикселей, то ручная расстановка - дело не очень занятное.

Тогда можно в Create объекта-контроллера написать instance_create (0,32,o_wall), instance_create (32,32,o_wall),... instance_create (2528,32,o_wall), instance_create (2560,32,o_wall).

Ну что же, если среди нас есть мазохисты-самоубийцы, милости просим, вот только, сколько игра с таким кодом будет весить, а если еще не использовать деактивацию за пределами вида, то обеспечены еще и приличные тормоза.

Ну не будем о грустном, а попробуем понять «Что это за цикл и с чем его едят». Также, во избежание лишних вопросов и ненужных предложений хочу объяснить, что все вышесказанное лишь пример и существует много обходных путей создания несущих стен в игре, один из которых - создание одного объекта в пределах вида с дальнейшим его перемещением (вместе с видом).

Как читать цикл на обычном языке

Все мы люди и общаемся при помощи речи (по научному - вторая сигнальная система), речь в свою очередь передается при помощи условных символов и звуков - языка. Символы одного языка можно перевести в символы другого. GML - тот же язык, знаки и символы которого легко можно перевести, не будем далеко ходить, на русский. Например, if(y<576){instance_destroy()} - это «Если переменная "y" данного объекта меньше 576, то данный объект уничтожаем». То же самое касается и циклов. На практике мы часто в своем мозге преобразуем код GML в человеческий язык, что упрощает написание будущего кода.

Цикл for:

Code
for(i=0;i>5;i+=1){instance_create(x,y,o_rubbish)}

- «Выполняем создание объекта o_rubbish в координатах x и y пять раз (это следует из части инициации цикла)». Не правда ли просто.

Цикл repeat:

Code
repeat(5){instance_create(x,y,o_rubbish)}

- в данном случае то же, что и в примере с циклом for.

Цикл while:

Code
while(y>32){y=random(room_height)}

- «Пока переменная "y" данного объекта больше 32, пробуем помещать объект в комнату по вертикали».

Цикл do-until:

Code
do{ y=random(room_height)}until(y>32)

- почти тоже самое, что и пример с while, только цикл здесь выполняется хотя бы один раз.

Итак, подытожим: цикл for и repeat мы используем, когда знаем, сколько раз должен исполняться цикл, while применяем, когда число оборотов цикла неизвестно, do-until - разовое выполнение куска кода и циклическое его исполнение до тех пор, пока соблюдается условие.

В каких событиях использовать циклы

Любые циклы не рекомендуется ставить в событие Step, так как в каждом шаге цикл будет выполняться снова и снова, что повлечет за собой зависание игры, Тоже касается и события Draw. Наиболее эффективно применять циклы в событиях, которые выполняются один шаг: Create, Destroy, Collision, Alarm[x] и т.д.

Практика применения

Теперь немного практических решений:

1) При взрыве самолета необходимо создать разлетающиеся обломки.

Допустим, что физика для обломков уже придумана, и нам нужно только создать случайное количество обломков (o_rubbish), которые разнесутся в разные стороны. Это можно реализовать при помощи цикла:

В Destroy (объект самолета):

Вариант 1:

Code


for(i=choose(0,1,2);i<=5;i+=1)

{

instance_create(x-random(24)+random(24),y,o_rubbish)

}

/*В таком случае будет создаваться от 3 до 6 обломков*/


Вариант 2:
Code


repeat(floor(random(7)))

{

instance_create(x-random(24)+random(24),y,o_rubbish)

}

/*Максимум 6 обломков, или они не создаются вообще*/


P.S.: первый вариант более гибкий.

2) Необходимо сортировать объекты, например генераторы частиц (o_water), в комнате. Подразумевается создание объектов в комнате по линии с определенным интервалом.

В Create (сторонний объект-контроллер, создающий объекты):

Code
for(i=0;i<=room_width;i+=50)

{

instance_create(i,582,o_water)

}

/*Создаем объекты-генераторы на высоте 582 с шагом 50 пикселей по горизонтали,   
если комната большая, то используем деактивацию за пределами вида*/


3) Необходимо, чтобы при взрыве снаряда во все стороны разлетались пули (o_bullet).

В Destroy (объект снаряда):

Code

for (i=1;i<=32;i+=1)

{

bullet = instance_create(x,y,o_bullet)

bullet.direction = 11.25*i

bullet.speed = 5

}

/*Пули будут разлетаться на одинаковом расстоянии друг от друга*/

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


Категория: Game Maker | Просмотров: 2157 | Добавил: ДядяВолк (11.08.2010) | Рейтинг: 0.0/0
Источник: http://quadrathell.cn.ua/ | Автор: logos2012 (Лебедев Антон) - 24 июл | |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Гоночное авто (0)
Циклы (0)
статьи по Yogurt3D (0)
Начинаем изучать PHP (4)
Создание многопользовательской(online) игры на Game Maker. (часть 2) (0)
Создание рикошета пуль от стены (4)
Библиотека STL (0)
Создание многопользовательской(online) игры на Game Maker. (часть 1) (0)
3d Rad - Как добавить свою модель (6)
Создание RTS игры (2)
PHP и MySQL – Теоретический курс. Введение. (2)
Создаем платформер. Scirra Construct (4)
Синтаксис GML в сравнении с Pascal (1)
Учимся писать игру на Delphi (3)
Полезные функции и процедуры: часть 1 (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мы в социальных сетях

Поиск
Поиск по всему сайту:
Поиск по разделу:

Панель пользователя
Здравствуйте, Гость


Ник:
Пароль:
Запомнить :

Ваш IP: 54.80.21.61

Случайные конструкторы

Случайные движки

Случайные статьи

Статистика
Онлайн всего: 2
Гостей: 2
Пользователей: 0

На сайте были:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2017 Хостинг от uWeb
Топ Разработка игр Рейтинг@Mail.ru