Это запись о реализации самонаводящихся ракет в GameMaker.
Иначе говоря, объектов, что меняют направление движения для попадания в движущуюся цель.
Читать далее⚂ Всё занимает время
Это запись о реализации самонаводящихся ракет в GameMaker.
Иначе говоря, объектов, что меняют направление движения для попадания в движущуюся цель.
Читать далее
Порой может быть желаемым заполучить индекс ресурса по его имени,
instance_create(x, y, 'obj_item' + string(irandom_range(1, 3)));
Но, индексы ресурсов - не строки, так что это не сработало бы.
Можно добавить искомые ресурсы в массив, или же сделать небольшой switch блок, но это несколько больше работы.
Данная запись рассматривает возможные пути решения проблемы.
Читать далееЭта запись посвящена созданию эффекта аналогичного используемого в моей старой программе GMConveter. Вообще-то сама по себе программа была в некоторой степени шуткой, так как в момент ее выпуска единственная разница между файловыми форматами GM80 и GM81 была байтом версии в заголовке, который ей собственно и изменялся, делая файлы вновь совместимыми. Довольно неплохо для чего-то что было скачано более 4000 раз за два года, правда?
Помимо внутренней простоты программа так же имела неплохой внешний вид, включая эффект плавного скольжения окна. Об этом я и расскажу.
Иногда вам может понадобится скопировать папку во время выполнения вашей GameMaker игры. И, казалось бы, это должно быть просто... но не настолько просто. file_copy может лишь копировать файлы, а функции для работы с папками могут создавать, проверять на существование, и искать файлы в папках. Но, имея упомянутые функции для папок, можно довольно легко реализовать функцию копирования папки.
Используемая тут идея заключается в том, что список файлов в исходной папке заносится в массив, после чего проходом по файлам определяется, нужно ли их копировать как файлы (через file_copy) или папки (через рекурсивный вызов скрипта). Конечно, рекурсивные вызовы представляют определенный риск, если вы бы, к примеру, решили скопировать содержимое одного локального диска на другой, но вы же не собираетесь делать такие вещи посредством GameMaker... правда?
Приложенный пример содержит в себе функцию и простую демонстрацию работы (вводить пути двух папок нужно вручную).
Исходный код ниже,
Читать далееЭтот пример демонстрирует создание довольно простых "костей" в GameMaker. Таковые могут быть использованы для анимации персонажей и уровней, если они могут быть разбиты на отдельные части в какой-то степени.
Как вам возможно известно, GameMaker не поддерживает точечные анимации. Это означает что модели должны быть создаваемы либо "на лету" (во время рисования, что не является слишком быстрым методом), или подготовлены как набор моделей для каждого кадра (что занимает объемы памяти пропорциональные требуемой сглаженности анимации). Костные анимации, с другой стороны, работают довольно быстро (так как вычисления заключаются в вычислении матриц трансформаций), и занимают малые объемы памяти.
Идея костных анимаций заключается в том, что у вас есть так называемые "кости", которые могут быть присоедены к другим костям, и вращаться вместе. Для этого нужно формировать матрицу трансформаций (влияющую на позицию, вращение, и масштаб) для каждой кости, что достигается прохождением по всем "родительским" костям, совмещая матрицы. Но, к счастью, в GameMaker можно избежать прямой работы с матрицами, так как есть встроенные d3d_transform_ функции, что так же используются для рисования.
Приложенный пример включает в себя минималистичную систему для соединения и рисования "костей", а так же некого сорта процедурную анимацию.
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;"Приведенный пример демонстрирует как шифрование, так и расшифровку. А так же включает в себя миловидный интерфейс.
Этот пример демонстрирует определенную вещь которую я хотел сделать на протяжении нескольких дней - скрипт для преобразования строк в набор меняющихся случайных символов.
Идея этого эффекта довольно проста - каждый изменяемый символ заменяется другим случайным (рисуемым) символом с такой же шириной (чтобы строка на выходе не меняла своей ширины, оставляя даже некоторый шанс угадать, что было написано изначально).
Для оптимизации процесса рисования кодом генерируется коллекция (ds_map) с информацией о ширине символов для каждого шрифта при первом использовании. Это делает преобразования довольно быстрым даже для GameMaker: Studio с его ограничением в 65000 символов на шрифт.
Программный интерфейс состоит всего из 3 функций, одна из которых - функция инициализации (должна быть вызвана до использования других), одна заполняет таблицу для заданного шрифта (на случай, если вы хотите сделать это вручную при запуске игры) и собственно функция text_rand(string, font), "преобразовывающая" предоставленную строку для заданного шрифта.
Этот пример может быть отдельно полезным для разного рода экспериментальных игр, а так же является довольно необычным способом цензуры текста.
Есть множества случаев, в которых вам может понадобится дать пользователю возможность вводить текст привычным способом, принимая во внимания системные настройки и предоставляя возможность мелких изменений (таких как передвижение курсора по тексту). Такие случаи включают в себя чаты, консольные интерфейсы, поля ввода текста, и прочее. Этот пример покрывает большинство типичных потребностей для таких вещей довольно коротким (менее 70 строк) и понятным кодом. Он включает в себя следующие особенности:
Пример включает в себя непосредственное поле ввода и простой список, выводящий вводимые строки по нажатию Enter.