Массивы - 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]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Чем вы пользуетесь для создания игр?
Всего ответов: 500

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

Массивы

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

Перед чтением основной части статьи рекомендуется прочитать следующее.

Массив - явление, когда переменная имеет несколько значений.

Еще одно, может быть, менее понятное определение: Массив - набор последовательно проиндексированных элементов.

Индексная переменная (неофициальный термин) - переменная, которая используется при обращении к массиву данных (или просто массиву), как встроенному, так и объявленному программистом. Примером встроенного массива на GML является alarm[x], view_visible[x] и т.д. Индексной переменной также иногда называют переменные в циклах, но их корректное название - счетчик (обычно это «i»).

Введение

В стандартной документации Game Maker очень мало места уделено такому важному элементу программирования как массивы.

В данной статье будет объясняться принцип использования массивов при создании игр: инициация, составные части массива, принцип применения, практические советы.

Массивы используются для хранения множества относительно однородных данных.

Массив в GML не нужно объявлять, как например на JavaScript (massiv = new Array). Здесь достаточно инициации в Create: элемент массива + индекс. Например, massiv[0], где massiv - элемент массива, а [0] - индекс массива. Все массивы в GML начинаются с нулевого элемента (индекс [0]) и далее идут по нарастающей с шагом +1. То есть [0], [1],… [n-1],[n]. В GML возможно использование и двумерных массивов (но это так для кругозора), то есть массивов, использующих два индекса ([0,0], [0,1],[0,3] и т.д.).

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

В Create (объект-контроллер):

Code


//Допустим, что нужно сгенерировать 5 имен из списка

global.name=floor(random(5))

В Draw (объект нужного персонажа):

Code


//Прописываем имя персонажа в зависимости от сгенерированной переменной

if(global.name=0)

{

draw_text(x,y-10,'Sanek')

}

if(global.name=1)

{

draw_text(x,y-10,'Igorek')

}

if(gl obal.name=2)

{

draw_text(x,y-10,'Vitek')

}

if(global.name=3)

{

draw_text(x,y-10,'Nonamenek')

}

if(global.name=4)

{   

draw_text(x,y-10,'Anton Ivanovich')

}


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

С помощью массивов все можно реализовать намного проще:

В Create (объект-контроллер):

Code


//Генерируем индексную переменную и подгружаем имена

global.j=floor(random(5))

name[0]='Sanek'

name[1]='Igorek'

name[2]='Vitek'

name[3]='Nonamenek'

name[4]='Anton Ivanovich'


В Draw (объект нужного персонажа):
Code


//Выводим (рисуем) сгенерированное имя

draw_text(x,y-10,name[global.j])


Жизнь проще, чем кажется, не правда ли? Если кто-то думает, что оба кода практически не отличаются по объему, то здесь я скажу, есть два момента, на которых стоит заострить внимание:

1) А если необходимо генерировать не пять, а сто имен, то устанешь нажимать CTRL+V, а потом еще редактировать имена и все это в событии Draw, которое работает каждый шаг.

2) Многократное обращение к оператору условия, мягко говоря, не приводит к увеличению производительности.

Надеюсь, что доходчиво пояснил, почему следует обращаться к массивам GML как можно чаще (где это конечно необходимо и оправдано). А теперь идем дальше.

Как понимать массив на простом человеческом языке

Для начала, тогда следует разобраться в том, что же такое переменная и вообще объект в программировании. Теперь немного отвлечемся и представим себе обычного человека. У человека есть голова, руки, ноги, туловище и много различных других частей тела :-) и органов. Все это объекты человеческого организма. Теперь из всего этого многообразия выберем, например ...МММ руку. Рука в свою очередь обладает рядом параметров: цвет, длина, поперечное сечение, в конце концов. Все эти параметры, переводя на язык программирования, и есть переменные. Почему переменные? Ведь мы имеем дело с работой программы (ключевое слово «работа»), а работа - динамичный процесс и как у всего динамичного у человеческой руки может измениться цвет (загар), рука растет (по крайней мере, до 20 лет) как в длину, так и в толщину, поэтому значение цвета, длины, поперечного сечения постоянно меняется. Как уже было сказано выше, работа программы динамична, а динамичность невозможна без изменения каких-то параметров (значений переменных) в ходе работы.

Массив же являет собой совокупность относительно однородных значений, каждое значение записывается в конкретный элемент массива. Грубо говоря, массив - некая база данных, в которую входит переменная с индексом и соответственно ее (переменной) значение. Значит конструкцию типа:

Code

massiv[0]=24;

massiv[1]=32;


следует читать так: «Начальной переменной massiv соответствует значение 24, второй переменной massiv принадлежит значение 32». Все оказалось довольно прозаично.

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

«Практика без теории не нужна, Теория без практики мертва» - Протагор.

Теперь приступим к рассмотрению самой долгожданной части статьи, хотя практики мы уже немного коснулись вначале.

1) Необходимо создание случайного бонуса (o_prize_...) при уничтожении врага (имя объекта не важно).

В Create (уничтожаемый враг):

Code


//Рандомизуем на возможность получения бонуса

bonus=floor(random(101))

//Массив бонусов

j=floor(random(6))//Бонус-рандомайзер - индексная переменная

b[0]=o_prize_hp//В массиве прописывается object_index

b[1]=o_prize_energy

b[2]=o_prize_money

b[3]=o_prize_power

b[4]=o_prize_unvul

b[5]=o_prize_speed


В Destroy (он же):
Code


/*Условие проверяет вероятность создания бонуса - 20 %,   
а функция instance_create(…) создает случайный бонус*/

if(bonus>=40&&bonus<=60)

{

instance_create(x,y,b[j])

}

2) Необходимо запустить случайный таймер из трех имеющихся (alarm[x]) в начале комнаты.

В Create:

Code


//Генерация случайного таймера

timer=floor(random(3))

/*Запуск определенного таймера (вот и работа со встроенным массивом)*/

alarm[timer]=60

3) Немного вспомним статью «Циклы в GM» и попробуем при уничтожении объекта создать случайное количество обломков (o_rubbish_...), причем обломки должны отличаться друг от друга.

В Create:

Code


//Инициируем массив

rubbish[0]=o_rubbish_1//Прописываем object_index

rubbish[1]=o_rubbish_2

rubbish[2]=o_rubbish_3

rubbish[3]=o_rubbish_4

rubbish[4]=o_rubbish_5

В Destroy:

Code


//Инициация цикла (создаем случайное количество обломков)

for(i=floor(random(5));i<5;i+=1)

{

//В каждом обороте цикла создаем индивидуальный объект обломков
instance_create(x,y,rubbish[i])

}

ЧТД, надеюсь, статья поможет новичкам в освоении GML, а опытным программистам даст пищу для размышлений.

Автор: logos2012 (Лебедев Антон) - 25 июля 2008


Категория: Game Maker | Просмотров: 2640 | Добавил: ДядяВолк (11.08.2010) | Рейтинг: 0.0/0
Источник: http://quadrathell.cn.ua/ |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Физика (Blitz 3D) (0)
30 советов по программированию в Delphi (Дельфи) часть 1 (0)
Frame by frame в 3d RAD (2)
Создание многопользовательской(online) игры на Game Maker. (часть 4) (1)
Учебник по Blitz 3D (0)
Создаем танчики (0)
Полный туториал по использованию Radimp (2)
Серия уроков по 3d Rad (0)
Создание наземного врага в платформере (2)
Многопоточность (0)
Blitz 3D - полезная дипломная работа (часть 2) (0)
Создание игр на Game Maker: Создание простого арканоида (0)
Несколько советов (ГМ) (0)
Обмен информацией по TCP/IP-протоколу (Delphi) (0)
Установка Yogurt3D и Adobe Stage3D API на ваш компьютер. (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мы в социальных сетях

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

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


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

Ваш IP: 54.196.215.69

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

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

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

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

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

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