Индустрия видеоигр [7] |
Разработка игр [64] |
Гейм-дизайн и графика [11] |
Сторонние движки и конструкторы [1] |
Прочее [3] |
Уроки по Game Maker [3] |
Game Maker 8.1
Классика. Идеально подходит для создания простых 2D игр на PC. Требует активации. | |
Game Maker for Mac
Абсолютно та же программа, но только для пользователей Mac. Требует активации. | |
Game Maker Studio
Самая новая версия с возможностью кроссплатформенной разработки. Бесплатна. |
Агент Green | 4.2 / 5.0 |
FeDo | 4.2 / 5.0 |
To Mars: Sec... | 4.2 / 5.0 |
To Mars+MapE... | 3.9 / 5.0 |
Paintball | 3.8 / 5.0 |
Топ игр составлен путем пользовательского голосования.
Если вы не согласны с какой-либо оценкой, примите участие и поставьте свой балл игре. Ваша оценка очень важна для нас ;)
Главная » Статьи » Уроки по Game Maker |
Списки, мапы, очереди и стеки
Доброго времени суток, уважаемые читатели! В данной статье речь пойдет о такой полезной штуке в программировании, как структуры данных. И да, вы не поверите, они есть в Game Maker и были в нем уже очень давно. Но в исходниках и туториалах структуры данных почти никогда не встречаются. Впрочем, оно и не удивительно. ds_priority_create, ds_list_add, ds_map_find_value, ds_priority_find_max – я думаю, у многих сейчас мурашки по спине пробежали от названий этих функций. Однако на самом деле страшного в них ничего нет. Более того, структуры данных очень удобны. Кому доводилось реально писать код, со мной наверняка согласится. Надеюсь, что после прочтения данной статьи вы как минимум начнете уверенно использовать списки в своих играх, что значительно упростит вам жизнь и сделает ваш код более качественным. Итак, что такое структуры данных? Самой простой структурой данных, наверное, является массив. Надеюсь, вы знаете, что это такое и как это использовать. Но на всякий случай напомню, что массив в GML выглядит примерно так: В массив можно записать сколько угодно значений:
СпискиСписки сделают всю грязную работу за вас. Они всегда знают, сколько хранится полей в «массиве». Они умеют добавлять новые элементы, а также легко удалять их. Но выглядят в GML они достаточно уродливо. Вот простой пример создания списка: Кроме того, как я уже сказал выше, мы в любой момент можем безопасно удалить тот или иной элемент из списка по его индексу: Списки могут хранить не только строки или числа, но также и объекты:
Как вы видите, списки – это безумно круто и очень юзабельно. Когда их использовать в вашей программе? Да всегда, когда вы имеете дело с однородными данными. В качестве примера вот вам исходник инвентаря. Не правда ли, очень удобно? В этом примере каждый предмет инвентаря представляет собой экземпляр объекта oitem с двумя полями: name и image. МапыПродвинутые пользователи Game Maker наверняка знают, что массивы в GML – это и не массивы по сути. Доступ к ним на самом деле осуществляется не по индексу, а по ключу, которым может быть не только целочисленное значение, но и дробное или даже строчное:
Мапы удобно использовать также в случае необходимости хранения однородных данных. Но только с одной оговоркой – если к этим данным удобнее получать доступ по ключу, а не по индексу элемента. Например, мы пишем систему диалогов. И на старте заносим реплики в структуру данных. Согласитесь, будет не очень удобно в дальнейшем вызывать эти реплики по индексу (как в случае списка). Гораздо удобнее, если у нас будет понятный и читабельный ключ. Для этого мы можем воспользоваться мапой.
Очереди и стекиПоговорим о других часто юзаемых структурах. Очереди. Очереди представляют собой что-то вроде списка. Но только добавляются элементы в этом списке всегда в конец, а считываются – из начала. Собственно, эта структура данных работает как и обычная очередь в какой-нибудь «Пятерочке». Выглядит работа с очередями примерно так:
Аналогично работают стеки. Но с одним исключением. Если в очереди мы добавляем элементы в конец, то в стеке – новые элементы суются в начало.
По сути, очередь или стек всегда можно заменить списком. Но в ситуациях, когда нам нет необходимости в использовании функционала списка, вполне можно воспользоваться этими структурами данных, так как они работают гораздо быстрее. Например, при формировании команд в RTS. Пример вы можете скачать по ссылке. Здесь мы заносим в список команды для игрока в виде объектов oaction с полями x и y, а затем поочередно двигаемся к ним. Приоритетные очередиНа мой взгляд, очень спорная структура данных в GML. Куда полезнее было бы иметь, например, упорядоченный список. Но имеем то, что имеем (впрочем, это вам не мешает пользоваться функцией ds_list_sort для простых списков). В официальной справке приводится пример использования приоритетных очередей для вывода таблицы лидеров: [code]q = ds_priority_create(); // Добавление новых значений // Мы можем в любой момент изменить приоритет поля
Как вы видите, структуры данных – очень полезная и даже необходимая вещь при написании кода. К сожалению, в GML они выглядят довольно уродливо и отпугивают новичков одним своим видом. Поэтому в тысячах исходниках в сети интернет довольно сложно встретить их использование: код пишут в основном энтузиасты, часто малознакомые с современными практиками программирования и инстинктивно избегающие «сложных» функций. К моменту выхода Game Maker Studio язык GML значительно проапгрейдили. Некоторые детали стали куда удобнее со времен восьмой версии, в том числе структуры данных. Если вы юзаете GMS и выше очень рекомендую использовать вместо таких функций, как ds_map_find_value и ds_list_find_value, сокращения map[? key] и list[! index]. Это сделает код более читаемым. К сожалению, в рамках этой статьи я не затронул еще одну структуру данных в Game Maker – сетки (ds_grid). Кому интересно, советую ознакомиться с ними самостоятельно. Сетки представляют что-то вроде двумерного массива и довольно просты для понимания. Так что, если вы освоили материал данной статьи, вам не составит труда разобраться и с ними. Не следует путать ds_grid с mp_grid. Вторые относятся к так называемым функциям планирования пути (motion planning). И как бы скептично я не относился к мувменту в Game Maker, они являются довольно юзабельными, так как позволяют реализовать простой поиск пути, основанный на популярном алгоритме A* pathfinding. Но об этом как-нибудь в другой раз. Все исходники вы можете найти в архиве по ссылке ниже. Они написаны для Game Maker 8, но спокойно могут быть импортированы в Game Maker Studio и выше. Спасибо за внимание! | |
Просмотров: 1906 | Комментарии: 1 | Рейтинг: 5.0/1 |
Всего комментариев: 1 | |
| |