GameMaker: Windows-специфичные функции для Studio

Работая с одним из недавних проектов, я наткнулся на несколько проблем, встречаемых многими - даже если вы делаете игру лишь для Windows в GameMaker: Studio, вы не можете работать с файлами вне папки программы в AppData (нельзя даже работать с папкой, где программа установлена). Так же нет функций для открытия файлов в внешних программах, так что никаких вам "readme" в папке программы с открытием их из игры, никаких портативных файлов настроек, некоторых других вещей... грустно, в общем-то.
Поэтому я потратил вечер и сделал компактный DLL, который добавляет эквиваленты павшим функциям (sleep, execute_shell, I/O без песочницы) для Windows таргета. Поддерживаемые функции следующие:

Читать далее

GameMaker: Поиск ресурсов по имени

Порой может быть желаемым заполучить индекс ресурса по его имени,

instance_create(x, y, 'obj_item' + string(irandom_range(1, 3)));

Но, индексы ресурсов - не строки, так что это не сработало бы.

Можно добавить искомые ресурсы в массив, или же сделать небольшой switch блок, но это несколько больше работы.

Данная запись рассматривает возможные пути решения проблемы.

Читать далее

GameMaker: Перетягивание вида/камеры

vis-view-drag

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

Читать далее

GameMaker: Открытие проектов 5/6/7/8 версии в GameMaker Studio

Открытие GameMaker 8.1, 8, 7, 6, 5 проектов в GameMaker: Studio

Один из первых вопросов при переходе на GameMaker: Studio заключается в том, как открывать созданные в более ранних версиях (GameMaker 8.1, GameMaker 8.0, 7, 6.x, 5.x...) проекты. Если вы пришли сюда из поиска, то вероятно вы уже заметили что перетягивание файлов предыдущих версий на программу или попытки открытия их обычным способом не имеют никакого эффекта. В такие моменты приходят мысли этого рода:

Грустный рисованный человечек с надписью 'Переписать весь код?' над ним.

Но нет, конечно же не все так плохо (почему бы кто-то заставлял вас переписывать весь код?), и вы можете запустить ваши проекты в GameMaker: Studio импортировав их. Эта запись объясняет, как, и почему.

Читать далее

GameMaker: Монетки, магазины, и всплывающие надписи

Пример экономики для GameMaker
Давайте просто скажем что графика для этого примера взята из "абстрактной" коллекции.

Хотя я сделал этот пример долгое время назад, похоже что вопросы на эту тематику до сих пор задаются довольно часто, и имеет смысл сделать данный пример "находимым" с помощью этой записи.
Пример демонстрирует создание трех основных вещей:
  • Монетки, как подбираемый ресурс.
  • Всплывающий текст, используемый тут для отображения "+1" при подборе монеток, но имеющий много других применений (в том числе и отображение урона).
  • Магазины, продающие игроку полезные (или в данном случае безполезные) предметы за монетки.
В общем, довольно просто, но все равно полезно для тех, кто еще с этим не разобрался.

Скачать GMK

GameMaker: Эффекты скольжения окна

Window sliding example for GameMaker

Эта запись посвящена созданию эффекта аналогичного используемого в моей старой программе GMConveter. Вообще-то сама по себе программа была в некоторой степени шуткой, так как в момент ее выпуска единственная разница между файловыми форматами GM80 и GM81 была байтом версии в заголовке, который ей собственно и изменялся, делая файлы вновь совместимыми. Довольно неплохо для чего-то что было скачано более 4000 раз за два года, правда?
Помимо внутренней простоты программа так же имела неплохой внешний вид, включая эффект плавного скольжения окна. Об этом я и расскажу.

Читать далее

Вектор: Логотип GameMaker: Studio в стиле Windows 8

логотип GameMaker: Studio logo в стиле Windows 8

Эта векторная иконка была изначально нарисована как иллюстрация к одному из обсуждений в которых я принимал участие в конце апреля, которое перешло от обсуждения функциональности GameMaker: Studio к обсуждению текущего логотипа и отдельно к угадыванию, мог бы для него сработать стиль Windows 8 или нет. Я не знаю, является ли это хорошим логотипом, но думаю что он мог бы быть полезным в случаях когда текущий (трехмерного вида) логотип не очень хорошо вписывается.
Для упрощения адаптации, редактируемый векторный исходник (SVG) прилагается.

Скачать SVG Скачать PNG Скачать HD PNG

Так же я сделал расширение загрузки для GameMaker: Studio HTML5' с этим логотипом, что выглядит примерно так:

Читать далее

Notepad++: Подсветка синтаксиса для GameMaker ≤ 8.1

Подобно другим записям о Notepad++ на этом блоге, эта так же содержит файл подсветки синтаксиса для него. Как можно угадать по заголовку, предназначается он для версий GameMaker Language (GML) использующихся в версиях раньше Studio.
Вообще-то этот файл подсветки был сделан некоторое время назад, но я его не опубликовывал так как существовало несколько других вариаций, делающих то же самое. Похоже что сейчас это не совсем так.

Данный файл определения поддерживает все стандартные структуры GameMaker Language. Так же он подсвечивает стандартные функции, константы, и "специальные" переменные (global/self/other). Цветовая схема сделана для соотвествия с подсветкой в самом GameMaker. К сожалению, на данный момент нет возможности определения и подсветки пользовательских переменных\констант\скриптов, но при нужде их можно добавить в группу ключевых слов 6 (Keyword Group 6) чтобы они были подсвечены.

Скачать UDF

Если же вам интересна подсветка для GameMaker: Studio, есть запись и об этом.

GameMaker: Обработка аппаратных кнопок на Android

Обработка аппаратных кнопок Android в GameMaker: Studio

Одним из часто задаваемых вопросов о GameMaker: Studio является вопрос о том, как обрабатывать нажатия стандартных кнопок на устройствах (Домой, Меню, Назад, Поиск).
Несмотря на предположения, обработка кнопок в GameMaker: Studio довольно проста - нажатия кнопок переназначаются на соответствующие кнопки клавиатуры. То есть для обработки нажатий можно использовать стандартные события нажатия/удержания/отпускания кнопок.

Меню

Кнопка "Меню" переназначается на кнопку клавиатуры "М" (индекс 77). Так же стоит заметить, что при использовании отладочного "плеера" игр (YoYoRunner) кнопка "Меню" открывает меню плеера (содержащее пункты "Настройки" и "Выход"), что может сделать тестирование без компиляции проблематичным.

Назад

Кнопка "Назад" (вероятно знакомая вам как смотрящая влево стрелочка) переназначается на кнопку стирания (Backspace, индекс 8). Все довольно просто и интуитивно.

Поиск

Нажатия кнокпи "Поиск" переназначаются в нажатия кноки Control (индекс 17). Мне не совсем понятна логика, солгасно которой выбор был остановлен на этом соответствии, но это уже вне контекста этой записи. Так же стоит заметить, что на некоторых моделях устройств этой кнопки может не быть вовсе, так что ассоциировать с ней какие-то критически важные действия не стоит.

Домой

Я не уверен, зачем вообще задается вопрос о том, можно ли привязать какое-то действие на кнопку "Домой". Нажатия этой кнопки обрабатываются операционной системой Android (обычно приводя к сворачиванию активного приложения и выходу на начальный экран), поэтому приложения ничего с ней делать не могут. Вы ведь не собирались держать игрока внутри игры до конца его/ее дней, не так ли?

Замечания

Несмотря на переназначение кнопок, в версии 1.1.917 аппаратные кнопки все еще не вызывают смены keyboard_lastkey / keyboard_lastchar. Так что лучше пока не использовать их в комбинации с этими переменными.

Надеюсь, это было полезным.

GameMaker: Рекурсивное копирование папок

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

Приложенный пример содержит в себе функцию и простую демонстрацию работы (вводить пути двух папок нужно вручную).

Скачать GMK

Исходный код ниже,

Читать далее