GameMaker: Простые костные анимации

Этот пример демонстрирует создание довольно простых "костей" в GameMaker. Таковые могут быть использованы для анимации персонажей и уровней, если они могут быть разбиты на отдельные части в какой-то степени.

Преимущества

Как вам возможно известно, GameMaker не поддерживает точечные анимации. Это означает что модели должны быть создаваемы либо "на лету" (во время рисования, что не является слишком быстрым методом), или подготовлены как набор моделей для каждого кадра (что занимает объемы памяти пропорциональные требуемой сглаженности анимации). Костные анимации, с другой стороны, работают довольно быстро (так как вычисления заключаются в вычислении матриц трансформаций), и занимают малые объемы памяти.

Реализация

Идея костных анимаций заключается в том, что у вас есть так называемые "кости", которые могут быть присоедены к другим костям, и вращаться вместе. Для этого нужно формировать матрицу трансформаций (влияющую на позицию, вращение, и масштаб) для каждой кости, что достигается прохождением по всем "родительским" костям, совмещая матрицы. Но, к счастью, в GameMaker можно избежать прямой работы с матрицами, так как есть встроенные d3d_transform_ функции, что так же используются для рисования.

Приложенный пример включает в себя минималистичную систему для соединения и рисования "костей", а так же некого сорта процедурную анимацию.

Скачать GMK

GameMaker: Тень в платформерных играх

Вообще-то этот пример я сделал довольно давно (дата создания файла гласит "Сентябрь 2010"), который я недавно исправил и улучшил по запросу.
Он демонстрирует простой алгоритм для отбрасывания тени объектом в платформерной (вид сбоку) игре. То есть, когда игрок прыгает, тень остается на земле (реализм!).
Ради простоты и производительности, расчет теней по умолчанию производится по рамкам объектов. Для "попиксельных" проверок у твердого объекта среди родителей должен быть obj_complex.
Если вам интересна техническая сторона, работает это следующим образом:

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

Скачать GMK

GameMaker: Перемешивание строк

Перемешивание строк в GameMaker

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

Скачать GMK

Читать далее

GameMaker: «шифр» замен

Этот пример предоставляет функцию для преобразования строки, заменяя все символы, находящиеся в первом "алфавите" символами из второго "алфавита". Это может быть использовано для массовых замен символов в строках (например для превращения "Hello World" в "H3110 W0r1d") или же как простое шифрование (желательно как элемент игры, нежели для защиты важных данных... а то я видел случаи).
Функциональная часть состоит из единственной функцией string_subst(string, from, to), принцип действия которой описан в первом параграфе. Если длины обоих "алфавитов" равны, и они не содержат повторяющихся символов, вывод функции может быть "расшифрован" повторным ее запуском с зашифрованным текстом в качестве строки, и алфавитами "наоборот" (первый вместо второго и второй вместо первого). Пример:
var asrc, adst, source, encr, decr;
asrc = "0123456789"; // входной "алфавит"
adst = "3456789012"; // выходной "алфавит"
source = "51;"; // исходный текст
encr = string_subst(source, asrc, adst); // "зашифрованный" текст
show_message(encr); // Покажет "84;"
decr = string_subst(encr, adst, asrc); // "расшифрованный" текст
show_message(decr); // Покажет "51;"
Приведенный пример демонстрирует как шифрование, так и расшифровку. А так же включает в себя миловидный интерфейс.

Скачать GMK

GameMaker: Случайно прокручиваемые символы

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

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

Для оптимизации процесса рисования кодом генерируется коллекция (ds_map) с информацией о ширине символов для каждого шрифта при первом использовании. Это делает преобразования довольно быстрым даже для GameMaker: Studio с его ограничением в 65000 символов на шрифт.

Программный интерфейс состоит всего из 3 функций, одна из которых - функция инициализации (должна быть вызвана до использования других), одна заполняет таблицу для заданного шрифта (на случай, если вы хотите сделать это вручную при запуске игры) и собственно функция text_rand(string, font), "преобразовывающая" предоставленную строку для заданного шрифта.

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

Скачать GMK

GameMaker: Вид от 3-его лица в 3D

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

GameMaker: Поле ввода

Есть множества случаев, в которых вам может понадобится дать пользователю возможность вводить текст привычным способом, принимая во внимания системные настройки и предоставляя возможность мелких изменений (таких как передвижение курсора по тексту). Такие случаи включают в себя чаты, консольные интерфейсы, поля ввода текста, и прочее. Этот пример покрывает большинство типичных потребностей для таких вещей довольно коротким (менее 70 строк) и понятным кодом. Он включает в себя следующие особенности:

  • Сохраняет текущий текст при потере фокуса окна. Если вам доводилось работать с вводом текста в GameMaker, возможно вы уже заметили это неприятное стандартное поведение.
  • Позволяет перемещать курсор по вводимой строке (кнопки влево / вправо / home / end)
  • Позволяет удалять символы после курсора с помощью Delete (почему я не вижу этого во многих играх?)
  • Может быть легко модифицирован для добавления дополнительных сочетаний клавиш и функций

Пример включает в себя непосредственное поле ввода и простой список, выводящий вводимые строки по нажатию Enter.

Скачать GMK

GameMaker: Jetpack платформер

Это один из моих более старых примеров, демонстрирующий "пиксельно чистое" передвижение и столкновения для платформера с реактивным ранцем. В качестве бонуса, пример включает в себя создание (псевдо-) частиц и высчитывание скорости столкновений с объектами.
Текущая версия дополнена комментариями (покрытие которых теперь близится к 100%) и подправлены некоторые сомнительные куски кода.
Так же на базе этого примера когда-то разрабатывалась игра.

Скачать GMK

GameMaker: Столкновения с 2D массивом


Внешний вид и внутреннее устройство

Этот пример демонстрирует организацию системы с информацией о уровне сохраненной в виде двухмерного массива (каждая ячейка хранит индекс блока) и организацию системы столкновений с уровнем этого вида.
Можно сказать, что это упрощенная версия сделанного мной ранее движка-примера "Terra". Другие отличия состоят в использовании массивов вместо структур данных, и совместимость с Lite версией для GameMaker <= 8.1. С использованием массивов уходит возможность создания бесконечных миров (ограничение двухмерных массивов - 32000х32000 ячеек), но конечному пользователю это все равно вряд ли понадобится.
Как приятное добавление для русской версии поста, пример теперь содержит более детальные объяснения, и они изложены на русском.

Скачать GMK

GameMaker: Соединяемые объекты


Я конечно не специалист по странным вертолетам, но, похоже, это - один из них.

Этот довольно полезный пример предоставляет систему для "соединения" объектов между собой, то есть "дочерние" объекты будут перемещаться относительно их "родителя" с учетом позиций и вращения.
В свою очередь к "дочерним" объектам можно прицеплять еще объекты, позволяя добавить потенциально бесконечное количество "уровней экземпляров", что будут перемещаться вместе.
Хорошими примерами применения таких систем являются игры с "модульной" техникой (танки, какие-либо корабли с орудиями на борту, прочее), и состоящие из множества фрагментов боссы.

Скачать GMK