Допустим, у вас есть уровень с несколькими дверями, и для каждой из них есть ключ. Как можно легко пометить ключ для определенной двери? Обычно вы просто присваиваете идентификатор ключу и двери. А что если вы хотите, чтобы ключ открывал 2 или 3 двери? Легко. Вы используете MASK. Дверь будет иметь один бит, назначенный следующим образом:
+
Допустим, у вас есть уровень с несколькими дверями, и для каждой из них есть ключ. Как можно легко пометить ключ для определенной двери? Обычно вы просто присваиваете идентификатор ключу и двери. А что если вы хотите, чтобы ключ открывал 2 или 3 двери? Легко. Вы используете MASK. Дверь будет иметь один бит, назначенный следующим образом:
Вы создали комментарий к сценарию, используя
- /* [comment] */
+
Вы создали комментарий к сценарию, используя
+ /* [comment] */
но не поставили закрывающий тег комментария
@@ -97,7 +97,7 @@
Ошибки компиляции
Невозможно отрицать строку
-
Вы пытались отрицать строку, например
+
Вы пытались отрицать строку, например string = -string
@@ -156,7 +156,7 @@
Ошибки компиляции
Невозможно использовать имя функции/скрипта для переменной, используя [functions/script]
-
Вы пытались использовать в качестве переменной, например, имя функции или имя скрипта:
+
Вы пытались использовать в качестве переменной, например, имя функции или имя скрипта: string = "Hello World"
@@ -173,7 +173,7 @@
Ошибки компиляции
Вы указали неверное количество аргументов при использовании аксессора
-
Неправильный тип аргументов для (одного из нижеперечисленных):
+
Неправильный тип аргументов для (одного из нижеперечисленных):
/, div, mod, +, -, &&, ||, &, |, ^, <<, >>
Вы указали неверный тип аргумента для вычисляемого выражения
@@ -247,7 +247,7 @@
Ошибки компиляции
Некорректный условный оператор
-
Вы использовали ошибочный условный (троичный) оператор или оператор if, а не формат:
+
Вы использовали ошибочный условный (троичный) оператор или оператор if, а не формат: [condition] ? [expression1] : [expression2];
@@ -260,8 +260,8 @@
Ошибки компиляции
В коде вы неправильно используете оператор присваивания
-
Неправильно сформированный
- if / repeat / while / do / for / with / switch / break / continue / exit
+
Неправильно сформированный
+ if / repeat / while / do / for / with / switch / break / continue / exit
оператор
Структура приведенного утверждения неверна.
@@ -408,16 +408,16 @@
Ошибки компиляции
-
Символ (ожидаемый
- Символ ) ожидаемый
- Символ , или ) ожидаемый
- Символ { ожидаемый
- Символ } ожидаемый
- Символ , или } ожидается
- Символ : ожидается
- Символ ; ожидается
- Символ [ ожидаемый
- символ ] ожидаемый
+
Символ (ожидаемый
+ Символ ) ожидаемый
+ Символ , или ) ожидаемый
+ Символ { ожидаемый
+ Символ } ожидаемый
+ Символ , или } ожидается
+ Символ : ожидается
+ Символ ; ожидается
+ Символ [ ожидаемый
+ символ ] ожидаемый
Символ , или ] ожидаемый
Вы не использовали требуемый символ при написании кода
Ошибки Runner обычно более серьезны, чем ошибки компиляции, поскольку они означают, что в вашем коде что-то серьезно не так, чего не смогли обнаружить ни редактор кода, ни компилятор, и поэтому вы должны обращать внимание на все такие ошибки. При возникновении такой ошибки вы можете воспользоваться кнопкой Copy на всплывающем окне, чтобы скопировать ошибку в буфер обмена, который затем можно вставить в текстовый файл (или куда-либо еще) для дальнейшего использования.
Структура этой ошибки выглядит следующим образом:
-
+
Здесь отображается событие, в котором произошла ошибка, а также объект (если применимо).
-
+
Это показывает фактическую ошибку. Таким образом, она показывает область действия ошибки и ее тип. Первое значение в скобках будет идентификатором экземпляра, на котором выполнялся код, или это может быть одно из специальных значений, перечисленных в таблице ниже, а второе - это внутреннее значение, которое GameMaker использует для идентификации ошибок, и его можно игнорировать. В случае с изображением выше это означает, что переменная _image не была установлена (т.е. не существует до обращения к ней) на объекте obj_EA_DEMO_Control.
-
+
Здесь показан номер строки, на которой возникла ошибка, а также фрагмент кода с указанием позиции. Обратите внимание, что это не всегда на 100% точно из-за способа компиляции игры, но этого должно быть достаточно, чтобы помочь вам найти точное место проблемы.
Как упоминалось выше, некоторые сообщения об ошибках будут идентифицироваться не по значению ID экземпляра, а по отрицательному значению. Эти значения могут быть использованы для точного определения природы ошибки и того, к чему она относится, при этом возможны следующие значения:
@@ -264,7 +264,7 @@
Ошибки бегунов
With
Невозможно использовать global в операторе with
С
-
Вы пытались использовать "global" в качестве переменной в операторе "with", т.е:
+
Вы пытались использовать "global" в качестве переменной в операторе "with", т.е: with (global)
{
//do something;
@@ -275,7 +275,7 @@
Ошибки бегунов
With
Невозможно использовать local в операторе with
С
-
Вы пытались использовать "local" в качестве переменной в операторе "with", т.е:
+
Вы пытались использовать "local" в качестве переменной в операторе "with", т.е: with (local)
{
//do something;
diff --git a/Manual/contents/Additional_Information/Errors/Syntax_Errors.htm b/Manual/contents/Additional_Information/Errors/Syntax_Errors.htm
index d1513eb3a..cb0c22308 100644
--- a/Manual/contents/Additional_Information/Errors/Syntax_Errors.htm
+++ b/Manual/contents/Additional_Information/Errors/Syntax_Errors.htm
@@ -69,7 +69,7 @@
Список синтаксических ошибок
Ненужное выражение [val] используется в качестве утверждения
-
Эта ошибка возникает, когда программа проверки синтаксиса обнаруживает выражение (показанное в [val]) там, где она ожидала оператора. Например, следующий код приведет к ошибке, так как он ожидает троичный оператор ?, но встречает 32:
+
Эта ошибка возникает, когда программа проверки синтаксиса обнаруживает выражение (показанное в [val]) там, где она ожидала оператора. Например, следующий код приведет к ошибке, так как он ожидает троичный оператор ?, но встречает 32: temp_x = x < (room_width / 2) 32: room_width - 32;
@@ -101,7 +101,7 @@
Список синтаксических ошибок
Получено "[val1]", ожидалось "[val2]".
-
Это происходит, когда программа проверки синтаксиса ожидает какое-то значение или символ, но получает другое, где [val1] - текущий символ или значение, а [val2] - ожидаемый символ или значение. Например:
+
Это происходит, когда программа проверки синтаксиса ожидает какое-то значение или символ, но получает другое, где [val1] - текущий символ или значение, а [val2] - ожидаемый символ или значение. Например: Got "{", expected "("
@@ -118,14 +118,14 @@
Список синтаксических ошибок
Пустое утверждение [val]
-
Это происходит, когда вы завершаете оператор и оставляете его пустым. Например, следующий код выдаст ошибку (обратите внимание на завершающую точку с запятой):
+
Это происходит, когда вы завершаете оператор и оставляете его пустым. Например, следующий код выдаст ошибку (обратите внимание на завершающую точку с запятой): if (x < 0);
Вызовы вложенных функций не допускаются
-
Это может произойти, когда вы пытаетесь вложить вызовы функций внутри оператора, например:
+
Это может произойти, когда вы пытаетесь вложить вызовы функций внутри оператора, например: ds_list_find_value(list, 0)).sprite_index
Буфер фиксированного размера в байтах. Размер устанавливается при создании буфера и больше не может быть изменен.
buffer_grow
-
+
Буфер, который будет динамически увеличиваться по мере добавления данных. Вы создаете его с начальным размером (который должен быть приблизительно равен размеру данных, которые предполагается хранить), а затем он будет расширяться, принимая данные, превышающие этот начальный размер.
buffer_wrap
-
+
Буфер, в который будут заворачиваться данные. Когда добавляемые данные достигнут предела размера буфера, перезапись будет помещена обратно в начало буфера, и дальнейшая запись продолжится с этого момента.
buffer_fast
-
+
Это специальный "урезанный" буфер, который очень быстро читается и записывается. Однако он может использоваться только с типами данных buffer_u8 и должен быть выровнен по 1 байту. (Информацию о типах данных и выравнивании байтов можно найти далее на этой странице).
@@ -53,7 +53,7 @@
Руководство по использованию буферов
При создании буфера вы всегда должны стараться создать его такого размера, который соответствует типу, при этом общее правило заключается в том, что он должен быть создан для максимального размера данных, которые он должен хранить, а если есть сомнения, используйте растущий буфер для предотвращения ошибок перезаписи.
Фактический код для создания буфера будет выглядеть примерно так:
Это создаст фиксированный буфер размером 16384 байта с выравниванием по байтам до 2, при этом функция возвращает уникальное значение ID, которое хранится в переменной для последующего обращения к этому буферу.
При чтении и записи данных в буфер, вы делаете это "кусками" данных, определяемыми их "типом данных". Тип данных" задает количество байт, выделяемых в буфере для записываемого значения, и очень важно, чтобы это было правильно, иначе вы получите очень странные результаты (или даже ошибки) для вашего кода.
Запись в буфер (и чтение из него) происходит последовательно, то есть одна часть данных записывается за другой, причем каждая часть данных имеет определенный тип. Это означает, что в идеале вы должны постоянно знать, какие данные вы записываете в буфер. Эти типы данных определяются в GML следующими константами:
@@ -68,73 +68,73 @@
Руководство по использованию буферов
buffer_u8
1
-
+
Беззнаковое 8-разрядное целое число. Это положительное значение от 0 до 255.
buffer_s8
1
-
+
Знаковое 8-разрядное целое число. Это может быть положительное или отрицательное значение от -128 до 127 (0 считается положительным).
buffer_u16
2
-
+
Беззнаковое 16-разрядное целое число. Это положительное значение от 0 до 65 535.
buffer_s16
2
-
+
Подписанное 16-разрядное целое число. Это может быть положительное или отрицательное значение от -32,768 до 32,767 (0 считается положительным).
buffer_f16
2
-
+
16-разрядное число с плавающей запятой. Это может быть положительное или отрицательное значение в диапазоне +/- 65504. (В настоящее время не поддерживается!)
buffer_u32
4
-
+
Беззнаковое 32-разрядное целое число. Это положительное значение от 0 до 4 294 967 295.
buffer_s32
4
-
+
Подписанное 32-разрядное целое число. Это может быть положительное или отрицательное значение от -2,147,483,648 до 2,147,483,647 (0 считается положительным).
buffer_f32
4
-
+
32-разрядное число с плавающей запятой. Это может быть положительное или отрицательное значение в диапазоне +/-16777216.
buffer_u64
8
-
+
64-битное беззнаковое целочисленное значение.(В настоящее время поддерживается не всеми функциями буфера!)
buffer_f64
8
-
+
64-разрядное число с плавающей запятой.
buffer_bool
1
-
+
Булево значение. Может быть только 1 или 0 (true или false).
buffer_string
Н/Д
-
+
Это строка UTF-8 с нулевым окончанием (0x00). По сути, в буфер сбрасывается строка GameMaker, а в конце ставится 0.
-
+
А кривые распределения (линейная, гауссова и обратная гауссова) показаны здесь:
Ниже приведен пример кода/действий, необходимых для определения двух эмиттеров, которые обычно идут в событии Create объекта контроллера, сразу после определения системы частиц. Один из них будет статичным и будет распылять частицы по площади всей комнаты, а другой будет динамичным и будет следовать за мышью и вырываться каждые 30 шагов из небольшого эллипса:
Вырезать / Копировать / Вставить: Это позволит вам вырезать, скопировать или вставить любое действие, выбранное в рабочей области. Обратите внимание, что вы можете использовать + вне действий и перетаскивать их, или использовать / + на отдельных действиях,
чтобы выбрать несколько действий и применить команду ко всем из них.
Комментарий / Удалить комментарий: Эта опция позволяет добавлять и удалять комментарии из блоков кода GML Visual. Когда вы выбираете "Комментарий", справа от выбранного блока GML Visual открывается текстовый редактор, в котором вы можете добавить любой текст, который вам нужен.
- добавить любой необходимый текст, будь то напоминание о необходимости что-то изменить, или полезный комментарий к учебнику, или даже инструкции для ваших товарищей по команде:
+ добавить любой необходимый текст, будь то напоминание о необходимости что-то изменить, или полезный комментарий к учебнику, или даже инструкции для ваших товарищей по команде: После добавления комментария вы можете щелкнуть на нем и перетащить его, чтобы расположить его вертикально и горизонтально - хотя
свернув узел GML Visual, вы также свернете комментарий и покажете краткое содержание комментария (в этом случае его нельзя будет переместить). Если комментарий больше не нужен, то вы можете либо удалить весь
текст в комментарии, либо использовать опцию Удалить комментарий из меню. Обратите внимание, что при копировании узла комментарий будет скопирован вместе с ним, а если вы преобразуете узел из GML Visual в GML, то комментарий будет сохранен
- и будет добавлен к созданному узлу GML, как показано на рисунке ниже:
+ и будет добавлен к созданному узлу GML, как показано на рисунке ниже: Как упоминалось выше, комментарий может быть применен только к одному узлу, но вы можете расширить его на несколько узлов, просто добавив разрывы строк.
- Хотя для этого может потребоваться изменить положение комментария, чтобы избежать наложения на последующие узлы:
+ Хотя для этого может потребоваться изменить положение комментария, чтобы избежать наложения на последующие узлы: После добавления комментария вы можете выбрать опцию "Комментарий"
в меню RMB или дважды щелкните на нем , чтобы включить редактирование.
Отключить / Включить: С помощью этих команд можно отключить или включить выбранное действие (или действия). Когда действие отключено, оно все еще видно в рабочей области, но оно не будет выполняться при компиляции игры. Таким образом
- образом вы можете добавлять/удалять действия для тестирования и отладки. На рисунке ниже показан код GML Visual с отключенными действиями:
+ образом вы можете добавлять/удалять действия для тестирования и отладки. На рисунке ниже показан код GML Visual с отключенными действиями: Вы можете видеть, что действия "If Score" и "Go To Next Room" были отключены -
они были выделены серым цветом, визуально - и поэтому они будут пропущены при тестировании или компиляции игры.
Переключить точку останова: Эта команда включает или выключает точку останова для выбранного действия. Точка останова - это просто точка в коде GML Visual, где отладчик должен остановиться, когда игра
- запускается в режиме отладки. Действие, которому назначена точка останова, будет выделено, как показано на рисунке ниже (действие "If Health" было установлено как точка останова):
+ запускается в режиме отладки. Действие, которому назначена точка останова, будет выделено, как показано на рисунке ниже (действие "If Health" было установлено как точка останова):
Удалить все точки останова: С помощью этой команды вы можете удалить все точки останова из кода GML Visual.
Свернуть все / Развернуть все: GML Визуальные действия могут быть свернуты или развернуты, при этом свернутое действие будет отображать только название действия, но не внутренние значения, что позволяет максимально использовать доступное пространство.
- для рабочей области. Например:
+ для рабочей области. Например: Как вы можете видеть, действия занимают гораздо меньше места, и вы все еще можете понять, что они делают, из краткого
описание, приведенное справа. Вы можете выбрать опцию "Развернуть все", чтобы отменить это для каждого узла в рабочей области.
Сбросить макет: Это сбросит рабочее пространство GML Visual, установит уровень масштабирования на 100%, сфокусируется на текущем выбранном действии и развернет все (и все) свернутые действия.
Живой предварительный просмотр: При выборе этого параметра вы включите или выключите окно предварительного просмотра кода GML Visual to GML (GameMaker Language). Более подробно это описано на странице Изменение GML Visual To Code.
Convert To GML: Это преобразует все ваши действия в текущем событии в код GML (GameMaker Language). Будьте очень осторожны, так как вы не сможете преобразовать GML обратно в визуальные действия GML, из которых он был создан. Вы можете преобразовать
событие обратно в событие GML Visual из кода, но любой код будет просто обернут в действие Execute Code. Более подробно это объясняется на странице Изменение GML Visual в Code.
-
Окно: Этот раздел открывает следующее подменю:
+
Окно: Этот раздел открывает следующее подменю: Здесь доступны следующие пункты меню:
Перейти к объекту: Это приведет к переходу рабочей области к объекту, вызывающему событие
Открыть унаследованное событие: Эта опция доступна только в том случае, если редактируемый объект является дочерним по отношению к родительскому объекту, и откроет редактируемое событие родительского объекта и переключит рабочую область на него.
Одна панель / 2 колонки / 3 колонки: Эти опции можно использовать для разделения текущего рабочего пространства на 1, 2 или 3 различные "панели". Каждая панель представляет собой отдельную рабочую область, в которую могут быть перенесены сценарии
- или события перетаскиваются на них, так что вы можете редактировать и сравнивать 2 или более блоков кода GML Visual одновременно. На рисунке ниже показаны два скрипта в одном окне, отображаемые в собственной панели рабочего пространства:
+ или события перетаскиваются на них, так что вы можете редактировать и сравнивать 2 или более блоков кода GML Visual одновременно. На рисунке ниже показаны два скрипта в одном окне, отображаемые в собственной панели рабочего пространства:
Время (в секундах) для установки начальной точки (по умолчанию 0). Значения, превышающие длину заданного звука, игнорируются.
+
Время (в секундах) для установки начальной точки (по умолчанию 0). Значения, превышающие длину заданного звука, игнорируются.
Если это поле оставлено пустым, используется смещение звукового актива (позиция дорожки).
@@ -56,10 +56,10 @@
Аргументы:
Пример 1:
-
Приведенный выше код блока действий проверяет нажатие кнопки мыши, и если оно обнаружено, то проверяет глобальную переменную, чтобы убедиться, что она не true. Если это не true, то воспроизводится звук (и зацикливается) и глобальная переменная устанавливается в true, в противном случае звук останавливается и глобальная переменная устанавливается в false.
+
Приведенный выше код блока действий проверяет нажатие кнопки мыши, и если оно обнаружено, то проверяет глобальную переменную, чтобы убедиться, что она не true. Если это не true, то воспроизводится звук (и зацикливается) и глобальная переменная устанавливается в true, в противном случае звук останавливается и глобальная переменная устанавливается в false.
Звук воспроизводится с настройками по умолчанию: коэффициент усиления и высоты тона 1 и смещение 0 (смещение по умолчанию звукового актива).
Пример 2:
-
Приведенный выше код блока действий сначала устанавливает позицию дорожки звукового актива "snd_MusicBoss" на 20 секунд. Затем он проверяет, установлена ли переменная экземпляра "skip_intro" в значение true. Если да, то начинается воспроизведение "snd_MusicBoss" с 20 секунды - значения позиции дорожки, установленного ранее (это происходит потому, что поле "Offset" оставлено пустым, поэтому используется смещение актива ). Первые 20 секунд аудио пропускаются.
+
Приведенный выше код блока действий сначала устанавливает позицию дорожки звукового актива "snd_MusicBoss" на 20 секунд. Затем он проверяет, установлена ли переменная экземпляра "skip_intro" в значение true. Если да, то начинается воспроизведение "snd_MusicBoss" с 20 секунды - значения позиции дорожки, установленного ранее (это происходит потому, что поле "Offset" оставлено пустым, поэтому используется смещение актива ). Первые 20 секунд аудио пропускаются.
Если переменная экземпляра "skip_intro" установлена в false, то также начинается воспроизведение "snd_MusicBoss", но, поскольку "Offset" было установлено в 0, звук начнет воспроизводиться с самого начала. Позиция дорожки в 20 секунд, определенная ранее для звукового актива, игнорируется.
ПРИМЕЧАНИЕ: Экспорт HTML5 является исключением из вышеуказанного правила, и при нацеливании на него следует инициализировать массивы в последовательном порядке от 0 вверх.
Вы также можете использовать функцию GMLarray_create() для инициализации массива с фиксированным размером, и вы даже можете создавать "пустые" массивы без значений, например:
my_array = [];
-
Это сообщает GameMaker, что переменная "my_array" является массивом, и вы можете добавлять в нее значения в любое время в будущем. Однако если вы попытаетесь получить доступ к значению в пустом массиве, то получите ошибку.
+
Это сообщает GameMaker, что переменная "my_array" является массивом, и вы можете добавлять в нее значения в любое время в будущем. Однако если вы попытаетесь получить доступ к значению в пустом массиве, то получите ошибку.
Если вы уже знаете, какие элементы вы хотите поместить в массив, вы можете добавить значения, разделенные запятыми, между скобками при объявлении массива:
my_array = ["Steve", 36, "ST-3V3 - Steve Street"];
Здесь вы говорите, что если выражение разрешается как true, то сделайте то-то. Обратите внимание, что часть условия "then" является неявной, но существует ключевое слово then, которое можно использовать (хотя оно почти всегда опускается), поэтому вы также можете создавать подобные условия:
if (<expression>) then
{
diff --git a/Manual/contents/GameMaker_Language/GML_Overview/Script_Functions.htm b/Manual/contents/GameMaker_Language/GML_Overview/Script_Functions.htm
index cfa44ec7b..5c63a4d54 100644
--- a/Manual/contents/GameMaker_Language/GML_Overview/Script_Functions.htm
+++ b/Manual/contents/GameMaker_Language/GML_Overview/Script_Functions.htm
@@ -61,8 +61,8 @@
Необязательные аргументы
direction = dir;
}
Если аргумент dir не передан при вызове вышеуказанной функции, то его значение по умолчанию будет равно 90, перемещая экземпляр в направлении вверх.
-
СОВЕТ Вы можете опустить аргументы в вызовах функций, и они будут иметь значение по умолчанию undefined (или значение по умолчанию для этого аргумента, определенное функцией).
-
+
СОВЕТ Вы можете опустить аргументы в вызовах функций, и они будут иметь значение по умолчанию undefined (или значение по умолчанию для этого аргумента, определенное функцией).
+
Например, написать my_func(0,,,1) - это то же самое, что написать my_func(0, undefined, undefined, 1).
Например, определите следующий макрос "total_weapons":
#macro total_weapons 10
Синтаксис макроса...
-
Для определения макросов необходимо правильно использовать приведенный выше синтаксис. Вы не можете использовать знак равенства (как в переменных) или ставить точку с запятой в конце (как в обычном операторе). Это приведет к тому, что определение макроса станет недействительным.
-
- Например, это неправильный способ определения макроса:
-
- #macro total_weapons = 10;
-
+
Для определения макросов необходимо правильно использовать приведенный выше синтаксис. Вы не можете использовать знак равенства (как в переменных) или ставить точку с запятой в конце (как в обычном операторе). Это приведет к тому, что определение макроса станет недействительным.
+
+ Например, это неправильный способ определения макроса:
+
+ #macro total_weapons = 10;
+
Если убрать знак равенства и двоеточие, это будет правильное определение макроса.
Затем вы можете использовать это в своем коде следующим образом:
@@ -115,7 +115,7 @@
Встроенные константы
pointer_null
-
Эта константа указывает на то, что указатель не указывает ни на что значимое (то же самое, чтоNULL в C++ или null в C#).
+
Эта константа указывает на то, что указатель не указывает ни на что значимое (то же самое, чтоNULL в C++ или null в C#).
Это значение является ложным.
@@ -124,7 +124,7 @@
Встроенные константы
undefined
-
Эта константа возвращается, когда функция должна что-то вернуть, но не имеет подходящего или "правильного" значения для возврата.
+
Эта константа возвращается, когда функция должна что-то вернуть, но не имеет подходящего или "правильного" значения для возврата.
Это значение является ложным.
По умолчанию при создании новой структуры канала переменная "name" будет пустой строкой, "type" - animcurvetype_linear, а "iterations" - 16. Все эти переменные могут быть установлены в нужные вам значения (обратите внимание, что значение "итерации" не влияет на линейные типы кривых). После создания кривой необходимо добавить точки к ней, что делается путем добавления различных структур точек в массив"points". Эти структуры точек могут быть созданы с помощью функции animcurve_point_new().
Как и в случае с каналами, точки одного канала хранятся как структуры в массиве, где каждый элемент в массиве является структурой одной точки. Структура точки объясняется на этой странице.
Обратите внимание, что если функция не сработает (например, заданный актив Animation Curve не существует), то функция вернет -1.
ID кривой анимации - это имя кривой анимации, определенное в браузере активов, или указатель struct, возвращаемый функцией animcurve_create(). Имя канала - это строка, которая ссылается на канал, как он был определен в активе кривой анимации, или вы можете передать значение индекса, которое составляет от 0 до n, где n - последний канал в активе кривой (например: если кривая анимации имеет 4 канала, они будут проиндексированы от 0 до 3). Обратите внимание, что передача значения индекса требует меньше обработки, чем передача имени канала. Если функция не сработает (т.е. не существует канала с заданным именем или индексом), то вы получите ошибку.
Точки одного канала хранятся в виде структур в массиве, где каждый элемент массива является структурой одной точки. Структура точки имеет следующие переменные:
После создания очереди вы можете использовать возвращенный индекс очереди так же, как и индекс звука для любого обычного звука, чтобы воспроизвести его, поставить на паузу, перезапустить, изменить усиление и высоту тона. Единственное, что вы не можете сделать, это получить длину дорожки или установить ее положение, но в остальном звуковую очередь можно использовать так же, как и любой другой звук. Следует также отметить, что некоторые функции аудиоочереди также вызывают асинхронное событие Audio Playback Asynchronous Event.
-
Аудиобуферы также позволяют записывать звук из любого доступного источника (например, микрофона или ОС), который затем может быть поставлен в очередь и передан с помощью вышеупомянутых функций (например). Запись звука вызовет асинхронное событие Audio Recording Asynchronous Event, которое будет содержать конкретную информацию о том, что записывается.
-
+
Аудиобуферы также позволяют записывать звук из любого доступного источника (например, микрофона или ОС), который затем может быть поставлен в очередь и передан с помощью вышеупомянутых функций (например). Запись звука вызовет асинхронное событие Audio Recording Asynchronous Event, которое будет содержать конкретную информацию о том, что записывается.
+
Для записи аудио доступны следующие функции:
Обратите внимание, что вы должны освободить все очереди аудио, созданные с помощью этой функции, когда они больше не нужны, чтобы предотвратить утечку памяти при использовании функции audio_free_play_queue().
При работе со сложными звуковыми ситуациями бывает полезно определить, где в аудиосреде должен находиться слушатель. При работе с простыми аудиофункциями обычно нет необходимости изменять положение слушателя, однако при использовании эмиттеров для создания реалистичного звука в трехмерном аудиопространстве важно правильно изменить и переместить слушателя, иначе звук будет находиться в неправильном положении для человека, играющего в вашу игру.
-
По умолчанию в игре автоматически создается один слушатель, который использует идентификатор 0 (для ссылки в функциях слушателя).
-
+
По умолчанию в игре автоматически создается один слушатель, который использует идентификатор 0 (для ссылки в функциях слушателя).
+ GameMaker предоставляет следующие функции слушателей:
Если шрифт был создан из sprite, это будет индекс изображения глифа из этого sprite, в противном случае это будет номер символа Unicode.
-
+
Если шрифт был создан из sprite, это будет индекс изображения глифа из этого sprite, в противном случае это будет номер символа Unicode.
+ Примечание: Все переменные ниже этой не будут присутствовать в структуре, если шрифт был создан из спрайта.
Полный список констант, относящихся к различным событиям, см. event_perform(), а если вам нужен номер события (т.е. под-событие), то вы должны проверить константу event_number.
Приведенный выше код запускает for цикл по всем слоям, присутствующим в комнате, и проверяет каждый слой на наличие FX-структуры. Если слой имеет FX-структуру, он проверяет имя этого фильтра/эффекта, вызывая fx_get_name(); если оно равно "_filter_tintfilter", что означает, что это фильтр "Colour Tint", он меняет цвет оттенка на синий.
+
Приведенный выше код запускает for цикл по всем слоям, присутствующим в комнате, и проверяет каждый слой на наличие FX-структуры. Если слой имеет FX-структуру, он проверяет имя этого фильтра/эффекта, вызывая fx_get_name(); если оно равно "_filter_tintfilter", что означает, что это фильтр "Colour Tint", он меняет цвет оттенка на синий.
ПРИМЕЧАНИЕ Перечисленные выше переменные не будут действительны в сценарии, так как сценарии выполняются до загрузки первой комнаты.
-
+
ПРИМЕЧАНИЕ Перечисленные выше переменные не будут действительны в сценарии, так как сценарии выполняются до загрузки первой комнаты.
+
Это относится только к коду, написанному в корне сценария, но не к функциям, созданным внутри сценариев, так как эти функции могут быть выполнены в любое время во время игры.
Вы также можете использовать следующие функции для получения названия текущей комнаты (как определено в браузере активов), а также для перемещения между комнатами:
"blend_multiply" или "image_blend" - при установке на дорожку типа seqtracktype_colour указывает, что содержимое этой дорожки должно использоваться как данные умножения цвета. Данные ключевых кадров для такой дорожки должны представлять собой массив из четырех значений в формате [A, R, G, B]. Обратите внимание, что значения для каждого компонента выражаются между 0 и 1, где 0 соответствует HEX-значению #00, а 1 - HEX-значению #FF (0 - 255, как показано в окне выбора цвета для дорожек смешивания изображений в редакторе последовательностей).
"image_speed" - при установке на дорожку типа seqtracktype_real указывает, что содержимое этой дорожки должно использоваться в качестве значения скорости изображения.
"image_index" - при установке на дорожку, имеющую тип seqtracktype_real, указывает, что содержимое этой дорожки должно использоваться в качестве значения индекса изображения.
-
"image_angle" - при установке на дорожку типа seqtracktype_real указывает, что содержимое этой дорожки должно использоваться в качестве значения угла изображения.
-
-
+
"image_angle" - при установке на дорожку типа seqtracktype_real указывает, что содержимое этой дорожки должно использоваться в качестве значения угла изображения.
+
+ Имена параметров текстовых дорожек (используются только для текстовых дорожек):
"frameSize" - при установке на дорожке seqtracktype_real указывает, что содержимое этой дорожки должно использоваться в качестве размера кадра для текста.Каждый ключевой кадр для этой дорожки должен иметь два канала, 0 и 1, где 0 хранит размер X, а 1 - размер Y кадра.
var _position = skeleton_animation_get_position(0);
var _position_percent = _position * 100;
show_debug_message("The skeleton animation position on track 0 is at " + string(_position_percent) + "%.");
-
Приведенный выше код проверяет текущую позицию скелетной анимации, назначенной дорожке 0, и сохраняет ее во временной переменной _position. Затем он преобразует это значение в проценты, умножая его на 100, и сохраняет результат в другой временной переменной _position_percent.
+
Приведенный выше код проверяет текущую позицию скелетной анимации, назначенной дорожке 0, и сохраняет ее во временной переменной _position. Затем он преобразует это значение в проценты, умножая его на 100, и сохраняет результат в другой временной переменной _position_percent.
Наконец, он выводит отладочное сообщение, в котором отображается значение процента.
После того как вы назначили скелетную анимацию sprite своему экземпляру, вы можете определить, какой набор анимаций он должен использовать в любой момент времени с помощью этой функции. При создании своего sprite (в Spine) вы определили несколько наборов анимации для различных состояний и присвоили каждому из них соответствующее имя. Эти имена вы будете использовать для того, чтобы указать программе GameMaker, какой набор анимации использовать в любой момент времени в вашей игре. Например, если ваш sprite предназначен для платформенной игры, то вы можете иметь набор "прыжок", набор "бег" и набор "бездействие", содержащиеся в одном sprite, и вы можете переключаться между ними в вашей игре с помощью этой функции.
+
После того как вы назначили скелетную анимацию sprite своему экземпляру, вы можете определить, какой набор анимаций он должен использовать в любой момент времени с помощью этой функции. При создании своего sprite (в Spine) вы определили несколько наборов анимации для различных состояний и присвоили каждому из них соответствующее имя. Эти имена вы будете использовать для того, чтобы указать программе GameMaker, какой набор анимации использовать в любой момент времени в вашей игре. Например, если ваш sprite предназначен для платформенной игры, то вы можете иметь набор "прыжок", набор "бег" и набор "бездействие", содержащиеся в одном sprite, и вы можете переключаться между ними в вашей игре с помощью этой функции.
Анимация воспроизводится по кругу, что является стандартом.
Обратите внимание, что установка новой анимации таким образом приведет к сбросу параметра image_index на 0, запуская новый набор анимации с начала цикла анимации. Если такое поведение нежелательно, можно задать значение "mix" с помощью функции skeleton_animation_mix() и при установке новой анимации она будет плавно интерполироваться с предыдущим набором. Также следует убедиться, что в начале каждой анимации стоит ключевой кадр, чтобы данные не задерживались в предыдущих анимациях, если вы не планируете использовать отдельные анимационные дорожки.
Когда вы устанавливаете набор анимации для скелетной анимации sprite, ему назначается дорожка 0. Однако вы можете назначить другие наборы на другие дорожки (1 и выше) и таким образом заставить ваш sprite воспроизводить две (или более) анимации одновременно. Обратите внимание, что sprite должен быть разработан в вашей программе анимации с учетом этого, так, чтобы "базовая" анимация на дорожке 0 имела ключевые кадры только для определенных костей, в то время как следующие дорожки имели ключевые кадры для остальных. Например, если у вас есть анимация "ходьбы", и ее ключевые кадры воздействуют только на ноги sprite, то вы можете иметь набор анимаций головы и рук, которые вы можете установить на дорожках 1 и 2 соответственно, что позволит вам иметь базовое движение и адаптироваться к нему в реальном времени во время игры.
+
Когда вы устанавливаете набор анимации для скелетной анимации sprite, ему назначается дорожка 0. Однако вы можете назначить другие наборы на другие дорожки (1 и выше) и таким образом заставить ваш sprite воспроизводить две (или более) анимации одновременно. Обратите внимание, что sprite должен быть разработан в вашей программе анимации с учетом этого, так, чтобы "базовая" анимация на дорожке 0 имела ключевые кадры только для определенных костей, в то время как следующие дорожки имели ключевые кадры для остальных. Например, если у вас есть анимация "ходьбы", и ее ключевые кадры воздействуют только на ноги sprite, то вы можете иметь набор анимаций головы и рук, которые вы можете установить на дорожках 1 и 2 соответственно, что позволит вам иметь базовое движение и адаптироваться к нему в реальном времени во время игры.
Анимация воспроизводится в циклическом режиме, который используется по умолчанию.
Ваша скелетная анимация состоит из ряда "костей", которые вы определили и дали им имена в вашей программе анимации, и эта функция может быть использована для установки определенных данных для названной кости в любое время. Обратите внимание, что эти данные будут задавать текущую позу скелета, в зависимости от используемого набора анимации. Для работы функции требуется предварительно созданная карта DS, которая должна содержать следующие ключи и их необходимые значения:
-
"x": Локальная x-позиция кости относительно родительской кости.
+
"x": Локальная x-позиция кости относительно родительской кости.
-
"y": Локальная позиция y кости относительно родительской кости.
+
"y": Локальная позиция y кости относительно родительской кости.
-
"угол": Локальный поворот кости относительно родительской кости.
+
"угол": Локальный поворот кости относительно родительской кости.
true если sprite помечен как прозрачный, в противном случае. false
+
true если sprite помечен как прозрачный, в противном случае. false (Это может быть указано только через sprite_add() или аналогичные функции, и будет false для sprites, созданного в IDE)
гладкий
булево
-
true если sprite отмечен как гладкий, в противном случае false
+
true если sprite отмечен как гладкий, в противном случае false (Это можно указать только с помощью sprite_add() или аналогичных функций, и это будет false для sprites, созданных в IDE)
Это значение задает вертикальное масштабирование (по оси y), применяемое к sprite, назначенному текущему экземпляру. Значение 1 означает отсутствие масштабирования (1:1), меньшие значения уменьшают масштаб (например, 0.5 уменьшает высоту sprite в два раза), большие значения увеличивают масштаб, а отрицательные значения зеркально отражают spriteи масштабируют его, если только используемое значение не равно -1 (в этом случае sprite просто зеркально отражается по оси y без масштабирования).
+
Это значение задает вертикальное масштабирование (по оси y), применяемое к sprite, назначенному текущему экземпляру. Значение 1 означает отсутствие масштабирования (1:1), меньшие значения уменьшают масштаб (например, 0.5 уменьшает высоту sprite в два раза), большие значения увеличивают масштаб, а отрицательные значения зеркально отражают spriteи масштабируют его, если только используемое значение не равно -1 (в этом случае sprite просто зеркально отражается по оси y без масштабирования).
Наконец, допуск используется для определения степени точности маски (при использовании маски "полное изображение" это не будет иметь никакого эффекта). Допуск 0 означает, что маска будет следовать за каждым пикселем, прозрачность которого больше 0, в то время как другие значения будут смещать периметр маски столкновений в зависимости от прозрачности пикселей.
ПРИМЕЧАНИЕ: Эта функция полезна только для растровых изображенийsprites и не работает с SWF или JSON (Spine) sprites.
ПРИМЕЧАНИЕ: Эта функция будет работать только на добавленных sprites или дублированных sprites, но не непосредственно на предварительно созданных ресурсах. Вы можете продублировать sprites с помощью функции sprite_duplicate().
Выбор типа скорости, который будет использоваться для расчета анимации, очень важен, поскольку между этими двумя вариантами существует огромная разница. Следующие два примера иллюстрируют эту разницу:
Если у вас есть sprite, который рисует 1 кадр в секунду, а скорость изображения установлена на 0,5, он будет рисовать со скоростью 0,5 кадра в секунду. Если частота кадров в игре составляет 60 кадров в секунду, то sprite будет рисовать 1 кадр на каждые 120 игровых кадров.
Facebook является одной из самых важных социальных сетей в Интернете, и многие игры и разработчики в настоящее время имеют свои собственные страницы для размещения игр и медиа. В GameMaker есть расширение, позволяющее подключаться к Facebook и выполнять определенные действия и задачи, которые позволяет API. Перед началом использования расширения рекомендуется посетить страницу Facebook Developers, так как твердое понимание того, как работает Facebook Graph и доступные вызовы и разрешения, необходимо для того, чтобы получить максимальную отдачу от этих функций.
-
+
Facebook является одной из самых важных социальных сетей в Интернете, и многие игры и разработчики в настоящее время имеют свои собственные страницы для размещения игр и медиа. В GameMaker есть расширение, позволяющее подключаться к Facebook и выполнять определенные действия и задачи, которые позволяет API. Перед началом использования расширения рекомендуется посетить страницу Facebook Developers, так как твердое понимание того, как работает Facebook Graph и доступные вызовы и разрешения, необходимо для того, чтобы получить максимальную отдачу от этих функций.
+
Вы можете узнать, как настроить и использовать расширение Facebook для всех доступных платформ по следующей ссылке:
Также необходимо определить, как будут использоваться эти константы, чтобы значения можно было правильно "привязать" в создаваемом шейдере. Это необходимо в связи с тем, что DX и OpenGL имеют разные требования, поэтому если вы не свяжете их должным образом, они не будут правильно отображаться в шейдере. Доступные константы использования, которые вы можете выбрать, перечислены ниже, и их использование будет зависеть от специфики создаваемого шейдера:
@@ -116,7 +116,7 @@
vertex_format_add_custom
-
+
Есть несколько важных моментов, на которые следует обратить внимание при использовании таких пользовательских форматов:
Функция vertex_format_add_custom() поддерживает только vertex_usage_position, vertex_usage_colour, vertex_usage_normal и vertex_usage_textcoord при использовании шейдеров GLSL. Они будут отображаться на атрибуты шейдеров in_Position, in_Colour[0 - ...], in_Normal соответственно (все, что не является одним из этих трех атрибутов - например, координаты текстуры - может быть отображено на любой атрибут, который вы определите).
Побитовое "или" этих констант со значением индекса плитки для получения окончательных плиточных данных:
var tiledata = 8 | tile_rotate | tile_flip;
Приведенный выше код просто создает локальную переменную для хранения данных плитки с индексом 8 в наборе плиток, поворачивает и переворачивает ее. Это не связано с каким-либо слоем tilemap, и плитка будет нарисована на глубине слоя экземпляра, выполняющего рисование, в позиции x/y, которую вы укажете в комнате. Обратите внимание, что вы также можете задать рамку для рисования. Если индексируемая плитка является частью анимационного набора, то здесь можно задать номер кадра (от 0 до количества кадров - 1), и индексируемая плитка будет просто индикатором того, какой набор анимированных плиток вы используете, а рисоваться будет именно данный кадр. Если плитка не является частью анимированного набора, то кадр должен быть равен 0.
ПРИМЕЧАНИЕ: Единственное, что вы не можете сделать с поверхностью приложения, - это освободить ее. Она всегда существует, хотя значение индекса для доступа к ней может меняться.
Когда вы запускаете свою игру, эта поверхность создается при первом вызове события draw в каждой новой комнате, в которую вы входите, что означает, что до этого момента ничего не рисуется. Однако вы все равно можете получить положение поверхности приложения и изменить ее размер в событии Create или любом другом событии без каких-либо ошибок, а используемые значения будут относиться к поверхности в момент ее создания. Фактическая последовательность событий для создания и рисования поверхности приложения выглядит следующим образом:
-
Событие перед жеребьевкой
+
Событие перед жеребьевкой
--- > создается поверхность приложения (если она не существует) и устанавливается цель рендеринга
Для каждого видимого порта представления, или, если ни один порт представления не активен, один раз
Событие начала рисования
Событие начала рисования
-
Событие окончания рисования
+
Событие окончания рисования
--- > цель рендеринга поверхности приложения сбрасывается здесь
-
Событие после жеребьевки
- --- > Поверхность приложения теперь по умолчанию рисуется в буфер дисплея
+
Приведенный выше код создает новую строку, содержащую правильный объект JSON, а затем вызывает json_parse() для преобразования этой строки в структуру GML. Затем он печатает результат в журнал отладки.
-
ПРИМЕЧАНИЕ Вы заметите, что строка JSON содержит обратную косую черту(\) перед каждой двойной кавычкой (") внутри нее:
-
- json = "{ \ " myObj
-
- Это делается для того, чтобы двойная кавычка читалась как реальный символ в строке, а не как часть кода и не закрывала строку преждевременно. Таким образом, мы используем обратную косую черту, чтобы "спасти" двойную кавычку.
-
+
ПРИМЕЧАНИЕ Вы заметите, что строка JSON содержит обратную косую черту(\) перед каждой двойной кавычкой (") внутри нее:
+
+ json = "{ \ " myObj
+
+ Это делается для того, чтобы двойная кавычка читалась как реальный символ в строке, а не как часть кода и не закрывала строку преждевременно. Таким образом, мы используем обратную косую черту, чтобы "спасти" двойную кавычку.
+
Однако если вы загружаете JSON из внешнего файла, нет необходимости экранировать символы в этом файле, и это может привести к ошибкам при разборе.
При использовании этой функции следует обратить внимание на некоторые важные моменты:
Эта функция не преобразует карты DS, списки или любые другие структуры данных в JSON, а просто сохраняет значение внутреннего индекса структуры (что малополезно, так как индекс будет меняться между запусками игры), и поэтому не следует пытаться строчить любые значения, которые могут содержать ссылки на структуры данных (для этого есть json_encode()).
-
Эта функция преобразует практически любое значение в "правильную" строку JSON, однако фактические значения, содержащиеся в строке, могут быть не совсем такими, как вы ожидаете, из-за особенностей работы стандарта JSON:
-
- "JSON не имеет отношения к числам. В любом языке программирования может быть множество типов чисел различной емкости и комплектации, фиксированных или плавающих, двоичных или десятичных. Это может затруднить обмен между различными языками программирования. Вместо этого JSON предлагает только то представление чисел, которое используют люди: последовательность цифр. Все языки программирования знают, как понять последовательность цифр, даже если они не согласны с внутренними представлениями".
-
+
Эта функция преобразует практически любое значение в "правильную" строку JSON, однако фактические значения, содержащиеся в строке, могут быть не совсем такими, как вы ожидаете, из-за особенностей работы стандарта JSON:
+
+ "JSON не имеет отношения к числам. В любом языке программирования может быть множество типов чисел различной емкости и комплектации, фиксированных или плавающих, двоичных или десятичных. Это может затруднить обмен между различными языками программирования. Вместо этого JSON предлагает только то представление чисел, которое используют люди: последовательность цифр. Все языки программирования знают, как понять последовательность цифр, даже если они не согласны с внутренними представлениями".
+
Для получения дополнительной информации см. стандарт ECMA JSON.
Если вы включите int64 в значения для преобразования в JSON, он запишет его как int, если оно находится в допустимом диапазоне для int32, как double, если он может сделать это без потери точности, или (если ни один из этих случаев не применим) как строку с идентификатором "@i64@" перед ним и "$i64$" после него. Когда вы снова придете разбирать JSON, GameMaker перехватит эти идентификаторы и преобразует значение обратно в int64. Это означает, что если JSON предназначен для сервера или другой цели, не связанной с GameMaker, эти значения не подойдут, поэтому их следует избегать.
ПРИМЕЧАНИЕОриентация геймпада - это кватернион, поэтому он имеет четыре значения (X, Y, Z и W).
-
+
ПРИМЕЧАНИЕОриентация геймпада - это кватернион, поэтому он имеет четыре значения (X, Y, Z и W).
+
* Эти константы поддерживаются только на PS4 и PS5, при использовании на других платформах функции ввода вернут 0, даже при использовании геймпада DualSense.
Чтобы лучше понять, какую именно часть контроллера представляет каждая константа, вы можете обратиться к следующему изображению стандартного геймпада XInput:
Первая опция (network_config_connect_timeout) просто устанавливает тайм-аут для подключения к серверу, но не меняет поведение соединения, кроме времени ожидания. Рекомендуется не устанавливать это значение слишком низким и держать его около 1000 для игры только по локальной сети или 4000 или около того для Интернета, иначе игра может случайно не подключиться. Если вы хотите установить значение тайм-аута для отправки/получения пакетов, используйте функцию network_set_timeout().
Второй вариант (network_config_use_non_blocking_socket) означает, что все функции network_connect_* (неасинхронные) будут мгновенно возвращать socket_id, но вы не сможете отправлять или получать на этом сокете, пока не получите асинхронное сетевое событие. У вызванного события ключ "type" будет установлен на network_type_non_blocking_connect (более подробную информацию вы можете найти на странице Асинхронное сетевое событие). Это глобальная настройка, поскольку GameMaker не поддерживает смесь блокирующих и неблокирующих процессов в одном приложении.
Третья и четвертая опции (network_config_enable_reliable_udp, network_config_disable_reliable_udp) предназначены для включения или отключения надежного UDP-протокола GameMaker и, соответственно, должны использоваться только для UDP-соединений. Слово "надежный" в данном случае означает, что, если оно включено на обоих концах соединения, GameMaker будет пытаться проверить правильность доставки ваших пакетов и повторно отправлять те, которые не дошли (обратите внимание, мы не гарантируем, что ваши пакеты дойдут в порядке передачи). При использовании надежного типа сокета ко всем пакетам udp будет добавляться 12-байтовый заголовок, содержащий информацию, необходимую GameMaker для проверки пакета на наличие ошибок и повторной отправки недостающих пакетов. При использовании этой опции стоит обратить внимание на следующие моменты:
Эти константы предназначены для тех шарниров, к которым присоединен двигатель (револьверный, призматический, колесный):
@@ -117,7 +117,7 @@
-
+
Для револьверного шарнира вы можете использовать следующую константу (а также константы двигателя, если он был добавлен):
@@ -138,7 +138,7 @@
phy_joint_angle
-
Угол, который образует линия между двумя опорными точками сустава. Вычисляется с помощью координат физического мира
+
Угол, который образует линия между двумя опорными точками сустава. Вычисляется с помощью координат физического мира (не координаты комнаты GameMaker ) в радианах.
Да
@@ -159,7 +159,7 @@
-
+
Для призматического соединения можно использовать следующую константу:
@@ -185,7 +185,7 @@
-
+
Для расстояния, сварного шва и колесных соединений можно использовать следующие константы (как и для шкивных соединений):
@@ -226,7 +226,7 @@
-
+
Для фрикционного соединения можно использовать следующие константы:
@@ -252,7 +252,7 @@
-
+
Для веревочного соединения можно использовать следующую константу:
На этой странице вы подробно рассмотрите шаги по созданию вашей первой многопользовательской игры.
-
- Информацию о системе отката читайте в разделе Система отката.
-
+
На этой странице вы подробно рассмотрите шаги по созданию вашей первой многопользовательской игры.
+
+ Информацию о системе отката читайте в разделе Система отката.
+
Для получения подробной информации обо всех функциях Rollback читайте раздел Функции Rollback.
Создание проекта
@@ -26,8 +26,8 @@
Создание проекта
Создайте два объекта:
obj_game: Это будет управлять вашей многопользовательской игрой.
-
obj_player: Это будет ваш реальный объект игрока. Каждый подключенный игрок будет иметь свой собственный экземпляр этого объекта, которым он сможет управлять.
-
+
obj_player: Это будет ваш реальный объект игрока. Каждый подключенный игрок будет иметь свой собственный экземпляр этого объекта, которым он сможет управлять.
+
Назначьте своего игрока sprite объекту игрока.
@@ -53,8 +53,8 @@
Начало игры
Движущиеся игроки
Ввод управляется системой Rollback и автоматически синхронизируется между игроками.
В объекте игрока вызовите rollback_get_input(), чтобы получить структуру, содержащую все входы по умолчанию, которые выглядят следующим образом:
-
left, right, up, down, Z, X, C, space
-
+
left, right, up, down, Z, X, C, space
+ Они указывают, удерживается ли ключ.*_pressedи *_releasedтакже предусмотрены варианты.
Используйте эти константы для определения кнопок мыши. Список таких констант приведен здесь.
-
+
Используйте эти константы для определения кнопок мыши. Список таких констант приведен здесь.
+ ПРИМЕЧАНИЕ: mb_any и mb_none не могут быть использованы.
Структура, содержащая следующие переменные:
-
- status Код статуса HTTP ответа
+
Структура, содержащая следующие переменные:
+
+ status Код статуса HTTP ответа error Строка, описывающая ошибку
@@ -61,18 +61,18 @@
Событие отката
rollback_chat_message
-
Срабатывает, когда получено сообщение от rollback_chat() / Send Message получено. Во время этого события rollback_event_param будет содержать следующие переменные:
-
- сообщение: Полученная строка сообщения
- от: Идентификатор игрока, отправившего сообщение
+
Срабатывает, когда получено сообщение от rollback_chat() / Send Message получено. Во время этого события rollback_event_param будет содержать следующие переменные:
+
+ сообщение: Полученная строка сообщения
+ от: Идентификатор игрока, отправившего сообщение to: ID игрока, которому было отправлено сообщение; будет равно -1, если сообщение было отправлено всем.
rollback_player_prefs
-
Срабатывает, когда игрок устанавливает свои предпочтения. Во время этого события rollback_event_param будет содержать следующие переменные:
-
- player_id: ID игрока, который установил свои предпочтения.
+
Срабатывает, когда игрок устанавливает свои предпочтения. Во время этого события rollback_event_param будет содержать следующие переменные:
+
+ player_id: ID игрока, который установил свои предпочтения. предпочтения: Предпочтения, установленные для этого игрока
@@ -82,10 +82,10 @@
Событие отката
rollback_synchronizing_with_peer
-
Срабатывает во время синхронизации игрока с новым игроком. Во время этого события rollback_event_param будет содержать следующие переменные:
-
- player_id: ID игрока, с которым происходит синхронизация.
- count: Сколько шагов синхронизации было выполнено
+
Срабатывает во время синхронизации игрока с новым игроком. Во время этого события rollback_event_param будет содержать следующие переменные:
+
+ player_id: ID игрока, с которым происходит синхронизация.
+ count: Сколько шагов синхронизации было выполнено всего: Сколько всего шагов синхронизации необходимо выполнить
@@ -99,9 +99,9 @@
Событие отката
rollback_game_interrupted
-
Срабатывает, когда игра прерывается из-за игрока с нестабильным соединением. Во время этого события rollback_event_param будет содержать следующие переменные:
-
- player_id: ID игрока с проблемами соединения
+
Срабатывает, когда игра прерывается из-за игрока с нестабильным соединением. Во время этого события rollback_event_param будет содержать следующие переменные:
+
+ player_id: ID игрока с проблемами соединения таймаут: Сколько времени осталось до тайм-аута и отключения игрока (в миллисекундах). По истечении этого времени игрок будет выкинут, и игра возобновится с оставшимися игроками.
@@ -115,17 +115,17 @@
Событие отката
rollback_game_info
-
Срабатывает при получении информации о помещении, но до того, как оно будет полностью присоединено.
- Во время этого события rollback_event_param будет содержать следующие переменные:
-
- num_players: Общее количество игроков в игре
+
Срабатывает при получении информации о помещении, но до того, как оно будет полностью присоединено.
+ Во время этого события rollback_event_param будет содержать следующие переменные:
+
+ num_players: Общее количество игроков в игре player_id: ID местного игрока (начиная с 0)
rollback_connect_info
-
Срабатывает, когда комната была создана и готова к совместному использованию с другими игроками. URL, которым можно поделиться, хранится в rollback_event_param.share_url.
-
+
Срабатывает, когда комната была создана и готова к совместному использованию с другими игроками. URL, которым можно поделиться, хранится в rollback_event_param.share_url.
+
Вы можете автоматически скопировать этот URL, когда он станет доступен, вызвав clipboard_set_text().
Говорит о том, зарегистрирован ли игрок в GX.games или нет.
-
+
Говорит о том, зарегистрирован ли игрок в GX.games или нет.
+
Будет "Гость" для гостевых пользователей и "Пользователь" для зарегистрированных пользователей.
Disabled by default (false). Если функция включена(true), она не присоединяется к игре, а просто возвращает true, если к ней можно присоединиться, или false в противном случае.
-
+
Disabled by default (false). Если функция включена(true), она не присоединяется к игре, а просто возвращает true, если к ней можно присоединиться, или false в противном случае.
+
Таким образом, вы можете использовать эту функцию только для проверки того, был ли игрок приглашен.
Откат является детерминированным. Он делится входными данными только с другими игроками и ожидает, что все они выполнят одну и ту же логику на заданных входных данных, выдавая одинаковые результаты на всех клиентах.
Другой подход к многопользовательской игре - это "репликация состояния", которая постоянно синхронизирует состояние игры между клиентами, гарантируя, что они всегда делают одно и то же.
Rollback не делает этого - он только посылает входные данные, но также следит за состоянием, чтобы его можно было откатить в случае неверного предсказания.
-
Что такое клиент?
-
+
Что такое клиент?
+
Клиент" - это игрок в вашей игре, под которым понимается его копия игры, запущенная на его машине.
Как это работает?
Как уже говорилось ранее, Rollback передает входные данные только между игроками.
Есть две основные вещи, которые обрабатывает Rollback:
-
Вход: Входы каждого игрока передаются другим игрокам. Если игрок 0 нажимает "fire" в своем клиенте, Rollback гарантирует, что другие клиенты также увидят, что игрок 0 нажал "fire".
-
+
Вход: Входы каждого игрока передаются другим игрокам. Если игрок 0 нажимает "fire" в своем клиенте, Rollback гарантирует, что другие клиенты также увидят, что игрок 0 нажал "fire".
+ Предсказания выполняются только на входе.
-
Состояние: Сюда входят все управляемые объекты и их переменные. Они НЕ синхронизируются между игроками: изменение одной переменной в одном клиенте не приведет к ее автоматическому обновлению в другом клиенте.
-
+
Состояние: Сюда входят все управляемые объекты и их переменные. Они НЕ синхронизируются между игроками: изменение одной переменной в одном клиенте не приведет к ее автоматическому обновлению в другом клиенте.
+ Состояние управляется только для того, чтобы его можно было откатить.
@@ -47,8 +47,8 @@
Итак... в чем разница?
Вот пример:
Вход: Игрок 0 нажимает кнопку "огонь".
-
Состояние: Поскольку Игрок 0 нажал кнопку "огонь", создается снаряд. Этот снаряд в конечном итоге сталкивается с камнем. В результате игрок 0 получает очко.
-
+
Состояние: Поскольку Игрок 0 нажал кнопку "огонь", создается снаряд. Этот снаряд в конечном итоге сталкивается с камнем. В результате игрок 0 получает очко.
+
По сути, это и есть вся ваша игра, полностью зависящая от ввода.
При использовании этой функции она возвращает асинхронное значение ID, которое затем может быть разобрано при срабатывании асинхронного события Steam для сообщения о создании элемента. Событие будет содержать следующие значения ключа/карты в файле async_load ds_map:
- Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
+
+ Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
steam_ugc_send_query() - и вы можете использовать другие функции steam_ugc_query_*() для уточнения поискового запроса перед его отправкой.
Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
+
Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
steam_ugc_send_query() - и вы можете использовать другие функции steam_ugc_query_*() для уточнения поискового запроса перед его отправкой.
Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
+
Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
steam_ugc_send_query() - и вы можете использовать другие функции steam_ugc_query_*() для уточнения поискового запроса перед его отправкой.
Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
+
Функция возвращает уникальное значение хэндла запроса, которое должно быть сохранено в переменной для использования в других функциях запроса. Обратите внимание, что эта функция только подготавливает запрос, но не отправляет его - для этого вы должны вызвать функцию
steam_ugc_send_query() - и вы можете использовать другие функции steam_ugc_query_*() для уточнения поискового запроса перед его отправкой.
Это родительский источник времени, который управляет новым источником времени. Это может быть time_source_global, time_source_game или пользовательский источник времени, который уже существует.
-
+
Это родительский источник времени, который управляет новым источником времени. Это может быть time_source_global, time_source_game или пользовательский источник времени, который уже существует.
+
См: Встроенные источники времени
Также стоит отметить, что если передаваемый вами аргумент URL является именем функции скрипта (т.е. не начинается с "http://") И скрипт называется gmcallback_*, то вы можете получить прямую передачу в html5-событие. Имена функций скриптов GameMakerне обфусцируются, если они начинаются с gmcallback_.
/ + : Откроется окно обзора рабочего пространства, которое можно использовать для быстрой навигации между элементами, открытыми в различных рабочих пространствах. Окно будет оставаться открытым, пока удерживается или , а однократное нажатие приведет к переходу к следующему элементу в окне. Отпустив клавишу быстрого доступа, вы перейдете к выбранному элементу.
-
+
/ + : Откроется окно обзора рабочего пространства, которое можно использовать для быстрой навигации между элементами, открытыми в различных рабочих пространствах. Окно будет оставаться открытым, пока удерживается или , а однократное нажатие приведет к переходу к следующему элементу в окне. Отпустив клавишу быстрого доступа, вы перейдете к выбранному элементу.
+ ПРИМЕЧАНИЕ Если вы переназначите привязку для этого окна, чтобы использовать несколько модификаторов (например, + + B) или одну клавишу (например, только B ), то окно останется открытым после нажатия клавиши, независимо от того, удерживаете вы ее или нет, пока вы вручную не закроете его или не выберете элемент из окна.
@@ -82,8 +82,8 @@
Вход IDE и навигация
-
-
+
+
На следующих страницах содержится более подробная и специфическая информация о навигации по сайту IDE, а также информация о некоторых доступных вам инструментах навигации:
Последние проекты - Вы можете использовать эту опцию для просмотра недавно использованных проектов. При выборе этой опции вновь откроется Стартовая страница (если вы ее закрыли), и вы сможете выбрать недавно использованный проект из списка.
Сохранить проект - сохранит вашу игру в том же месте, которое вы указали при создании проекта (или в том месте, откуда вы его открыли).
Сохранить проект как - То же самое, что и выше, только вы указываете местоположение и новое имя проекта.
-
Экспорт проекта - позволяет экспортировать проект либо в виде файла, либо в виде шаблона:
+
Экспорт проекта - позволяет экспортировать проект либо в виде файла, либо в виде шаблона:
YYZ - экспортирует проект в один файл *.yyz, что очень удобно для отправки копий людям или для сохранения резервных копий.
-
Как шаблон - Это позволит вам экспортировать ваш проект как шаблон, который вы сможете использовать в качестве основы для других проектов на The Start Page. При выборе этой опции появится следующее окно:
+
Как шаблон - Это позволит вам экспортировать ваш проект как шаблон, который вы сможете использовать в качестве основы для других проектов на The Start Page. При выборе этой опции появится следующее окно: Сначала нужно нажать на "Редактировать информацию о шаблоне", чтобы убедиться, что информация о шаблоне верна, а затем выбрать "Экспорт", когда вы откроете это приглашение во второй раз, чтобы сохранить проект как шаблон. Затем вы увидите его в меню "Шаблон" на начальном экране.
Моя библиотека - просмотр текущей библиотеки материалов Marketplace.
Моя история покупок - Эта опция откроет браузер и переведет вас на страницу учетной записи пользователя, вошедшего в систему, чтобы вы могли просмотреть историю покупок для этой учетной записи.
Обновить существующий пакет - Эта опция откроет мастер обновления пакета, чтобы вы могли обновить существующий пакет Marketplace, который вы ранее создали.
-
Создать пакет - С помощью этой опции можно открыть мастер создания пакета, чтобы создать новый пакет активов или учебник для сайта Marketplace.
+
Создать пакет - С помощью этой опции можно открыть мастер создания пакета, чтобы создать новый пакет активов или учебник для сайта Marketplace.
Программа установки будет называться что-то вроде "GameMakerStudio-Remote-Installer-X.X.X.XXX.exe"
- и вам нужно скопировать его на компьютер, который вы хотите использовать в качестве удаленного работника (вам не нужно устанавливать GameMaker на удаленном работнике, только эту программу).
+ и вам нужно скопировать его на компьютер, который вы хотите использовать в качестве удаленного работника (вам не нужно устанавливать GameMaker на удаленном работнике, только эту программу).
После того как вы скопируете его на ПК сборки, установите его, следуя подсказкам на экране. По завершении работы программы установки ОС может запросить доступ через брандмауэр к вашей сети. После того, как вы предоставите доступ, программа установки откроет
- страницу в вашем веб-браузере, и вы должны записать IP-адрес и номер порта, указанные на этой странице, поскольку они понадобятся вам на следующем этапе.
+ страницу в вашем веб-браузере, и вы должны записать IP-адрес и номер порта, указанные на этой странице, поскольку они понадобятся вам на следующем этапе.
Теперь вам нужно вернуться на машину, где установлен GameMaker
2 и щелкнуть на кнопке Target Manager , чтобы открыть окно Target Manager,
перейдите в раздел Worker и нажмите кнопку Add Worker . После этого откроется
- следующее окно:
+ следующее окно:
Здесь вам нужно дать имя вашему удаленному рабочему устройству (это то, что будет
в списке Worker в Target Manager), а затем в разделе Host Name добавить адрес вместе с портом, который был показан и отмечен ранее с рабочей машины.
Если все прошло правильно, вы должны получить сообщение о том, что вы можете успешно подключиться к машине удаленного работника. После того, как вы установили Remote Worker и подключились к основному компьютеру IDE, вам нужно будет настроить Local
@@ -43,22 +43,22 @@
На странице настроек отображаются различные пути и параметры сборки для приложения Remote Worker. В верхней части страницы настроек указаны различные пути, которые будут использоваться приложением Remote Worker.
- прежде чем делать что-либо еще, их следует пересмотреть и установить альтернативные пути, если это необходимо (в целом, пути по умолчанию должны быть в порядке). Вы можете получить доступ к странице настроек Remote Worker любым из следующих способов:
+ прежде чем делать что-либо еще, их следует пересмотреть и установить альтернативные пути, если это необходимо (в целом, пути по умолчанию должны быть в порядке). Вы можете получить доступ к странице настроек Remote Worker любым из следующих способов:
-
Нажмите на ссылку "Настройки" в верхней части страницы Remote Worker, которая открывается в браузере вашей удаленной машины:
-
Используйте RMB на значке в трее Remote Worker, чтобы открыть настройки в браузере удаленной машины:
+
Нажмите на ссылку "Настройки" в верхней части страницы Remote Worker, которая открывается в браузере вашей удаленной машины:
+
Используйте RMB на значке в трее Remote Worker, чтобы открыть настройки в браузере удаленной машины:
На локальной машине откройте диспетчер целей и нажмите на значок "cog", чтобы открыть настройки рабочего в окне на локальной машине:
-
Откроется страница настроек, где вы можете увидеть (и установить) различные опции, позволяющие задать пути для сборки вашего проекта:
+
Откроется страница настроек, где вы можете увидеть (и установить) различные опции, позволяющие задать пути для сборки вашего проекта:
После проверки путей, по которым будет работать приложение Remote Worker, вы можете установить (при необходимости) различные настройки локальной сборки. Для разных платформ потребуются различные инструменты сборки, которые должны быть установлены на компьютере для сборки, а удаленный работник должен иметь возможность использовать их на странице настроек.
- удаленный работник должен иметь возможность использовать их для сборки ваших игр через страницу настроек . Первые настройки здесь - это общие настройки:
+ удаленный работник должен иметь возможность использовать их для сборки ваших игр через страницу настроек . Первые настройки здесь - это общие настройки:
Здесь вы можете установить порт для
Help Server и порт для отладчика . Их можно изменить, если у вас возникнут проблемы с подключением при использовании модуля отладки, но в целом следует оставить значения по умолчанию.
-
Теперь вы можете перейти к настройке различных опций для платформ, на которых может работать удаленный работник:
+
Теперь вы можете перейти к настройке различных опций для платформ, на которых может работать удаленный работник:
Если у вас есть доступ к целевой платформе Windows,
вы сможете сразу же выполнить сборку с помощью удаленного рабочего на ПК Windows, используя опцию виртуальной машины (VM). Однако если вы хотите использовать YoYo Compiler (YYC), то вам также необходимо установить путь к Visual Studio на компьютере сборки. Подробную информацию о том, как настроить ПК Windows для компиляции ваших проектов, можно найти в следующей статье службы поддержки:
@@ -76,7 +76,7 @@
Удаленные работники
Следует отметить, что ни кнопка Debug , ни кнопка Clean не будут доступны при использовании Remote Worker. Также обратите внимание, что в настоящее время вы можете выполнять только одну удаленную сборку за раз.
-
После установки и запуска Remote Worker на вашей удаленной машине он появится на панели задач в виде значка, и вы можете щелкнуть по нему правой кнопкой мыши, чтобы вызвать следующие опции:
+
После установки и запуска Remote Worker на вашей удаленной машине он появится на панели задач в виде значка, и вы можете щелкнуть по нему правой кнопкой мыши, чтобы вызвать следующие опции:
Открыть: Откройте приложение Remote Worker в браузере по умолчанию.
Перейдите в раздел Source Control > Clone Repository.
В поле URL введите путь к проекту, который мы установили в руководстве по реверсированию файлов выше (по умолчанию это будет <DRIVE>:\Users\<Username>\Documents\GameMaker\<ProjectName>).
Затем нам нужно задать путь для клонирования:
-
+ Когда мы нажмем кнопку "Ok", мы получим следующее предупреждение о попытке клонирования "непустого" хранилища:
-
+ Здесь мы можем снова нажать "Ok".
Теперь нам будет представлен проводник каталогов для создания "пустого" прокси-репозитория (это репозиторий, который можно безопасно хранить, например, на Dropbox). Найдите место, где мы хотим создать этот прокси-репозиторий, и выберите (или создайте) папку для использования.
Чтобы отменить изменение, нам сначала нужно снова открыть окно фиксации, поэтому мы снова переходим в Source Control > Commit Changes. Наш измененный файл снова будет поставлен в очередь, готовую к фиксации, но это не то, что нам нужно, поэтому мы нажмем кнопку Unstage All, чтобы убрать его из области постановки.
Если мы теперь щелкнем правой кнопкой мыши на файле, который мы изменили, мы получим контекстное меню с опцией " Вернуть путь":
При выборе этой опции вы вернете файлы в предыдущее состояние, в котором они находились.
-
ВАЖНО! При реверсировании вы получите сообщение с просьбой перезагрузить или сохранить текущий проект, так как программа проверки файлов обнаружила изменения на диске:
+
ВАЖНО! При реверсировании вы получите сообщение с просьбой перезагрузить или сохранить текущий проект, так как программа проверки файлов обнаружила изменения на диске: Вы должны нажать Reload, а не save, так как сохранение сохранит то, что находится в памяти, а не перезагрузит реверсированные файлы.
Это все замечательно для тех случаев, когда вы что-то редактируете и хотите внести изменения, не выполняя фиксацию, но как быть, если вы зафиксировали одно или несколько изменений и хотите откатиться к предыдущей фиксации? Что ж, давайте снова отредактируем наш сценарий так:
Важно отметить, что во время работы игры она по умолчанию не обновляет значения переменных и другие данные в окнах отладки, поэтому сначала необходимо либо использовать кнопку Pause в отладчике, чтобы приостановить игру до того, как станут доступны локали, глобали и другие данные, либо включить обновление в реальном времени с помощью иконок в верхней части экрана . Единственным
+
Важно отметить, что во время работы игры она по умолчанию не обновляет значения переменных и другие данные в окнах отладки, поэтому сначала необходимо либо использовать кнопку Pause в отладчике, чтобы приостановить игру до того, как станут доступны локали, глобали и другие данные, либо включить обновление в реальном времени с помощью иконок в верхней части экрана . Единственным
Единственным исключением из этого правила является вид профиля , который обновляется в реальном времени при включении независимо от переключателя реального времени, так как у него есть своя собственная кнопка включения/выключения. Полную информацию об этом представлении вы можете найти на следующей странице:
но обратите внимание, что в сочетании с представлением "Снизу вверх" различные вызовы сценариев и функций будут вложены в вызовы движка, и вам нужно будет щелкнуть по , чтобы развернуть их.
-
+
Данные профиля отображаются в четырех столбцах, и нажатие на любой из них позволяет отсортировать данные в соответствии с критериями столбца.
смещение в коде виртуальной машины (VM) для текущего сценария (аббревиатура "PC" означает "счетчик программ"), экземпляр "self", выполняющий
блок кода, и "другой" экземпляр в событии. Последняя часть действительна только в том случае, если событие является событием столкновения или в коде используется "with". Если экземпляр находится в столкновении,
"other" покажет другой экземпляр (и его переменные) в столкновении, но если это with, то экземпляр "Self" становится тем, который выполняет код, а "Other" - это экземпляр.
- with В остальное время "other" будет просто показывать те же данные, что и "Self".
+ with В остальное время "other" будет просто показывать те же данные, что и "Self".
Обратите внимание, что экземпляры "Self" и "Other" можно развернуть, щелкнув на , чтобы увидеть
список всех локальных переменных и переменных экземпляра, которые в настоящее время объявлены для просматриваемого блока кода. Если вы щелкните правой кнопкой мыши на значении, вы можете установить его тип , чтобы увидеть детали структур данных.
@@ -47,7 +47,7 @@
Часы
В этом окне вы можете добавить конкретную переменную, которую
которую вы хотите отслеживать. Это может быть глобальная переменная или переменная области видимости экземпляра , встроенная переменная или даже массив или структура данных. Если в коде экземпляра, который
- в коде экземпляра есть наблюдаемая переменная, она будет показана здесь, что означает, что вы можете легко отслеживать значение без необходимости искать его в окнах Locals или Globals . Если вы щелкните правой кнопкой мыши на значении, вы можете установить его тип, удалить его или очистить все часы из окна.
+ в коде экземпляра есть наблюдаемая переменная, она будет показана здесь, что означает, что вы можете легко отслеживать значение без необходимости искать его в окнах Locals или Globals . Если вы щелкните правой кнопкой мыши на значении, вы можете установить его тип, удалить его или очистить все часы из окна.
Эти часы позволяют вам увидеть
- что именно рисуется на любых поверхностях , которые есть в вашей игре (включая поверхность приложения), а также увидетьстраницытекстур, которые находятся в памяти. Вы можете выбрать текстуры или поверхности из меню в нижней части часов, а затем навести курсор мыши на идентификатор текстуры или поверхности, чтобы он отобразился во всплывающем окне:
+ что именно рисуется на любых поверхностях , которые есть в вашей игре (включая поверхность приложения), а также увидетьстраницытекстур, которые находятся в памяти. Вы можете выбрать текстуры или поверхности из меню в нижней части часов, а затем навести курсор мыши на идентификатор текстуры или поверхности, чтобы он отобразился во всплывающем окне:
Обратите внимание, что отладчик должен быть приостановлен , прежде чем они обновятся.
Если вы инициализировали какие-либо буферы в вашей игре, то в этом окне будут показаны данные буфера. Вы можете выбрать любой созданный буфер, установив значение Buffer ID, которое будет начинаться с 0 для первого буфера, созданного
- в вашей игре, и увеличивается на 1 для каждого последующего буфера:
+ в вашей игре, и увеличивается на 1 для каждого последующего буфера:
Если вы щелкните правой кнопкой мыши на окне данных или нажмите кнопку Отображение данных, вы можете выбрать способ отображения данных, установив выравнивание и тип, а также задать, как
данные располагаются в поле Выбор столбцов. Здесь есть выпадающее окно, в котором можно выбрать из списка раскладок по умолчанию.
Каждая целевая платформа может иметь один или несколько форматов вывода, основными из которых являются:
VM: Цель VM (виртуальная машина) использует общий бегунок для каждой платформы, а затем интерпретирует код для вашей игры. Обычно этот вариант используется для тестирования из-за более быстрого времени сборки, но он не дает такого же прироста производительности, как использование опции YYC (если она доступна). Вы можете использовать его для компиляции исполняемых пакетов для небольших игр или игр, в которых производительность не является проблемой.
-
YYC: YYC(YoYo Compiler) генерирует код C++ из вашего кода GML, а затем использует компилятор C++ для компиляции в родной код для целевой платформы. Он удаляет ненужные функции и выполняет множество других методов оптимизации, чтобы создать меньший по размеру и улучшенный по производительности исполняемый пакет.
-
+
YYC: YYC(YoYo Compiler) генерирует код C++ из вашего кода GML, а затем использует компилятор C++ для компиляции в родной код для целевой платформы. Он удаляет ненужные функции и выполняет множество других методов оптимизации, чтобы создать меньший по размеру и улучшенный по производительности исполняемый пакет.
+
Это может увеличить производительность вашей игры как минимум в два или три раза, особенно в играх с большим количеством логики, и идеально подходит для больших или требовательных к процессору проектов. Время компиляции может занять больше времени, поэтому всегда следует очищать кэш компилятора перед сборкой окончательного полного пакета активов для целевой платформы. Обратите внимание, что YYC-цель может потребовать установки дополнительных инструментов для выбранной платформы, иначе она не будет работать - вы можете найти дополнительную информацию об этом в Справочном центре YoYo Games, а также на страницах настроек отдельных целей, описанных в этом руководстве.
JavaScript: Цель JavaScript будет доступна только для определенных целей, таких как цель HTML5, и задает компиляцию игры в чистый JavaScript. При этом для вывода JS используется ECMAScript 2015 (или ES6).
@@ -70,28 +70,28 @@
Обзор
Форматы целей
Каждый целевой параметр сохраняется в формате, характерном для конкретной платформы, перечисленных ниже:
-
Opera GX - При компиляции для цели "Opera GX" вы увидите окно "Opera GX Packaging", которое сначала попросит вас войти в систему, используя вашу учетную запись Opera:Обратите внимание, что вам не нужно входить в систему, если вы уже вошли в GameMaker, используя вашу учетную запись Opera.
-
- После того, как вы вошли в систему, начнется компиляция вашей игры и ее загрузка на GX.games. Затем вы можете нажать на "Редактировать игру в Opera", чтобы отредактировать ее в GX.games DevCloud и опубликовать:
+
Opera GX - При компиляции для цели "Opera GX" вы увидите окно "Opera GX Packaging", которое сначала попросит вас войти в систему, используя вашу учетную запись Opera:Обратите внимание, что вам не нужно входить в систему, если вы уже вошли в GameMaker, используя вашу учетную запись Opera.
+
+ После того, как вы вошли в систему, начнется компиляция вашей игры и ее загрузка на GX.games. Затем вы можете нажать на "Редактировать игру в Opera", чтобы отредактировать ее в GX.games DevCloud и опубликовать: Пожалуйста, обратитесь к этой странице, чтобы узнать больше о процессе загрузки игры в Opera GX, и к этой странице для настройки различных видов экспорта, таких как YYC и Mobile.
Windows - При компиляции для общей операционной системы Windows вам сначала будет предложено выбрать между созданием инсталлятора и Zip-пакета , где инсталлятор будет представлять собой один исполняемый файл, который установит вашу игру, а Zip-файл будет представлять собой один сжатый файл формата *.zip со всеми файлами вашей игры, хранящимися внутри (файлы нужно будет извлечь для запуска игры). Если вы отметите флажок " Запомнить вариант упаковки ", то GameMaker запомнит этот выбор для всех последующих компиляций (его можно сбросить или изменить в настройках Windows). Более подробную информацию вы можете найти в Справочном центре YoYo Games. Обратите внимание, что цель Windows может компилировать 32-битные или 64-битные исполняемые файлы в зависимости от того, что вы выбрали в Общих параметрах игры. Мы настоятельно рекомендуем всем новым проектам использовать x64 Runtime для создания 64-битных исполняемых файлов, так как 32-битная среда выполнения будет устаревать и удаляться в будущем.
-
Ubuntu (Linux) - При компиляции для Ubuntu вам будет предложено выбрать между созданием .AppImage или .zip файла, содержащего исполняемый файл x64 или ARM (однако AppImage не поддерживает ARM). Более подробную информацию вы можете получить в Справочном центре YoYo Games.
+
Ubuntu (Linux) - При компиляции для Ubuntu вам будет предложено выбрать между созданием .AppImage или .zip файла, содержащего исполняемый файл x64 или ARM (однако AppImage не поддерживает ARM). Более подробную информацию вы можете получить в Справочном центре YoYo Games. .AppImage используется для распространения в виде пакета через любого дистрибьютора, кроме Steam, в то время как .zip используется только для загрузки на Steam (поскольку он использует Steam Runtime). Из-за этого созданный .zip не может быть открыт как обычный zip-файл.
HTML5 - Если вы выбрали сборку HTML5, то будет создан файл index.html (это имя по умолчанию, но вы можете дать ему собственное имя в Настройках платформы), а также папка с файлами вашей игры, которые будут сохранены в указанном месте. Для того чтобы ваша игра работала, необходимо, чтобы оба эти файла были загружены на сервер. Сайт index.html также можно настроить, чтобы показать вашу игру с другим цветом фона, или в другом положении и т.д... но для этого необходимо знание HTML, и вы также можете указать свой собственный индексный файл при сборке пакета (см. Опции игры HTML5). Вы можете узнать больше в Справочном центре YoYo Games.
-
Android - Для устройств Android вы можете выбрать файл *.apk или *.aab (Android App Bundle) из окна, которое отображается для сохранения игры:
-
+
Android - Для устройств Android вы можете выбрать файл *.apk или *.aab (Android App Bundle) из окна, которое отображается для сохранения игры:
+ Тип выбранного вами файла зависит от магазина, на который вы хотите ориентироваться: файл *.aab требуется для Google Play, а файл *.apk можно использовать в других магазинах. Более подробную информацию вы можете получить в Справочном центре YoYo Games.
iOS - При компиляции для iOS будет создан файл xarchive, который затем используется в Xtools для создания окончательного пакета iOS. Обратите внимание, что для компиляции по адресу iOS вам потребуется компьютер Apple Mac под управлением OSX или выше, а также соответствующие сертификаты и разрешения. Более подробную информацию вы можете получить в Справочном центре YoYo Games.
-
macOS - При компиляции для цели macOS сначала будет предложено выбрать между созданием DMG и Zip-файла :
- "Package as DMG" создаст установочный пакет .dmg, который можно использовать для установки игры на компьютер Mac. Обратите внимание, что во время процесса сборки на Mac появится программа установки, которая исчезнет после завершения процесса сборки.
-
+
macOS - При компиляции для цели macOS сначала будет предложено выбрать между созданием DMG и Zip-файла :
+ "Package as DMG" создаст установочный пакет .dmg, который можно использовать для установки игры на компьютер Mac. Обратите внимание, что во время процесса сборки на Mac появится программа установки, которая исчезнет после завершения процесса сборки.
+
"Package as Zip" создаст либо файл *.app, либо файл *.pkg, в зависимости от того, хотите ли вы впоследствии загрузить его в Mac App Store или нет. Как и в случае с iOS, вам потребуется компьютер Apple Mac под управлением OSX или выше, а также соответствующие сертификаты и разрешения. Более подробную информацию вы можете получить в Справочном центре YoYo Games.
-
Windows UWP - Для Windows UWP, GameMaker создаст пакет *.appxbundle, который затем можно загрузить в магазин Windows или распространять в других местах. Когда вы нажмете кнопку Create Executable, вам будет предложено сообщить GameMaker, какой тип пакета вы хотите создать (может быть для архитектур ARM, x64 и/или x86), и выбрать те цели, на которых будет поддерживаться игра (вы должны выбрать хотя бы одну, но можете выбрать все три или любую комбинацию):
-
+
Windows UWP - Для Windows UWP, GameMaker создаст пакет *.appxbundle, который затем можно загрузить в магазин Windows или распространять в других местах. Когда вы нажмете кнопку Create Executable, вам будет предложено сообщить GameMaker, какой тип пакета вы хотите создать (может быть для архитектур ARM, x64 и/или x86), и выбрать те цели, на которых будет поддерживаться игра (вы должны выбрать хотя бы одну, но можете выбрать все три или любую комбинацию):
+ Если вы отметите флажок Package For Store Upload, то окончательный созданный пакет будет представлять собой файл *.appxupload, который, согласно спецификации Microsoft, должен использоваться для отправки приложений в их магазин, как объясняется в этой статье здесь (все выбранные архитектуры будут включены, как и в случае с *.appxbundle). Вы можете узнать больше о настройке и компиляции под платформу UWP в Справочном центре YoYo Games.
Войдя в приборную панель своего аккаунта, посетите страницу регистрации издателя. Ее можно найти на панели инструментов аккаунта YoYo в разделе Publisher, где нужно щелкнуть на разделе Sell Your Assets:
+
Войдя в приборную панель своего аккаунта, посетите страницу регистрации издателя. Ее можно найти на панели инструментов аккаунта YoYo в разделе Publisher, где нужно щелкнуть на разделе Sell Your Assets:
На следующей странице нажмите кнопку Регистрация, а затем введите основную информацию о вашей личности издателя, например, имя издателя, электронную почту и типы активов, которые вы планируете загружать.
@@ -38,7 +38,7 @@
Создание учетной записи издателя
Активы: Эта страница дает вам быстрый обзор ваших активов (sprites, аудио, проекты и т.д.), позволяет просматривать и редактировать их детали, просматривать статистику продаж, загрузок, а также публиковать новую версию вашего актива. Вы также можете добавлять новые активы, созданные вами, для публикации. Более подробную информацию о публикации активов можно найти на странице: Листинг актива.
Услуги: Здесь вы можете увидеть услуги, которые вы предлагаете другим пользователям Marketplace, а также отредактировать их данные, обновить или добавить новые. Более подробную информацию об услугах см. на странице: Listing A Service.
Сведения о счете: Обновите публичный профиль вашего издателя в магазине и добавьте платежные реквизиты через Account Details (см. выше дополнительную информацию о настройке платежного счета).
-
Доступ пользователей: Если вы работаете в команде, вы можете добавить несколько пользователей к своей учетной записи Publisher и установить, к каким частям консоли Publisher Console они могут получить доступ. Учетная запись, которая регистрирует учетную запись Publisher, является владельцем и имеет полный доступ ко всем частям консоли разработчика. Затем владелец может добавлять учетные записи пользователей и управлять тем, к каким частям Консоли разработчика они имеют доступ. Просто укажите адрес электронной почты человека, которого вы хотите добавить, а затем отметьте те части идентификатора издателя, к которым вы хотите предоставить ему доступ.
+
Доступ пользователей: Если вы работаете в команде, вы можете добавить несколько пользователей к своей учетной записи Publisher и установить, к каким частям консоли Publisher Console они могут получить доступ. Учетная запись, которая регистрирует учетную запись Publisher, является владельцем и имеет полный доступ ко всем частям консоли разработчика. Затем владелец может добавлять учетные записи пользователей и управлять тем, к каким частям Консоли разработчика они имеют доступ. Просто укажите адрес электронной почты человека, которого вы хотите добавить, а затем отметьте те части идентификатора издателя, к которым вы хотите предоставить ему доступ.
Аналитика: Консоль разработчика дает вам доступ к ежедневным отчетам о продажах и загрузках, а также к графикам, позволяющим отслеживать эффективность ваших активов. Вы можете фильтровать отчеты по нескольким параметрам, включая платные или бесплатные, категорию, страну и дату.
Описание вашего актива должно адекватно описывать, для чего используется ваш актив и как он используется, если вы не включили эту информацию в сам актив. Описания не обязательно должны быть длинными, но одно предложение, которое не более чем повторяет отображаемое имя, вероятно, не привлечет много клиентов! Если ваш пакет активов основан на графике, вы можете перечислить типы изображений, которые он содержит. Если актив представляет собой музыкальный альбом, возможно, вы захотите предоставить список треков. Если актив основан на коде, часто бывает полезно добавить короткий блок кода, показывающий, для чего его можно использовать, и так далее, и тому подобное.
Ваше описание также будет более привлекательным, если вы правильно его отформатируете, используя следующую разметку:
-
Курсивный текст: Чтобы создать курсивный текст, поместите текст между одной парой звездочек (*), например:
-
+
Курсивный текст: Чтобы создать курсивный текст, поместите текст между одной парой звездочек (*), например:
+
*этот текст набран курсивом*.
-
Полужирный текст: Чтобы создать полужирный текст, поместите текст между двумя парами звездочек (*), как, например:
-
+
Полужирный текст: Чтобы создать полужирный текст, поместите текст между двумя парами звездочек (*), как, например:
+
**этот текст выделен жирным**.
-
Полужирный и курсивный текст: Чтобы создать полужирный и курсивный текст, поместите текст между тремя парами звездочек (*), как, например:
-
+
Полужирный и курсивный текст: Чтобы создать полужирный и курсивный текст, поместите текст между тремя парами звездочек (*), как, например:
+
***Этот текст выделен жирным и курсивом***.
-
Ссылки URL: Чтобы создать ссылки URL, поместите текст, на который вы хотите сослаться, между квадратными скобками [ ], а затем ссылайтесь на ссылку с четким интервалом между ними, как показано ниже:
-
- это [ссылка] на веб-страницу
- [ссылка]:http://gamemaker.io
-
+
Ссылки URL: Чтобы создать ссылки URL, поместите текст, на который вы хотите сослаться, между квадратными скобками [ ], а затем ссылайтесь на ссылку с четким интервалом между ними, как показано ниже:
+
+ это [ссылка] на веб-страницу
+ [ссылка]:http://gamemaker.io
+ Совет: Чтобы сделать страницу более аккуратной, лучше располагать ссылки внизу страницы.
-
Списки с пунктирными точками: Чтобы создать маркированный список, убедитесь, что над и под списком есть разрыв строки, а затем начните каждую строку со звездочки (*) или дефиса (-), например:
-
- * Пункт списка первый
- * Пункт второй
+
Списки с пунктирными точками: Чтобы создать маркированный список, убедитесь, что над и под списком есть разрыв строки, а затем начните каждую строку со звездочки (*) или дефиса (-), например:
+
+ * Пункт списка первый
+ * Пункт второй
* Список третий
-
Нумерованные списки: Чтобы создать нумерованный список, убедитесь, что над и под списком есть разрыв строки, а затем начните каждую строку с последовательных цифр, например:
-
- 1. Первый элемент списка
- 2. Перечислите пункт два
+
Нумерованные списки: Чтобы создать нумерованный список, убедитесь, что над и под списком есть разрыв строки, а затем начните каждую строку с последовательных цифр, например:
+
+ 1. Первый элемент списка
+ 2. Перечислите пункт два
3. Перечислите пункт три
-
Блоки кода: Чтобы создать блок кода с отступом, убедитесь, что над и под кодом есть разрыв строки, а затем начните каждую строку с четырех пробелов, например:
-
- Lorem ipsum Взгляните на мой код:
-
- game_maker_function(arguments);
+
Блоки кода: Чтобы создать блок кода с отступом, убедитесь, что над и под кодом есть разрыв строки, а затем начните каждую строку с четырех пробелов, например:
+
+ Lorem ipsum Взгляните на мой код:
+
+ game_maker_function(arguments);
yet_another_function(more, arguments, here);
@@ -108,7 +108,7 @@
Руководство по стилю на рынке
Рекомендации по брендингу, изложенные выше для скриншотов, применимы и к видео, вы не должны включать логотипы GameMaker или чужую интеллектуальную собственность в свои видео, если у вас нет разрешения.
-
+
Следование приведенным выше рекомендациям не гарантирует популярности или популярности вашего актива, но это, безусловно, поможет, и нет никакого вреда в том, чтобы сделать ваши активы настолько желанными, насколько они могут быть! Мы надеемся, что эта статья была вам полезна, и, как обычно, если у вас есть вопросы, не стесняйтесь отправить тикет или задать их нам в социальных сетях.
Спрайты обычно являются визуальным представлением объектов в создаваемых вами играх. Таким образом, sprite - это изображение, нарисованное с помощью редактора изображенийGameMaker или созданное с помощью любой внешней программы рисования и импортированное в GameMaker. Используемое изображение не обязательно должно быть одним статичным объектом... это может быть и "стрип" изображение, т.е. несколько изображений в одном файле, которые затем могут быть использованы для создания одного анимированного sprite. Например, следующие 10 изображений образуют sprite для персонажа, который машет руками во время прыжка с парашютом.
+
Спрайты обычно являются визуальным представлением объектов в создаваемых вами играх. Таким образом, sprite - это изображение, нарисованное с помощью редактора изображенийGameMaker или созданное с помощью любой внешней программы рисования и импортированное в GameMaker. Используемое изображение не обязательно должно быть одним статичным объектом... это может быть и "стрип" изображение, т.е. несколько изображений в одном файле, которые затем могут быть использованы для создания одного анимированного sprite. Например, следующие 10 изображений образуют sprite для персонажа, который машет руками во время прыжка с парашютом. И фактически готовая анимация будет выглядеть так, если ее поместить в игру:
Такой файл sprite обычно имеет формат PNG, но GameMaker также принимает векторные sprites в формате SWF, а спрайты Spine в формате JSON (с сопутствующей текстурой atlas ).
Когда вы впервые запускаете GameMaker, ваше рабочее пространство уже будет заполнено несколькими окнами, которые будут " пристыкованы" к IDE. Краткое описание этих окон приведено ниже:
Output - На изображении выше вы также видите окно Output. В этом окне есть несколько вкладок, относящихся к контролю исходного кода, поиску и отладке, причем начальная вкладка предназначена для вывода консоли/компилятора, который показывает, что происходит во время компиляции игры для тестирования или при создании финального пакета для распространения. Здесь также будут отображаться любые отладочные сообщения, которые вы решите отправлять из проекта во время выполнения, и их можно настроить на отображение разного количества информации в общих настройках. Если вы закрыли окно вывода и хотите восстановить его, вы можете воспользоваться меню Windows.
-
Активы - В правой части экрана вы можете найти кнопку Браузер активов. Здесь вы можете создавать и редактировать различные активы, которые использует ваша игра, а также создавать и изменять конфигурации, параметры игры, порядок комнат и другие вещи. Активы создаются щелчком правой кнопки мыши на папке с активами (или в любом другом месте основного вида браузера активов) и выбором пункта Создать, или щелчком на значке плюса вверху и выбором актива из окна Создать актив (обратите внимание, что этим способом можно создать несколько активов одного типа одновременно, установив значение внизу):
-
+
Активы - В правой части экрана вы можете найти кнопку Браузер активов. Здесь вы можете создавать и редактировать различные активы, которые использует ваша игра, а также создавать и изменять конфигурации, параметры игры, порядок комнат и другие вещи. Активы создаются щелчком правой кнопки мыши на папке с активами (или в любом другом месте основного вида браузера активов) и выбором пункта Создать, или щелчком на значке плюса вверху и выбором актива из окна Создать актив (обратите внимание, что этим способом можно создать несколько активов одного типа одновременно, установив значение внизу):
+ При выборе любого из этих вариантов будет создан новый пустой ресурс данного типа с выделенным полем имени, чтобы вы могли сразу дать ему имя. Обратите внимание, что хотя по умолчанию браузер активов прикреплен к IDE, вы можете убрать его в собственное окно, щелкнув на тексте "Браузер активов" вверху и перетащив его. Вы можете в любой момент снова прикрепить его, перетащив его в боковые или нижние части окна IDE. Если вы закрыли окно браузера активов и хотите восстановить его, вы можете воспользоваться меню Windows. Для получения дополнительной информации о доступных активах см. раздел " Редакторы".
Ниже перечислены различные доступные параметры, а также описание того, что каждый из них делает.
Расположение панели инструментов DnD™ по умолчанию: По умолчанию панель инструментов DnD™ (где хранятся все различные библиотеки действий) располагается справа от редактора, но вы можете использовать эту опцию, чтобы она располагалась по умолчанию слева.
-
Режим видимости обзора узла DnD™: Обзор узла - это краткий описательный текст, который появляется рядом с определенными действиями в рабочей области действий, например, вот это действие Destroy Instance:
-
+
Режим видимости обзора узла DnD™: Обзор узла - это краткий описательный текст, который появляется рядом с определенными действиями в рабочей области действий, например, вот это действие Destroy Instance:
+ Вы можете включить их всегда, включить их только если действие свернуто (настройка по умолчанию),
или вообще отключить их.
Автоматическая реакция на преобразование DnD™ в GameMaker Language: Когда вы конвертируете событие или сценарий Drag and Drop в код GML, по умолчанию вы получите сообщение, предупреждающее вас о том, что вы собираетесь сделать, и спрашивающее, хотите ли вы продолжать.
diff --git a/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Feather_Settings.htm b/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Feather_Settings.htm
index 7c634c460..9d6f58344 100644
--- a/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Feather_Settings.htm
+++ b/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Feather_Settings.htm
@@ -67,14 +67,14 @@
Правила именования
Правило GM2017 в разделе "Серьезность сообщения" должно быть включено, чтобы правила именования вступили в силу. По умолчанию оно отключено.
Настройки в этом разделе следующие:
-
Блокирующий список идентификаторов: Это список идентификаторов, разделенных пробелами, которые будут игнорироваться для всех правил именования.
-
- Например, у вас есть правило использовать obj_ в качестве префикса для объектов, но вы хотите, чтобы менеджер объектов и сеть оставались как есть и не использовали префикс obj_.
-
+
Блокирующий список идентификаторов: Это список идентификаторов, разделенных пробелами, которые будут игнорироваться для всех правил именования.
+
+ Например, у вас есть правило использовать obj_ в качестве префикса для объектов, но вы хотите, чтобы менеджер объектов и сеть оставались как есть и не использовали префикс obj_.
+
В этом случае вы напишете manager network в поле Indentifier Blocklist. Feather будет игнорировать эти объекты и любые другие идентификаторы (переменные, перечисления, параметры и т.д.) с такими же именами.
-
<идентификатор> Правило именования: Вы можете установить правила именования для каждого типа идентификаторов в списке, таких как активы, макросы, перечисления, параметры функций, переменные и т.д.
-
+
<идентификатор> Правило именования: Вы можете установить правила именования для каждого типа идентификаторов в списке, таких как активы, макросы, перечисления, параметры функций, переменные и т.д.
+
В каждом выпадающем списке правил именования есть следующие опции:
Префикс: Текст, который должен появиться перед именем идентификатора, который может быть obj_ для объектов, _ для локальных переменных и т.д. в зависимости от ваших предпочтений.
GameMaker может найти подходящее лицо в семействе шрифтов (это наиболее вероятная причина несоответствия при импорте).
Обратите внимание, что это также произойдет, если шрифт GameMaker 1 не имеет кэшированной текстуры шрифта. Если устаревший шрифт не может быть обновлен, то GameMaker по умолчанию будет использовать кэшированную
- текстуру шрифта, и редактор шрифтов больше не позволит вам редактировать шрифт, показывая опцию резервного копирования и обновления на другой:
-
+ текстуру шрифта, и редактор шрифтов больше не позволит вам редактировать шрифт, показывая опцию резервного копирования и обновления на другой:
+ Щелкнув на этой опции, вы сможете редактировать шрифт, либо добавив отсутствующий шрифт, либо установив другой.
резервная копия шрифта хранится в папке font asset, как <font name>.yy.gms1 и <font name>.png.gms1. Чтобы восстановить эти файлы, вручную удалите файлы <font name>.yy и замените их этими, удалив расширение .gms1 из имен файлов. Важно! Все активы хранят свои имена в файле .yy, поэтому вы должны отредактировать их
и поместить правильное имя ресурса в поле <name> (если оно отличается).
Сайт Визуальный GML Preferences используются для определения того, как выглядит и ощущается визуальный редактор. Различные доступные опции перечислены ниже вместе с описанием того, что каждая из них делает.
Расположение панели инструментовGML Visual по умолчанию: По умолчанию панель инструментов GML Visual (где хранятся все различные библиотеки действий) располагается справа от редактора, но вы можете использовать эту опцию, чтобы она располагалась по умолчанию слева.
-
Режим видимости обзора узлаGML Visual: "Обзор узла" - это краткий описательный текст, который появляется рядом с определенными действиями в рабочей области действий, например, это действие Destroy Instance:
-
+
Режим видимости обзора узлаGML Visual: "Обзор узла" - это краткий описательный текст, который появляется рядом с определенными действиями в рабочей области действий, например, это действие Destroy Instance:
+ Вы можете включить их всегда, включить только если действие свернуто (настройка по умолчанию) или вообще отключить.
Автоматическая реакция на преобразование GML Visual в GameMaker Language: Когда вы конвертируетеGML Visual событие или сценарий в код GML, вы по умолчанию получите сообщение, предупреждающее о том, что вы собираетесь сделать, и спрашивающее, хотите ли вы продолжать. Установка этого параметра в значение "OK" приведет к тому, что изменение будет выполнено без показа сообщения.
Автоматически перезагружать измененные файлы: Если этот флажок установлен, то IDE будет автоматически сканировать и проверять файлы на предмет того, не были ли они изменены вне GameMaker, и перезагружать их, если это так.
Отключите анимацию переходов IDE:GameMakerIDE имеет ряд анимированных переходов для таких вещей, как открытие окон и т.д... однако они не всем по вкусу, и вы можете ощутить прирост производительности, если отключите их на старых или маломощных машинах. Вы можете отключить их здесь, по умолчанию они включены.
Opt-in To Feedback Surveys: Когда эта опция отмечена, вы сообщаете GameMaker, что желаете участвовать в опросах обратной связи, то есть время от времени во время работы будет появляться сообщение об участке, над которым вы работаете, с просьбой поставить оценку и оставить отзыв. По умолчанию эта опция включена.
-
Включить переопределение DPI: Эта опция позволяет переопределить настройки DPI по умолчанию на свои собственные. Вы должны сначала включить опцию, а затем установить либо значение Raw DPi Override (значение по умолчанию 96), либо процентное соотношение DPi (значение по умолчанию 100%). После изменения вам будет предложено перезапустить IDE, что может потребовать сохранения любой работы, выполняемой в текущем открытом проекте. Обратите внимание, что минимальный процент DPi составляет 50%, а максимальный - 500%, и если вы наведете курсор мыши на значок информации, то увидите рекомендуемое максимальное значение для используемого дисплея:
-
+
Включить переопределение DPI: Эта опция позволяет переопределить настройки DPI по умолчанию на свои собственные. Вы должны сначала включить опцию, а затем установить либо значение Raw DPi Override (значение по умолчанию 96), либо процентное соотношение DPi (значение по умолчанию 100%). После изменения вам будет предложено перезапустить IDE, что может потребовать сохранения любой работы, выполняемой в текущем открытом проекте. Обратите внимание, что минимальный процент DPi составляет 50%, а максимальный - 500%, и если вы наведете курсор мыши на значок информации, то увидите рекомендуемое максимальное значение для используемого дисплея:
+ Обратите внимание, что если вы превысите рекомендуемое значение DPi для монитора, появится уведомление, позволяющее сбросить DPi.
Allow empty tabs to be closed via the keyboard shortcut: You can close any open Tabs using the keyboard shortcut / + W, but if you disable this option that shortcut will no longer work. This is enabled by default.
Здесь вы можете установить различные параметры
для работы и отображения некоторых инструментов рисования.
-
+
Если вы используете
Arc Tool , то здесь
diff --git a/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Marketplace_Preferences.htm b/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Marketplace_Preferences.htm
index 78e0f3dc8..b665f639f 100644
--- a/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Marketplace_Preferences.htm
+++ b/Manual/contents/Setting_Up_And_Version_Information/IDE_Preferences/Marketplace_Preferences.htm
@@ -51,7 +51,7 @@
Создание нового сертификата
сгенерировать файл *.pem. Вам будет предложено указать место сохранения и имя файла, которые следует записать для дальнейшего использования. После этого новый файл и пароль будут автоматически
и пароль будут автоматически добавлены в поля формы, перечисленные выше, и вы сможете нажать на кнопку Проверить , чтобы убедиться, что сертификат был сгенерирован правильно.
ПРИМЕЧАНИЕ: Мы рекомендуем вам сделать снимок экрана с фактическими настройками, а также сделать копию файла *.pem . Оба файла следует сохранить в безопасном месте для дальнейшего использования или на случай, если вам понадобится
- переустановить GameMaker. Вы не можете обновлять уже загруженные активы, если только обновленный пакет не подписан тем же сертификатом, которым был подписан оригинал.
+ переустановить GameMaker. Вы не можете обновлять уже загруженные активы, если только обновленный пакет не подписан тем же сертификатом, которым был подписан оригинал.
Вы можете изменить сортировку списка команд, нажав на заголовок столбца (либо "Команда", либо "Ключи"), чтобы отсортировать список, используя значения из этого столбца, чередуя возрастание и убывание при каждом нажатии.
Окно столкновения
-
Если вы попытаетесь установить комбинацию клавиш, которая уже используется другими командами, вы увидите специальное окно "Clash":
- В этом окне будет показано местоположение и имя команды, которая уже использует комбинацию клавиш, которую вы пытаетесь использовать. В случае если комбинация клавиш используется несколькими командами, в списке будут показаны все из них.
-
+
Если вы попытаетесь установить комбинацию клавиш, которая уже используется другими командами, вы увидите специальное окно "Clash":
+ В этом окне будет показано местоположение и имя команды, которая уже использует комбинацию клавиш, которую вы пытаетесь использовать. В случае если комбинация клавиш используется несколькими командами, в списке будут показаны все из них.
+
Здесь у вас есть две опции: "Отменить" и "Переопределить (ВСЕ) и переназначить":
Нажатие кнопки "Отмена" приведет к закрытию окна Clash и не внесет изменений ни в одну команду.
Нажатие кнопки "Override (ALL) and Reassign" назначит новую комбинацию клавиш выбранной команде и очистит привязки всех других команд, которые ранее использовали ту же комбинацию.
-
После использования функции "Переопределить и переназначить"GameMaker выделит переопределенную команду в списке команд, чтобы вы могли назначить ей новую комбинацию клавиш. Если было отменено несколько команд, фильтр будет изменен, чтобы отобразить только эти команды, и вы сможете применить к ним новые сочетания клавиш. Этот фильтр можно очистить, нажав на кнопку "Очистить".
-
+
После использования функции "Переопределить и переназначить"GameMaker выделит переопределенную команду в списке команд, чтобы вы могли назначить ей новую комбинацию клавиш. Если было отменено несколько команд, фильтр будет изменен, чтобы отобразить только эти команды, и вы сможете применить к ним новые сочетания клавиш. Этот фильтр можно очистить, нажав на кнопку "Очистить".
+
Если вы хотите использовать другую привязку для выбранной команды, вы можете развернуть раздел "Предлагаемые свободные клавиши", чтобы увидеть список комбинаций клавиш, которые не используются нигде на сайте IDE. Нажав на "Использовать" рядом с любой из этих комбинаций, вы назначите ее выбранной команде и решите проблему.
В этом разделе подробно описаны предпочтения Smart Guides для редактора помещений. Доступны следующие опции:
-
Включить интеллектуальные направляющие: Этот параметр используется для включения/выключения использования интеллектуальных направляющих в редакторе помещений. По умолчанию включено.
+
Включить интеллектуальные направляющие: Этот параметр используется для включения/выключения использования интеллектуальных направляющих в редакторе помещений. По умолчанию включено.
-
Включить линейки: Этот параметр включает/выключает боковые линейки в редакторе помещений. По умолчанию включена.
+
Включить линейки: Этот параметр включает/выключает боковые линейки в редакторе помещений. По умолчанию включена.
-
Привязать линейки к краям: При включении этого параметра направляющие, перетащенные в редакторе комнат из линеек, будут привязаны к любым объектам, размещенным в комнате. По умолчанию включена.
+
Привязать линейки к краям: При включении этого параметра направляющие, перетащенные в редакторе комнат из линеек, будут привязаны к любым объектам, размещенным в комнате. По умолчанию включена.
-
Расстояние привязки: Этот параметр указывает редактору помещений, на каком расстоянии от объекта должна находиться направляющая, прежде чем она будет "привязана" к стороне объекта. Значение по умолчанию - 6px.
+
Расстояние привязки: Этот параметр указывает редактору помещений, на каком расстоянии от объекта должна находиться направляющая, прежде чем она будет "привязана" к стороне объекта. Значение по умолчанию - 6px.
Пароль: Ваш пароль безопасности для файла keystore, который должен состоять не менее чем из шести символов.
Псевдоним: Это другое имя, которое может быть использовано для файла keystore и должно отличаться от имени, введенного выше.
-
Alias Password: Ваш псевдонимный пароль безопасности для файла keystore, который должен состоять не менее чем из шести символов.
-
+
Alias Password: Ваш псевдонимный пароль безопасности для файла keystore, который должен состоять не менее чем из шести символов.
+ ПРИМЕЧАНИЕ Если версия вашего Android Studio 4.2 или выше, вы должны использовать один и тот же пароль для полей "Пароль" и "Псевдонимный пароль". Использование разных паролей и псевдонимов приведет к сбою сборки.
Организационное подразделение: Отдел в компании, частью которого вы являетесь.
Запустить AVD. Откроется менеджер виртуальных устройств Android, где вы можете создать новое AVD (см.
здесь для получения дополнительной информации). После того, как устройство будет создано, вам нужно запустить его из менеджера AVD, а затем в GameMaker нажать на кнопку
Detect Device и он должен быть автоматически добавлен в список устройств:
-
+
После добавления устройства (физического или виртуального),
@@ -103,7 +103,7 @@
Диспетчер устройств
Чтобы добавить устройство Mac в менеджер, необходимо сначала нажать
на кнопку с надписью
Добавить новое устройство, которая добавит устройство и создаст несколько пустых полей, которые необходимо заполнить для включения соединения.
-
+
Сначала вам необходимо
дать имя устройству, чтобы его можно было идентифицировать в списке целей, а затем указать
@@ -117,7 +117,7 @@
Диспетчер устройств
ПРИМЕЧАНИЕ: Если вы разрабатываете для iOS, вы должны сначала сделать это и установить рабочее соединение с Mac, который вы хотите использовать для разработки.
-
+
ПРИМЕЧАНИЕ: Вы
diff --git a/Manual/contents/Settings/Building_via_Command_Line.htm b/Manual/contents/Settings/Building_via_Command_Line.htm
index 280397871..90e6fc7cd 100644
--- a/Manual/contents/Settings/Building_via_Command_Line.htm
+++ b/Manual/contents/Settings/Building_via_Command_Line.htm
@@ -51,10 +51,10 @@
Опции
/uf=[user_folder]
Папка пользователя, используемая для получения информации о лицензии
-
-
+
+
На сайте Windows это будет: %appdata%\GameMaker\<user_name>_<number>
-
+
На macOS это будет: ~/.config/GameMaker/<user_name>_<number>
@@ -76,8 +76,8 @@
Опции
/of=[output_folder_filename]
Выходной каталог, куда будет извлечена сборка; не указывайте только каталог, так как последующая запись всегда удаляется (например: указание d:\game\output поместит файлы игры в d:\game).
-
-
+
+
Если этот параметр не указан, в той же директории, где находится файл .bat (или откуда запущена команда), будет создан каталог с именем output, содержащий извлеченные файлы сборки.
@@ -279,21 +279,21 @@
Синтаксис:
Runtime ListInstalled [directory]
Перечисляет исполнительные программы, доступные в текущей папке (directory= полный путь к папке).
-
-
+
+
Вы можете указать каталог для поиска, но если он не указан, то по умолчанию будет использоваться текущий каталог.
-
-
+
+
Также проверяется, есть ли внутри каталога файл receipt.json и папка manifest (чтобы убедиться, что это действительно среда выполнения).
Runtime Info [version]
Выводит информацию о последнем времени выполнения на заданном канале; также требуется файл лицензии для отображения информации о модулях, доступных для пользователя
-
-
+
+ version может быть либо строкой, используемой для поиска по названиям фидов (например: "739" покажет информацию для всех сборок, содержащих 739 в номере версии), либо all, чтобы показать информацию для всех фидов.
-
-
+
+
Будет выведен список модулей с именами файлов .zip для каждого модуля.
@@ -303,11 +303,11 @@
Синтаксис:
Runtime Verify [folder=.]
Рассчитывает контрольные суммы для всех установленных файлов и сравнивает их с контрольными суммами, записанными в манифесте folder. Вы можете указать папку для проверки, однако если она не указана, то по умолчанию будет использоваться текущий каталог.
-
-
+
+
При этом будут отмечены все файлы, контрольные суммы которых не совпадают, отсутствующие файлы и файлы, которых не должно быть.
-
-
+
+
Обратите внимание, что сами файлы манифеста не проверяются, и пользователь может изменить файлы манифеста, чтобы они соответствовали установленным.
@@ -348,8 +348,8 @@
Игорь Тестинг
/target=[list_of_targets]
Список целей, разделенный запятыми, в формате PLATFORM|DEVICE, например: /target="Windows|Local,HTML|Firefox"
-
-
+
+
Если вы укажете all, тесты будут пытаться запустить для каждого устройства в файле devices.json.
Бегущая строка YoYo также имеет специальный параметр командной строки:
-game <filename>: загружает заданный файл игры
-
+
Зачем вам это нужно? Обычно вы этого не делаете, но если вы хотите иметь более одной версии вашей игры одновременно, это можно сделать с помощью этого метода, что значительно упрощает сравнительные тесты A/B. С помощью этого метода вы можете провести фокус-тестирование с кем-то другим или, как дизайнер, получить лучшее представление о вещах, проводя тесты бок о бок.
Чтобы настроить его, необходимо знать несколько вещей. Для начала вам понадобится путь к самому Runner. Его можно найти в папке Program Data вашей ОС Windows (по умолчанию она может быть скрыта, поэтому вам придется изменить свойства просмотра, чтобы увидеть ее), а типичный формат выглядит следующим образом:
-
-
+
+
Обратите внимание, что папка runtime_version будет зависеть от установленных у вас в данный момент времен выполнения. Вам также понадобится путь к файлу <yourgame>.win, поскольку именно на него мы будем указывать бегунку. Самый простой способ найти этот путь - зайти в папку Temp (обычно она находится по адресу %localappdata%\Temp\GameMakerStudio\<game_name>\) и просто найти *.win, так как это покажет вам все доступные файлы, и вы сможете просто выбрать тот, к которому вам нужно получить полный путь.
Теперь мы могли бы создать ярлык для бегущей строки, как мы это сделали для исполняемого файла, а затем изменять параметры по мере необходимости, но это означает необходимость открывать и редактировать ее между тестами, что сводит на нет цель использования этой функциональности для тестирования бок о бок. Вместо этого мы создадим пару маленьких "пакетных" файлов, чтобы справиться с этой задачей.
Для этого сначала создайте новый текстовый документ на рабочем столе и откройте его в Блокноте (или любом другом текстовом редакторе). Добавьте следующее:
-
-
+
+
Вам нужно установить временный путь к файлу игры *.win, а затем сохранить его как "GM_Test_1.bat" на рабочем столе (имейте в виду, что Блокнот автоматически сохранит файл *.txt, если вы не выберете "все файлы" в опциях диалога сохранения). Пример того, как должна выглядеть ваша конечная команда:
-
+
Выберите игру: В этом списке можно выбрать существующую игру для обновления или загрузить новую игру.
-
Название игры: Это имя (заголовок) вашей игры на GX.games.
-
- ВАЖНО Для того чтобы загрузка на GX.games прошла успешно, важно, чтобы вы использовали только разрешенные символы в имени игры (которое по умолчанию установлено на имя вашего проекта GameMaker, поэтому убедитесь, что вы выбрали правильное имя проекта или изменили имя игры вручную).
-
- Если вы загрузите игру с названием, содержащим запрещенные символы, вы получите эту ошибку: Неверные данные. Проверьте вывод
-
+
Название игры: Это имя (заголовок) вашей игры на GX.games.
+
+ ВАЖНО Для того чтобы загрузка на GX.games прошла успешно, важно, чтобы вы использовали только разрешенные символы в имени игры (которое по умолчанию установлено на имя вашего проекта GameMaker, поэтому убедитесь, что вы выбрали правильное имя проекта или изменили имя игры вручную).
+
+ Если вы загрузите игру с названием, содержащим запрещенные символы, вы получите эту ошибку: Неверные данные. Проверьте вывод
+
Разрешенными символами являются:
a-z, A-Z (с поддержкой локальных схем, таких как å)
@@ -41,8 +41,8 @@
Общий
Выберите группу: Перед загрузкой новой игры вы можете выбрать студию, к которой будет принадлежать игра.
Редактировать игру в Opera: Откройте GX.games DevCloud и перейдите на страницу "Подробности игры". Эта страница доступна только тогда, когда вы вошли в систему и ваша игра загружена.
Внутренний URL Share: Открывает приватную версию вашей игры, только если она была включена на GX.games DevCloud.
-
Public Share URL: Открывает публичную версию вашей игры, только если она была включена на GX.games DevCloud.
-
+
Public Share URL: Открывает публичную версию вашей игры, только если она была включена на GX.games DevCloud.
+
Оба этих URL можно открыть для других пользователей, чтобы они могли играть в вашу игру.
Отображать курсор: Когда эта опция включена, в вашей игре будет отображаться курсор ОС по умолчанию. Если эта опция отключена, то при наведении мыши на окно игры курсор не будет виден, если только вы не создали его в рамках проекта игры (по умолчанию он включен).
Использовать синхронизацию для предотвращения разрывов: Включает или выключает v-синхронизацию. Обратите внимание, что если у вас есть игра с комнатной скоростью 120, а у игрока монитор с частотой обновления 60, включение этой опции зафиксирует скорость игры на 60. По умолчанию эта опция выключена.
Разрешить изменение размера окна: Установка этого флажка позволяет пользователю изменять размер игрового окна (опция "Окно без границ" должна быть выключена, чтобы это работало). По умолчанию эта опция выключена.
-
Масштабирование: Здесь вы можете выбрать сохранение соотношения сторон (таким образом, комната 4:3 будет иметь формат буквы на экране 16:9) или полное масштабирование (растягивание изображения на весь экран).
-
+
Масштабирование: Здесь вы можете выбрать сохранение соотношения сторон (таким образом, комната 4:3 будет иметь формат буквы на экране 16:9) или полное масштабирование (растягивание изображения на весь экран).
+ ВНИМАНИЕ!Выключение поверхности приложения отключит все опции масштабирования, установленные в разделе Windows Game Options, пока она не будет снова включена. Дополнительные сведения см. в разделе Поверхность приложения.
Использовать синхронизацию для предотвращения разрывов: Включает или выключает v-синхронизацию. Обратите внимание, что если у вас есть игра с комнатной скоростью 120, а у игрока монитор с частотой обновления 60, включение этой опции зафиксирует скорость игры на 60. По умолчанию эта опция выключена.
Разрешить изменение размера окна: Установка этого флажка позволяет пользователю изменять размер игрового окна (опция "Окно без границ" должна быть выключена, чтобы это работало). По умолчанию эта опция выключена.
Окно без полей: Если установить этот флажок, игра будет работать в окне без полей, убирая обычные кнопки минимизации, максимизации и закрытия, а также заголовок игры. По умолчанию эта функция выключена.
-
Масштабирование: Здесь вы можете выбрать сохранение соотношения сторон (таким образом, комната 4:3 будет иметь формат буквы на экране 16:9) или полное масштабирование (растягивание изображения на весь экран).
-
+
Масштабирование: Здесь вы можете выбрать сохранение соотношения сторон (таким образом, комната 4:3 будет иметь формат буквы на экране 16:9) или полное масштабирование (растягивание изображения на весь экран).
+ ВНИМАНИЕ!Выключение поверхности приложения отключит все параметры масштабирования, установленные в разделе Windows Game Options, пока она не будет снова включена. Дополнительные сведения см. в разделе Поверхность приложения.
Отображать курсор: Когда эта опция включена, в вашей игре будет отображаться курсор ОС по умолчанию. Если эта опция отключена, то при наведении мыши на окно игры курсор не будет виден, если только вы не создали его в рамках проекта игры (по умолчанию он включен).
Start Fullscreen: Если флажок установлен, игра будет запускаться в полноэкранном режиме, в противном случае она будет запускаться в оконном режиме. По умолчанию эта опция выключена.
Разрешить полноэкранное переключение: Если этот параметр установлен, пользователь может переключаться из полноэкранного режима в оконный и обратно, используя стандартные сочетания клавиш Ubuntu OS. По умолчанию эта функция выключена.
-
Масштабирование: Здесь вы можете выбрать сохранение соотношения сторон (таким образом, комната 4:3 будет иметь формат буквы на экране 16:9) или полное масштабирование (растягивание изображения на весь экран).
-
+
Масштабирование: Здесь вы можете выбрать сохранение соотношения сторон (таким образом, комната 4:3 будет иметь формат буквы на экране 16:9) или полное масштабирование (растягивание изображения на весь экран).
+ ВНИМАНИЕ!Выключение поверхности приложения отключит все параметры масштабирования, установленные в разделе Windows Game Options, пока она не будет снова включена. Дополнительные сведения см. в разделе Поверхность приложения.
Использовать синхронизацию для предотвращения разрывов: Включает или выключает v-синхронизацию. Обратите внимание, что если у вас есть игра с комнатной скоростью 120, а у игрока монитор с частотой обновления 60, включение этой опции зафиксирует скорость игры на 60. По умолчанию эта опция выключена.
Разрешить изменение размера окна: Установка этого флажка позволяет пользователю изменять размер игрового окна (опция "Окно без границ" должна быть выключена, чтобы это работало). По умолчанию эта опция выключена.
Включить Retina: Если отметить этот параметр, то при запуске игры на мониторе с поддержкой сетчатки задний буфер будет иметь более высокое (фактическое) разрешение, а если не отметить этот параметр, то задний буфер будет иметь кажущееся (более низкое) разрешение. Это означает, что начальное окно игры будет установлено в два раза больше по ширине и высоте, чем комната/порт просмотра, на который установлена первая комната. Однако это НЕ изменяет масштаб поверхности приложения, поэтому, если вы хотите, чтобы ваша игра максимально использовала возможности дисплея retina, вам также следует установить размер поверхности приложения равным размеру окна (обратите внимание, что при этом пиксели по ширине и высоте удвоятся, поэтому включайте эту функцию и изменяйте масштаб поверхности приложения только в том случае, если ваша игра выиграет от увеличения разрешения).
-
-
+
+
По умолчанию эта опция выключена, и ее включение не покажет никакой разницы при запуске или отладке игры с помощью VM, так как в этом случае бегущая строка предварительно построена. Она будет работать только в том случае, если вы собираете исполняемый файл через VM или используете YYC для тестирования или сборки игры, так как в этом случае бегунок будет перестроен с вашими настроенными параметрами игры.
Масштабирование: Здесь вы можете выбрать сохранение соотношения сторон (таким образом, комната 4:3 будет иметь формат буквы на экране 16:9) или полное масштабирование (растягивание изображения на весь экран).
-
-
+
+ ВНИМАНИЕ!Выключение поверхности приложения отключит все параметры масштабирования, установленные в разделе Windows Game Options, пока она не будет снова включена. Дополнительные сведения см. в разделе Поверхность приложения.
Наконец, есть возможность задать размер страницы текстуры. По умолчанию (и наиболее совместимый) размер - 2048x2048, но вы можете выбрать любой размер от 256x256 до 8192x8192. Также есть кнопка Предварительный просмотр которая сгенерирует страницы текстур для этой платформы и затем откроет окно, чтобы вы могли посмотреть, как они выглядят. Это может быть очень полезно, если вы хотите увидеть, как структурированы текстурные страницы, и предотвратить создание текстурных страниц большего (или меньшего) размера, чем необходимо. Более подробную информацию о текстурных страницах можно найти здесь.
Этот шаг выполняется после того, как сгенерированы текстуры для вашей игры. Вы можете использовать этот шаг для оптимизации текстур игры вручную.
-
+
Этот шаг выполняется после того, как сгенерированы текстуры для вашей игры. Вы можете использовать этот шаг для оптимизации текстур игры вручную.
+
Этот скрипт получает переменную окружения TexturesDir, которая хранит путь к сгенерированным текстурам.
Генерировать мипмапы - включение этой опции (по умолчанию она выключена) сообщит GameMaker, что исходная страница текстуры должна быть масштабирована и отфильтрована на несколько разрешений в файле текстуры. Обычно эта опция выключена, но если вы используете камеры для приближения или удаления больших участков игровой комнаты или работаете с 3D-игрой, то вы можете включить эту опцию и затем использовать функции Mipmapping Functions для настройки того, как игра будет работать с различными уровнями mipmap. Когда вы установите этот флажок, значение "Размер границы" будет установлено на 8 (если изначально оно было меньше 8). Это связано с тем, что при использовании мипмапов вам нужны большие границы между изображениями на страницах текстур, иначе они начнут сливаться друг с другом на более высоких уровнях мипмапов. Значение по умолчанию 8 позволяет уменьшить изображение примерно до одной восьмой от его исходного размера, прежде чем подизображения начнут сливаться друг с другом, но вы можете изменить это значение на любое необходимое для ваших нужд. Обратите внимание, что если вы используете опцию "Отдельная страница текстур" для sprites, то вам не нужно просматривать каждую текстуру и отмечать ее для генерации мипмапов, вместо этого вы можете перейти в Общие параметры игры и отметить опцию "Генерировать мипмапы для отдельных страниц текстур".
Размер границы - Размер границы изменяет величину перекрытия (или "удвоения пикселей") по краям всех активов на страницах, созданных для группы текстур, чтобы при масштабировании изображений между ними не было видно зазоров (или швов). По умолчанию это значение равно 2 пикселям, но в крайних случаях, когда вы сильно увеличиваете или уменьшаете масштаб изображения, вам может понадобиться увеличить это значение. Обратите внимание, что в редакторе наборов плиток есть опция установки границы вывода для плиток (а также дается объяснение, зачем это нужно), и она отделена от установки границы здесь - в основном, плитки генерируются с границей вывода для каждой плитки на временной текстуре, а затем она добавляется на страницу текстуры с указанной здесь границей по внешнему краю. Также обратите внимание, что включение Mipmaps автоматически установит размер границы по умолчанию для страницы текстуры равным 8, чтобы предотвратить "кровотечение" между текстурами на более высоких уровнях mip, но это можно изменить.
Родительская группа текстур - здесь вы можете выбрать любую из существующих групп в качестве "родительской" для выбранной в данный момент группы. "Дочерние" группы наследуют все изменения, внесенные в родительскую группу текстур, и предназначены в первую очередь для управления ресурсами при работе с кроссплатформенными играми. Текстурная группа с родителем остается самостоятельной текстурной группой и будет генерировать текстурные страницы так же, как и любая другая группа, но назначение им родителя позволяет исключить большие фрагменты для разных платформ. Например, вы можете добавить целую кучу Android игрока sprites в группу "игрок", а Android врага sprites в группу "враг", а затем сделать так, чтобы они обе использовали родительскую группу "android". Если затем исключить родительскую группу "android" из сборки Windows или другой платформы, дочерние группы тоже будут исключены.
-
Формат группы текстур - Здесь вы можете выбрать формат страницы текстур: BZ2 + QOI, QOI и PNG. Рекомендуется придерживаться варианта по умолчанию, BZ2 + QOI, так как он обеспечивает наилучшее сжатие при сохранении качества.
-
+
Формат группы текстур - Здесь вы можете выбрать формат страницы текстур: BZ2 + QOI, QOI и PNG. Рекомендуется придерживаться варианта по умолчанию, BZ2 + QOI, так как он обеспечивает наилучшее сжатие при сохранении качества.
+
Вы можете выбрать QOI, если опция BZ2 влияет на скорость работы на целевой платформе (например, Android), или PNG, если вы хотите работать с экспортированными PNG вручную или использовать опцию PNGCrush.
Вы можете видеть, что мы задали функции имя, которое вы будете использовать при вызове функции в вашем проекте; обратите внимание, что это имя не обязательно должно совпадать с именем, используемым в расширении - вы можете назвать ее как угодно, а затем использовать поле External Name для связи с реальным именем, определенным в расширении:
Ниже находится раздел для определения текста справки - текста, который будет отображаться во всплывающем окне завершения кода и вспомогательном тексте в нижней части редактора кода.
Далее вы можете определить тип возврата, который может быть двойным (вещественное число с плавающей точкой ) или строкой; если внешняя функция ничего не возвращает, то это не имеет значения.
-
Под ним вы определяете аргументы, которые будет принимать функция. Эти аргументы могут быть двойными или строками, и вы можете добавить их, нажав кнопку add , и удалить, нажав кнопку remove .
-
+
Под ним вы определяете аргументы, которые будет принимать функция. Эти аргументы могут быть двойными или строками, и вы можете добавить их, нажав кнопку add , и удалить, нажав кнопку remove .
+
Если ваша функция может принимать переменное количество аргументов (то есть у нее есть необязательные аргументы), вам следует установить флажок "Аргументы переменной длины" внизу.
Чтобы добавить такой файл в ваше расширение, вам нужно зайти в его свойства Android и сначала ввести имя класса (в данном примере "GenericTest"), затем нажать на "Add Source" и выбрать файл .java. Это добавит выбранный файл в каталог вашего проекта - вы можете щелкнуть правой кнопкой мыши на вашем расширении, выбрать "Открыть в проводнике" и увидеть там исходные файлы.
Теперь вы можете добавить новый файл-заполнитель в ваше расширение и создать внутри него функции со следующими свойствами:
Убедитесь, что исходные файлы делегата имеют то же имя, что и класс делегата (например, @interface MyCustomAppDelegate должен быть определен в " MyCustomAppDelegate.h").
Добавьте переменную окружения ${YYExtAppDelegateIncludes} в верхнюю часть заголовочного файла делегата вашего приложения. Она будет заменена во время компиляции соответствующими включаемыми файлами для родительского класса делегата.
-
Используйте переменную окружения ${YYExtAppDelegateBaseClass} в качестве базового класса для вашего пользовательского делегата приложения. Она будет заменена во время компиляции на правильный базовый класс делегата.
-
+
Используйте переменную окружения ${YYExtAppDelegateBaseClass} в качестве базового класса для вашего пользовательского делегата приложения. Она будет заменена во время компиляции на правильный базовый класс делегата.
+
Чтобы ваше расширение работало с другими расширениями, использующими пользовательские делегаты приложений, вы должны вызывать любые методы базового класса из переопределенных методов вашего дочернего класса. Перед вызовом метода суперкласса необходимо убедиться, что он реализован в иерархии классов, чтобы избежать ошибок, например:
@@ -40,17 +40,17 @@
Расширения для iOS / tvOS
}
-
Системные фреймворки: Здесь вы можете добавить любые iOS системные фреймворкив ваше расширение. Они добавляются нажатием кнопки , которая добавит фреймворк, который затем можно отредактировать, дважды щелкнув на нем . Вы можете узнать больше о доступных системных фреймворках здесь. Чтобы удалить системный фреймворк, просто выберите его и нажмите кнопку .
-
+
Системные фреймворки: Здесь вы можете добавить любые iOS системные фреймворкив ваше расширение. Они добавляются нажатием кнопки , которая добавит фреймворк, который затем можно отредактировать, дважды щелкнув на нем . Вы можете узнать больше о доступных системных фреймворках здесь. Чтобы удалить системный фреймворк, просто выберите его и нажмите кнопку .
+ Вы можете установить флажок для фреймворка, чтобы отметить его как "Weak Reference". Это добавит его в раздел "Build Phases -> Link Binary with Libraries" на сайте Xcode как "Optional" фреймворк, в отличие от "Required" фреймворка (который используется по умолчанию).
-
Сторонние фреймворки + комплекты: Этот раздел предназначен для добавления сторонних фреймворков и пакетов SDK. Как и в случае с системными фреймворками, для их добавления нажмите кнопку , а для редактирования дважды щелкните , а выделив их и нажав , удалите их (см. документацию, прилагаемую к выбранному вами SDK, для получения информации о названии фреймворка).
-
- Здесь вы можете выбрать: не встраивать фреймворк, встраивать и подписывать его или встраивать его без подписи:
+
Сторонние фреймворки + комплекты: Этот раздел предназначен для добавления сторонних фреймворков и пакетов SDK. Как и в случае с системными фреймворками, для их добавления нажмите кнопку , а для редактирования дважды щелкните , а выделив их и нажав , удалите их (см. документацию, прилагаемую к выбранному вами SDK, для получения информации о названии фреймворка).
+
+ Здесь вы можете выбрать: не встраивать фреймворк, встраивать и подписывать его или встраивать его без подписи: Это отражает ту же опцию для фреймворка, добавленного в разделе "Фреймворки, библиотеки и встроенное содержимое" на Xcode.
-
Введите путь к фреймворку на Mac: Если вы хотите добавить фреймворк в расширение, файлы которого присутствуют на Mac, используемом для сборки вашего проекта, вы можете ввести путь к этому фреймворку (на машине сборки) в это поле, а затем нажать кнопку , чтобы добавить его.
-
+
Введите путь к фреймворку на Mac: Если вы хотите добавить фреймворк в расширение, файлы которого присутствуют на Mac, используемом для сборки вашего проекта, вы можете ввести путь к этому фреймворку (на машине сборки) в это поле, а затем нажать кнопку , чтобы добавить его.
+
Путь должен указывать на файл .framework, который будет сжат как .zip и помещен в папку iOSSourceFromMac в каталоге расширения; вы можете легко открыть его в любое время, щелкнув правой кнопкой мыши на расширении и выбрав Open in Explorer.
Добавить источник: Вы можете использовать этот пункт для добавления исходных файлов, необходимых для работы вашего расширения. Добавленные файлы будут храниться в папке iOSSource в каталоге вашего расширения.
При создании ресурса шрифта редко возникает необходимость включать все глифы шрифта. Именно поэтому GameMaker по умолчанию использует только символы с 32 по 127 выбранного шрифта, поскольку это дает нам цифры и
строчные и заглавные буквы, а также некоторые знаки препинания. Однако вы можете изменить используемый диапазон символов, чтобы оптимизировать ваши игры, например: если вам нужны только цифры из определенного шрифта, выберите только цифры. Для этого
сначала нажмите кнопку Удалить , чтобы очистить текущий диапазон (для этого может потребоваться выделить диапазон, щелкнув в окне предварительного просмотра), а затем нажмите кнопку Удалить , чтобы очистить текущий диапазон.
- а затем нажмите кнопку Добавить , чтобы добавить новый диапазон. В результате откроется следующее окно с цепочкой:
+ а затем нажмите кнопку Добавить , чтобы добавить новый диапазон. В результате откроется следующее окно с цепочкой:
В этом окне есть несколько кнопок, которые помогут вам установить стандартный диапазон для вашего шрифта:
-
- Обычный диапазон от 32 до 127
- - Диапазон ASCII от 0 до 255
- - Диапазон цифр , который содержит только 10 цифр
- - Диапазон букв , содержащий только заглавные и строчные буквы.
+
- Обычный диапазон от 32 до 127
+ - Диапазон ASCII от 0 до 255
+ - Диапазон цифр , который содержит только 10 цифр
+ - Диапазон букв , содержащий только заглавные и строчные буквы.
Другие диапазоны можно использовать, введя индекс первого и последнего символа диапазона, который вы хотите установить, в поля ввода диапазона символов (если символ не входит в диапазон, он заменяется пробелом). Помимо этих кнопок и полей ввода,
- у вас также есть две дополнительные опции, которые особенно полезны:
+ у вас также есть две дополнительные опции, которые особенно полезны:
Из кода: если вы нажмете на эту кнопку и затем нажмете OK, GameMaker автоматически разберет код вашей игры на наличие строк и затем создаст различные диапазоны символов, чтобы охватить весь текст в вашей игре. Обратите внимание, что при этом ищутся
- все строки (в пределах "" или '') и поэтому может также включать имена файлов в диапазоны символов.
+ все строки (в пределах "" или '') и поэтому может также включать имена файлов в диапазоны символов.
Из файла: работает аналогично опции "из кода", описанной выше. Если вы нажмете на нее, вам будет предложено указать файл, а затем, когда это будет сделано, вы должны нажать OK. После этого GameMaker разберет
файл и создаст диапазоны символов для содержащегося в нем текста.
Элементы управления холстом касаются различных аспектов отображения основного холста рисования и его содержимого. К ним относятся:
-
Toggle Canvas Grid : Это позволяет включить/выключить сетку холста. Это сетка, которую GameMaker рисует поверх основного холста, чтобы разделить его на секции, и по умолчанию она имеет размер 1px. Однако если вы щелкните на значке меню сетки , то откроются опции сетки:
+
Toggle Canvas Grid : Это позволяет включить/выключить сетку холста. Это сетка, которую GameMaker рисует поверх основного холста, чтобы разделить его на секции, и по умолчанию она имеет размер 1px. Однако если вы щелкните на значке меню сетки , то откроются опции сетки: Эти опции позволяют установить цвет и альфа-канал сетки, а также значения ячеек сетки по осям X и Y. Здесь также можно включить или отключить привязку сетки (по умолчанию отключена).
Управление масштабированием холста : Эти кнопки управляют текущим уровнем масштабирования холста. Вы можете увеличивать или уменьшать масштаб, а нажатие на кнопку вернет холст в положение 1:1 с редактируемым изображением. Вы также можете нажать кнопку Window Fit , чтобы весь холст изображения поместился в текущей рабочей области редактора (при этом масштаб будет увеличиваться/уменьшаться по мере необходимости, чтобы он поместился). Обратите внимание, что вы также можете увеличивать и уменьшать масштаб с помощью кнопок / и колеса мыши , а нажатие кнопок / + установит холст комнаты в соотношении 1:1 с изображением.
@@ -140,7 +140,7 @@
Редактор изображений
Текст
-
+
Это инструмент ввода текста. Он создает новый текстовый слой, на котором можно напечатать все, что вам нужно. Используемый шрифт, а также форматирование можно задать в верхней панели редактора изображений.
@@ -208,22 +208,22 @@
Редактор изображений
Добавить рамку - добавить новую рамку на сайт sprite.
Вставить кадр - вставка нового кадра после текущего кадра.
Удалить выбранные кадры - удалить выбранный кадр из sprite (для выбора нескольких кадров можно использовать / + и/или + ).
-
Импортировать изображение (изображения) - загрузить с диска изображение, которое будет использоваться в качестве рамки. Обратите внимание, что вы можете загрузить сразу несколько кадров, выбрав несколько отдельных файлов для импорта в окне проводника. После выбора файла или файлов откроется следующее окно Импорт:
+
Импортировать изображение (изображения) - загрузить с диска изображение, которое будет использоваться в качестве рамки. Обратите внимание, что вы можете загрузить сразу несколько кадров, выбрав несколько отдельных файлов для импорта в окне проводника. После выбора файла или файлов откроется следующее окно Импорт: Здесь вы можете выбрать способ добавления импортированного изображения к текущему sprite, что позволяет изменить размер всего холста, обрезать или наложить его, а также задать положение "якоря" для размещения нового изображения (изображений).
-
Преобразовать в кадры - Эта опция преобразует одно изображение в несколько отдельных кадров. Сначала необходимо создать один кадр со всеми частями анимации (или импортировать изображение с одной полосой), как показано ниже:
- Поскольку это одно изображение, и мы хотим преобразовать его в отдельные кадры, мы можем использовать эту опцию, которая откроет следующее окно:
+
Преобразовать в кадры - Эта опция преобразует одно изображение в несколько отдельных кадров. Сначала необходимо создать один кадр со всеми частями анимации (или импортировать изображение с одной полосой), как показано ниже:
+ Поскольку это одно изображение, и мы хотим преобразовать его в отдельные кадры, мы можем использовать эту опцию, которая откроет следующее окно: Здесь вы можете установить, как единое изображение должно быть разделено для создания кадров, задав количество кадров, ширину и высоту кадров и любые значения смещения.
Импорт изображения полосы - Эта опция откроет проводник файлов и предложит вам найти один файл изображения полосы, из которого будут созданы кадры. После выбора изображения откроется окно Импорт полосы, точно такое же, как и для опции Преобразовать в кадры, показанной выше.
Экспорт в PNG - При выборе этой опции sprite будет экспортирован как одно PNG изображение. Если sprite содержит более одного изображения, то будет создана "полоса" sprite со всеми изображениями, одно за другим, а к имени файла сохранения будет автоматически добавлено "_stripX", где "X" - количество экспортируемых кадров. Например, пять кадров sprite будут экспортированы как "sprite_name_strip5.png".
-
Изменить размер всех кадров - При выборе этой опции откроется следующее окно, в котором вы можете задать способ изменения размера всех кадров анимации, составляющих спрайт:
- Вы можете выбрать либо масштабирование изображения, либо изменение размера холста. Если вы выбираете масштабирование изображения, то просто выберите новую ширину и/или высоту для каждого кадра, нужно ли масштабировать с использованием того же соотношения сторон, а также в пикселях или процентах. Обратите внимание, что при масштабировании вы можете включить или выключить линейную интерполяцию, если она включена, то пиксели будут размываться или "размазываться" при масштабировании изображения (в общем, для искусства высокого разрешения это нужно включить, а для пиксельного искусства - выключить).
-
+
Изменить размер всех кадров - При выборе этой опции откроется следующее окно, в котором вы можете задать способ изменения размера всех кадров анимации, составляющих спрайт:
+ Вы можете выбрать либо масштабирование изображения, либо изменение размера холста. Если вы выбираете масштабирование изображения, то просто выберите новую ширину и/или высоту для каждого кадра, нужно ли масштабировать с использованием того же соотношения сторон, а также в пикселях или процентах. Обратите внимание, что при масштабировании вы можете включить или выключить линейную интерполяцию, если она включена, то пиксели будут размываться или "размазываться" при масштабировании изображения (в общем, для искусства высокого разрешения это нужно включить, а для пиксельного искусства - выключить).
+
Опция изменения размера холста не изменяет пиксели в изображении, а увеличивает или уменьшает размер холста, на котором рисуется изображение. С помощью значков со стрелками вы можете установить, где будет находиться "якорь" для изменения размера, затем задать новый размер (в пикселях или в процентах), а также задать, сохранять ли соотношение сторон исходных кадров. Обратите внимание, что при уменьшении размера кадра по сравнению с исходными изображениями sprite пиксели будут обрезаны.
Crop All Frames To Selection - эта опция доступна только в том случае, если на основном холсте рисования выделена область изображения. При выборе этой опции редактируемое изображение (и все остальные кадры анимации) будет обрезано по границам выделения.
-
Auto Trim All Frames - Эта опция позволяет обрезать все нулевые альфа-пиксели по краям sprite. При этом будут учитываться все кадры изображения в пределах sprite, поэтому каждая сторона будет обрезаться до края того кадра, который имеет самый дальний ненулевой альфа-пиксель.
+
Auto Trim All Frames - Эта опция позволяет обрезать все нулевые альфа-пиксели по краям sprite. При этом будут учитываться все кадры изображения в пределах sprite, поэтому каждая сторона будет обрезаться до края того кадра, который имеет самый дальний ненулевой альфа-пиксель.
Reverse Frames - выбор этого параметра просто изменит порядок кадров для sprite.
@@ -241,7 +241,7 @@
Редактор изображений
1:1 - масштабирование изображения до разрешения 1:1 (т.е. фактического размера) и центрирование его в окне редактирования изображения.
Fit Screen - масштабирование изображения для заполнения окна редактирования изображения.
Показать сетку - переключить пиксельную сетку. Это то же самое, что и кнопка сетки, расположенная в элементах управления холстом (описано далее на этой странице).
-
Настройки лукового скина - изменение настроек лукового скина. Откроется следующее окно, в котором можно задать рамки, отображаемые кнопкой скина лука, а также непрозрачность и цвет скинированных рамок.
+
Настройки лукового скина - изменение настроек лукового скина. Откроется следующее окно, в котором можно задать рамки, отображаемые кнопкой скина лука, а также непрозрачность и цвет скинированных рамок.
@@ -251,10 +251,10 @@
Редактор изображений
В меню "Эффекты" вы можете добавить свои собственные плагины эффектов, а по умолчанию в нем имеются следующие эффекты:
-
Размытие - применение эффекта размытия к изображению. Можно задать интенсивность, а также тип размытия (квадратное или гауссово) и установить, будет ли размытие только по горизонтальной или вертикальной оси или по обеим. Затем можно выбрать применение эффекта только к текущему слою, видимым слоям или ко всем слоям.
+
Размытие - применение эффекта размытия к изображению. Можно задать интенсивность, а также тип размытия (квадратное или гауссово) и установить, будет ли размытие только по горизонтальной или вертикальной оси или по обеим. Затем можно выбрать применение эффекта только к текущему слою, видимым слоям или ко всем слоям.
-
Обесцвечивание - обесцвечивание изображения на определенную величину. Можно выбрать применение только к текущему слою, видимым слоям или ко всем слоям.
+
Обесцвечивание - обесцвечивание изображения на определенную величину. Можно выбрать применение только к текущему слою, видимым слоям или ко всем слоям.
Это идентификационное значение, уникальное для выполняемого жеста. Это позволяет связать вместе различные части жестов, состоящих из нескольких частей (например, начало перетаскивания, перетаскивание и конец перетаскивания).
+
Это идентификационное значение, уникальное для выполняемого жеста. Это позволяет связать вместе различные части жестов, состоящих из нескольких частей (например, начало перетаскивания, перетаскивание и конец перетаскивания).
"touch"
-
Это индекс касания, который используется для жеста. В общем случае он начинается с 0 и увеличивается для каждого удерживаемого пальца, затем сбрасывается до 0, когда все пальцы убираются, но если пользователь касается экрана в другом месте, то значение будет больше 0.
+
Это индекс касания, который используется для жеста. В общем случае он начинается с 0 и увеличивается для каждого удерживаемого пальца, затем сбрасывается до 0, когда все пальцы убираются, но если пользователь касается экрана в другом месте, то значение будет больше 0.
где-либо еще, когда это событие будет вызвано другим прикосновением, то значение будет больше 0.
"posX"
-
Это положение X касания в пространстве комнаты.
+
Это положение X касания в пространстве комнаты.
"posY"
-
Это положение касания в пространстве Y в помещении.
+
Это положение касания в пространстве Y в помещении.
"rawposX"
-
Это необработанная позиция X касания в пространстве окна (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_x()).
+
Это необработанная позиция X касания в пространстве окна (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_x()).
"rawposY"
-
Это необработанная позиция по оси Y в пространстве окна (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_y()).
+
Это необработанная позиция по оси Y в пространстве окна (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_y()).
"guiposX"
-
Это положение касания в пространстве gui X (эквивалентно получению положения мыши с помощью функции device_mouse_x_to_gui()).
+
Это положение касания в пространстве gui X (эквивалентно получению положения мыши с помощью функции device_mouse_x_to_gui()).
"guiposY"
-
Это положение касания в пространстве gui по оси Y (эквивалентно получению положения мыши с помощью функции device_mouse_y_to_gui()).
+
Это положение касания в пространстве gui по оси Y (эквивалентно получению положения мыши с помощью функции device_mouse_y_to_gui()).
"diffX"
-
Это разница в пространстве X между положением текущего касания и положением последнего касания в этом жесте.
+
Это разница в пространстве X между положением текущего касания и положением последнего касания в этом жесте.
"diffY"
-
Это разница в пространстве Y между положением текущего касания и положением последнего касания в этом жесте.
+
Это разница в пространстве Y между положением текущего касания и положением последнего касания в этом жесте.
"rawdiffX"
-
Это необработанная разница X между положением текущего касания и положением последнего касания в этом жесте.
+
Это необработанная разница X между положением текущего касания и положением последнего касания в этом жесте.
"rawdiffY"
-
Это необработанная разница по Y между положением текущего касания и положением последнего касания в этом жесте.
+
Это необработанная разница по Y между положением текущего касания и положением последнего касания в этом жесте.
"guidiffX"
-
Это разница по оси X в пространстве gui между положением текущего касания и положением последнего касания в этом жесте.
+
Это разница по оси X в пространстве gui между положением текущего касания и положением последнего касания в этом жесте.
"guidiffY"
-
Это разница по оси Y в пространстве gui между положением текущего касания и положением последнего касания в этом жесте.
+
Это разница по оси Y в пространстве gui между положением текущего касания и положением последнего касания в этом жесте.
"viewstartposX"
-
Это начальная позиция комнаты X текущего жеста.
+
Это начальная позиция комнаты X текущего жеста.
"viewstartposY"
-
Это начальная позиция комнаты Y текущего жеста.
+
Это начальная позиция комнаты Y текущего жеста.
"rawstartposX"
-
Это необработанная начальная позиция X текущего жеста.
+
Это необработанная начальная позиция X текущего жеста.
"rawstartposY"
-
Это необработанная начальная позиция Y текущего жеста.
+
Это необработанная начальная позиция Y текущего жеста.
"guistartposX"
-
Это начальная позиция X в gui-space для текущего жеста.
+
Это начальная позиция X в gui-space для текущего жеста.
"guistartposY"
-
Это начальная позиция Y в пространстве gui текущего жеста.
+
Это начальная позиция Y в пространстве gui текущего жеста.
"isflick"
-
+
Доступно только в событии Drag End. Этот параметр устанавливается в 1, если конец перетаскивания определяется как щелчок. Это означает, что вам не нужно отдельное событие Flick, если вы все равно обрабатываете перетаскивание.
@@ -232,96 +232,96 @@
Шаговое мероприятие
"gesture"
-
Это идентификационное значение, уникальное для выполняемого жеста. Это позволяет связать вместе различные части жестов, состоящих из нескольких частей (например, начало перетаскивания, перетаскивание и конец перетаскивания).
+
Это идентификационное значение, уникальное для выполняемого жеста. Это позволяет связать вместе различные части жестов, состоящих из нескольких частей (например, начало перетаскивания, перетаскивание и конец перетаскивания).
"touch1"
-
Это индекс первого прикосновения, которое используется как часть жеста щипка. Обычно он равен 0, но если пользователь прикасается к экрану в другом месте, когда это событие вызвано другим прикосновением, то значение будет
+
Это индекс первого прикосновения, которое используется как часть жеста щипка. Обычно он равен 0, но если пользователь прикасается к экрану в другом месте, когда это событие вызвано другим прикосновением, то значение будет
больше 0.
"touch2"
-
Это индекс второго касания, которое используется как часть жеста щипка. Обычно он на 1 больше, чем значение для touch1, но может быть и другим, в зависимости от количества определяемых касаний в других местах.
+
Это индекс второго касания, которое используется как часть жеста щипка. Обычно он на 1 больше, чем значение для touch1, но может быть и другим, в зависимости от количества определяемых касаний в других местах.
"posX1"
-
Это положение X в пространстве комнаты для первого касания.
+
Это положение X в пространстве комнаты для первого касания.
"posY1"
-
Это положение по оси Y в пространстве помещения для первого касания.
+
Это положение по оси Y в пространстве помещения для первого касания.
"rawposX1"
-
Это необработанная позиция X в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_x()).
+
Это необработанная позиция X в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_x()).
"rawposY1"
-
Это необработанная позиция Y в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_y()).
+
Это необработанная позиция Y в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_y()).
"guiposX1"
-
Это позиция X в пространстве gui первого касания (эквивалентно получению позиции мыши с помощью функции device_mouse_x_to_gui()).
+
Это позиция X в пространстве gui первого касания (эквивалентно получению позиции мыши с помощью функции device_mouse_x_to_gui()).
"guiposY1"
-
Это позиция Y в пространстве gui второго касания (эквивалентно получению позиции мыши с помощью функции device_mouse_y_to_gui()).
+
Это позиция Y в пространстве gui второго касания (эквивалентно получению позиции мыши с помощью функции device_mouse_y_to_gui()).
"posX2"
-
Это положение X в пространстве комнаты для второго касания.
+
Это положение X в пространстве комнаты для второго касания.
"posY2"
-
Это положение по оси Y в пространстве помещения для второго касания.
+
Это положение по оси Y в пространстве помещения для второго касания.
"rawposX2"
-
Это необработанная позиция X в пространстве окна для первого касания.
+
Это необработанная позиция X в пространстве окна для первого касания.
"rawposY2"
-
Это необработанная позиция Y в пространстве окна для второго касания.
+
Это необработанная позиция Y в пространстве окна для второго касания.
"guiposX2"
-
Это позиция X gui-space второго касания.
+
Это позиция X gui-space второго касания.
"guiposY2"
-
Это положение по оси Y в пространстве gui второго касания.
+
Это положение по оси Y в пространстве gui второго касания.
"midpointX"
-
Положение X средней точки между двумя касаниями в пространстве комнаты.
+
Положение X средней точки между двумя касаниями в пространстве комнаты.
"midpointY"
-
Положение Y средней точки между двумя касаниями в пространстве комнаты.
+
Положение Y средней точки между двумя касаниями в пространстве комнаты.
"rawmidpointX"
-
Это необработанное положение X средней точки в пространстве окна.
+
Это необработанное положение X средней точки в пространстве окна.
"rawmidpointY"
-
Это необработанное положение Y средней точки в пространстве окна.
+
Это необработанное положение Y средней точки в пространстве окна.
"guimidpointX"
-
Это положение X средней точки в gui-space.
+
Это положение X средней точки в gui-space.
"guimidpointY"
-
Это положение Y средней точки в пространстве gui.
+
Это положение Y средней точки в пространстве gui.
"relativescale"
-
Это разница в масштабе по сравнению с последним событием в этом жесте (поэтому для событий Pinch In это значение всегда будет меньше 1.0, а для событий Pinch Out - больше 1.0).
+
Это разница в масштабе по сравнению с последним событием в этом жесте (поэтому для событий Pinch In это значение всегда будет меньше 1.0, а для событий Pinch Out - больше 1.0).
"absolutescale"
-
Это масштаб по сравнению с тем, где находились пальцы в момент начала жеста (так, если расстояние между пальцами уменьшилось вдвое, то этот показатель будет равен 0,5, а если расстояние удвоилось, то 2,0).
+
Это масштаб по сравнению с тем, где находились пальцы в момент начала жеста (так, если расстояние между пальцами уменьшилось вдвое, то этот показатель будет равен 0,5, а если расстояние удвоилось, то 2,0).
@@ -384,96 +384,96 @@
Событие, связанное с защемлением конца
"gesture"
-
Это идентификационное значение, уникальное для выполняемого жеста. Это позволяет связать вместе различные части жестов, состоящих из нескольких частей (например, начало перетаскивания, перетаскивание и конец перетаскивания).
+
Это идентификационное значение, уникальное для выполняемого жеста. Это позволяет связать вместе различные части жестов, состоящих из нескольких частей (например, начало перетаскивания, перетаскивание и конец перетаскивания).
"touch1"
-
Это индекс первого прикосновения, которое используется как часть жеста щипка. Обычно он равен 0, но если пользователь прикасается к экрану в другом месте, когда это событие вызвано другим прикосновением, то значение будет
+
Это индекс первого прикосновения, которое используется как часть жеста щипка. Обычно он равен 0, но если пользователь прикасается к экрану в другом месте, когда это событие вызвано другим прикосновением, то значение будет
больше 0.
"touch2"
-
Это индекс второго касания, которое используется как часть жеста щипка. Обычно он на 1 больше, чем значение для touch1, но может быть и другим, в зависимости от количества определяемых касаний в других местах.
+
Это индекс второго касания, которое используется как часть жеста щипка. Обычно он на 1 больше, чем значение для touch1, но может быть и другим, в зависимости от количества определяемых касаний в других местах.
"posX1"
-
Это положение X в пространстве комнаты для первого касания.
+
Это положение X в пространстве комнаты для первого касания.
"posY1"
-
Это положение по оси Y в пространстве помещения для первого касания.
+
Это положение по оси Y в пространстве помещения для первого касания.
"rawposX1"
-
Это необработанная позиция X в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_x()).
+
Это необработанная позиция X в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_x()).
"rawposY1"
-
Это необработанная позиция Y в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_y()).
+
Это необработанная позиция Y в пространстве окна при первом касании (эквивалентно получению позиции мыши с помощью функции device_mouse_raw_y()).
"guiposX1"
-
Это позиция X в пространстве gui первого касания (эквивалентно получению позиции мыши с помощью функции device_mouse_x_to_gui()).
+
Это позиция X в пространстве gui первого касания (эквивалентно получению позиции мыши с помощью функции device_mouse_x_to_gui()).
"guiposY1"
-
Это позиция Y в пространстве gui второго касания (эквивалентно получению позиции мыши с помощью функции device_mouse_y_to_gui()).
+
Это позиция Y в пространстве gui второго касания (эквивалентно получению позиции мыши с помощью функции device_mouse_y_to_gui()).
"posX2"
-
Это положение X в пространстве комнаты для второго касания.
+
Это положение X в пространстве комнаты для второго касания.
"posY2"
-
Это положение по оси Y в пространстве помещения для второго касания.
+
Это положение по оси Y в пространстве помещения для второго касания.
"rawposX2"
-
Это необработанная позиция X в пространстве окна для первого касания.
+
Это необработанная позиция X в пространстве окна для первого касания.
"rawposY2"
-
Это необработанная позиция Y в пространстве окна для второго касания.
+
Это необработанная позиция Y в пространстве окна для второго касания.
"guiposX2"
-
Это позиция X gui-space второго касания.
+
Это позиция X gui-space второго касания.
"guiposY2"
-
Это позиция Y в пространстве gui для второго касания.
+
Это позиция Y в пространстве gui для второго касания.
"pivotX"
-
Положение X точки поворота в пространстве помещения.
+
Положение X точки поворота в пространстве помещения.
"pivotY"
-
Положение Y точки вращения в пространстве помещения.
+
Положение Y точки вращения в пространстве помещения.
"rawpivotX"
-
Это необработанное положение X в пространстве окна точки поворота.
+
Это необработанное положение X в пространстве окна точки поворота.
"rawpivotY"
-
Это необработанное положение Y точки вращения в пространстве окна.
+
Это необработанное положение Y точки вращения в пространстве окна.
"guipivotX"
-
Это положение X точки поворота в пространстве gui.
+
Это положение X точки поворота в пространстве gui.
"guipivotY"
-
Это положение Y точки поворота в пространстве gui.
+
Это положение Y точки поворота в пространстве gui.
"relativeangle"
-
Это разница в повороте по сравнению с последним событием в этом жесте, измеряется в градусах
+
Это разница в повороте по сравнению с последним событием в этом жесте, измеряется в градусах
"absoluteangle"
-
Это разница в угле по сравнению с тем, где находились пальцы в момент начала жеста, измеряемая в градусах. Так, например, если с момента начала жеста пальцы повернулись на четверть окружности, то это значение будет равно 90°
+
Это разница в угле по сравнению с тем, где находились пальцы в момент начала жеста, измеряемая в градусах. Так, например, если с момента начала жеста пальцы повернулись на четверть окружности, то это значение будет равно 90°
или -90°, в зависимости от направления вращения.
Вещественное число: Вещественное число - это любое число, которое не является целым числом и может быть положительным или отрицательным. Так, 124.5, 45639.566546456, 0.9, -45.5 и т.д. являются примерами вещественных чисел. Все вещественные числа хранятся как 64-битные значения с плавающей запятой (двойки). Вещественные (и целочисленные) данные
имеют опцию для установки диапазона значений, доступ к которой можно получить, нажав кнопку Options:Когда вы отметите эту опцию, вы можете ввести начальное и конечное значение, и вместо фиксированного значения, отображаемого для переменной в окне Object Variables,
- у вас будет ползунок, который будет привязан к этим значениям:
+ у вас будет ползунок, который будет привязан к этим значениям:
Целое число: Целое число - это целое число, которое может быть положительным или отрицательным, например, 30004, 19, 0, -300. Обратите внимание, что вы можете
задать диапазон значений для выходного целого числа, как описано выше для вещественных чисел.
@@ -34,10 +34,10 @@
Объектные переменные
Выражение: Выражение - это математическая фраза, которая может содержать обычные числа, переменные, строки или функции GML, а также один или несколько операторов. Например, sqrt(85 * 6) + 5.5 - это выражение.
Ресурс: Ресурс - это просто любой из ресурсов, которые вы определили в Браузере активов. Выбрав этот тип ресурса, вы можете нажать кнопку Open Asset Explorer , чтобы открыть Asset Explorer и выбрать нужный вам ресурс.
Список: Выбор списочного типа ввода означает, что вы можете создать выбор значений (это могут быть строки, числа, выражения и т.д.), из которых вы можете выбрать одно или несколько для возврата переменной. Чтобы определить элементы, которые
- в списке, нужно сначала добавить их в Options (нажмите кнопку ):
- Вы сможете выбрать элемент в качестве значения по умолчанию для переменной в главном окне из выпадающего меню:
+ в списке, нужно сначала добавить их в Options (нажмите кнопку ):
+ Вы сможете выбрать элемент в качестве значения по умолчанию для переменной в главном окне из выпадающего меню: Обратите внимание, что если в List Options у вас установлен флажок Multi-select, то переменная станет массивом всех
- выбранных вариантов:
+ выбранных вариантов:
Цвет: Тип цвета предназначен для определения значения цвета, которое будет храниться в переменной. Вы можете ввести вещественное число (от 0 до 16777216, альфа-значение 255) или шестнадцатеричное значение (в формате $RRGGBBAA), или вы можете
можно дважды щелкнуть на образце цвета, чтобы открыть Colour Picker и задать цвет там.
Когда вы создаете экземпляр с включенной персистентностью в комнате, ему будет назначен слой или глубина (в зависимости от того, какую функцию вы использовали для создания экземпляра объекта). При смене комнаты, если в следующей комнате нет слоя с тем же именем или глубиной, что и назначенный, то для экземпляра будет создан новый слой, сохраняющийся между комнатами. Если при создании экземпляра вы присвоили слою имя, то новый слой также будет называться так же, как и исходный, а если вы присвоили экземпляру глубину, то новый слой будет называться "_layer_XXX", где "XXX" - шестнадцатеричное значение, используемое для присвоения слою уникального имени. Эти слои будут удалены из комнаты при завершении работы комнаты.
-
- Еще один момент, связанный со слоями и постоянными экземплярами: если при создании экземпляра вы назначили ему слой с именем, а в следующих комнатах есть другой слой с тем же именем, то сохраняемый экземпляр будет назначен слою с тем же именем, независимо от глубины слоя.
-
+
Когда вы создаете экземпляр с включенной персистентностью в комнате, ему будет назначен слой или глубина (в зависимости от того, какую функцию вы использовали для создания экземпляра объекта). При смене комнаты, если в следующей комнате нет слоя с тем же именем или глубиной, что и назначенный, то для экземпляра будет создан новый слой, сохраняющийся между комнатами. Если при создании экземпляра вы присвоили слою имя, то новый слой также будет называться так же, как и исходный, а если вы присвоили экземпляру глубину, то новый слой будет называться "_layer_XXX", где "XXX" - шестнадцатеричное значение, используемое для присвоения слою уникального имени. Эти слои будут удалены из комнаты при завершении работы комнаты.
+
+ Еще один момент, связанный со слоями и постоянными экземплярами: если при создании экземпляра вы назначили ему слой с именем, а в следующих комнатах есть другой слой с тем же именем, то сохраняемый экземпляр будет назначен слою с тем же именем, независимо от глубины слоя.
+
Наконец, если сохраняемый экземпляр перемещается в комнату со слоем на той же глубине, на которой он был создан, он не будет назначен этому слою, а вместо него будет создан новый слой на той же глубине (в соответствии с соглашением об именовании, описанным выше).
Как уже упоминалось, постоянный объект запускает событие Create только один раз, но в соответствующее время у него также будут срабатывать события Game Start, Game End, Room Start и Room End. Однако если вы перезапустите игру (например, с помощью функции game_restart() ), все постоянные объекты будут удалены и будут существовать только тогда, когда будут созданы игрой.
-
+
Как уже упоминалось, постоянный объект запускает событие Create только один раз, но в соответствующее время у него также будут срабатывать события Game Start, Game End, Room Start и Room End. Однако если вы перезапустите игру (например, с помощью функции game_restart() ), все постоянные объекты будут удалены и будут существовать только тогда, когда будут созданы игрой.
+
Также обратите внимание, что если вы деактивируете постоянный объект, он больше не будет переходить из одной комнаты в другую, если не будет повторно активирован до срабатывания события Room End. Повторная активация требует полного шага игры, поэтому использование события Room End для этого не работает, так как не дает игре полного шага для повторной активации объекта, поэтому необходимо помнить об этом при использовании деактивации вместе с постоянными объектами и планировать код соответствующим образом.
Как и всем ресурсам в GameMaker, вам следует дать своему новому пути уникальное имя, поскольку именно оно будет использоваться для его идентификации во всей создаваемой игре. Хорошей системой, которую используют многие, является префикс (или суффикс) ресурса
- для удобства распознавания в коде или действиях (например: path_Enemy_1 или PowerUp_path).
+ для удобства распознавания в коде или действиях (например: path_Enemy_1 или PowerUp_path).
После присвоения имени пути можно приступить к его определению, размещая точки в главном редакторе справа, при этом каждая точка добавляется в список вместе с ее положением и скоростью. Значение скорости для точек пути определяется в процентах
от скорости, с которой объект движется по пути (по умолчанию 100%). Таким образом, если запустить объект со скоростью 2 (2 пикселя за шаг) вдоль пути, а затем для одной из точек пути установить значение скорости 50%, то объект будет снижать скорость
по мере приближения к этой точке до скорости 1 (50% от скорости пути). В равной степени можно установить скорость 150%, и экземпляр будет ускоряться по мере приближения к этой точке. Таким образом, вы можете создать красивое динамичное движение без какого-либо кода
без какого-либо кода.
Стоит отметить, что вы можете быстро дважды щелкнуть на любой из определенных точек в списке, чтобы переместить редактор в выбранную точку.
- или медленно дважды щелкнуть на одном из значений, чтобы отредактировать его вручную (x, y или скорость).
+ или медленно дважды щелкнуть на одном из значений, чтобы отредактировать его вручную (x, y или скорость).
Вы также можете указать вид соединения для всего пути и то, должен ли путь быть замкнутым или нет (замкнутый путь соединяет последнюю точку пути с первой). Вид соединения может быть либо прямым, либо гладким , где
прямолинейное соединение просто соединяет точки пути линейно, с изменением угла в каждой точке, в то время как плавное соединение создаст более мягкий путь, который может не проходить прямо через любую из точек, а скорее будет проходить по
приблизительную линию, создавая красивые кривые с помощью плавной интерполяции. Вы также можете указать точность для кривых (по умолчанию 4), которая может быть от 1 до 8, причем 8 - самая
@@ -54,7 +54,7 @@
Кнопки панели инструментов в верхней части окна редактора позволяют управлять процессом рисования. Вы можете включить или выключить фоновую сетку, а также настроить добавление точек контура с привязкой к этой сетке или без нее:
+
Кнопки панели инструментов в верхней части окна редактора позволяют управлять процессом рисования. Вы можете включить или выключить фоновую сетку, а также настроить добавление точек контура с привязкой к этой сетке или без нее:
Значения привязки указывают на размер ячеек сетки
и его можно изменить на любое необходимое значение. Остальные инструменты предназначены для увеличения или уменьшения масштаба и панорамирования области редактора, и вы можете нажать кнопку , чтобы восстановить соотношение 1:1 с дисплеем. Обратите внимание, что если вы панорамируете слишком далеко от места, где вы хотите нарисовать контур, вы можете использовать меню правой кнопки мыши, а затем выбрать Pan to Path для прокрутки назад к месту, где вы работали.
Позволяет применять цветокоррекцию LUT, используя текстуру в качестве таблицы поиска (LUT).
-
+
Позволяет применять цветокоррекцию LUT, используя текстуру в качестве таблицы поиска (LUT).
+
Вы можете найти (хех) LUT-текстуры в Интернете, чтобы использовать их в своей игре.
Создает эффект раздуваемых ветром частиц, по умолчанию показывая лист sprite.
-
+
Создает эффект раздуваемых ветром частиц, по умолчанию показывая лист sprite.
+
Это эффект, и его нельзя предварительно просмотреть в редакторе комнат.
-
Спрайт
- Количество частиц
- Время появления
- Вырождение всех частиц в начале
- Рамки разминки
- Масса частиц Мин
- Масса частицы Макс
- Частица sprite шкала (Начало)
- Частица sprite масштаб (конец)
- Цвет частицы 1
- Цвет частиц 1 Alt
- Цвет частиц 2
- Цвет частиц 2 Alt
- Цвет частиц 2 Pos
- Цвет частиц 2 Включено
- Цвет частиц 3
- Цвет частиц 3 Alt
- Цвет частиц 3 Pos
- Цвет частиц 3 Включено
- Цвет частиц 4
- Цвет частиц 4 Alt
- Начальная скорость частицы x Min
- Начальная скорость частицы x Max
- Начальная скорость частицы y Min
- Начальная скорость частицы y Макс
- Начальное вращение частицы Min
- Начальное вращение частицы Макс
- Скорость вращения частицы Мин
- Скорость вращения частицы Макс
- Выравнивание частиц по скорости
- Время жизни частицы Мин
- Время жизни частицы Макс
- Пропуск обновления частиц
- Граница порождения частиц
- Наложение источника частиц
- Наложение частиц на частицы
- Рисовать только следы
- Шанс появления следов
- Время жизни тропы мин
- Время жизни следа Макс
- Толщина следа Мин
- Толщина следа Макс
- Цвет следа 1
- Цвет следа 1 Alt
- Цвет тропы 2
- Цвет тропы 2 Alt
- Цвет тропы 2 Pos
- Цвет следа 2 Включено
- Цвет дорожки 3
- Цвет следа 3 Alt
- Цвет тропы 3 Pos
- Цвет дорожки 3 Включено
- Цвет следа 4
- Цвет дорожки 4 Alt
- Длина минимального сегмента тропы
- Исходная смесь для тропы
- Смесь, используемая в качестве исходной смеси
- Количество воздуходувок
- Размер воздуходувки Мин
- Размер воздуходувки Макс
- Скорость воздуходувки Мин
- Скорость воздуходувки Макс
- Скорость вращения воздуходувки Мин
- Скорость вращения воздуходувки Макс
- Усилие воздуходувки Мин
- Усилие воздуходувки Макс
- Шкала смещения камеры воздуходувки
- Разрешение сетки сил X
- Разрешение силовой сетки Y
- Сила ветра X
- Сила ветра Y
- Сила сопротивления частиц
- Гравитация
+
Спрайт
+ Количество частиц
+ Время появления
+ Вырождение всех частиц в начале
+ Рамки разминки
+ Масса частиц Мин
+ Масса частицы Макс
+ Частица sprite шкала (Начало)
+ Частица sprite масштаб (конец)
+ Цвет частицы 1
+ Цвет частиц 1 Alt
+ Цвет частиц 2
+ Цвет частиц 2 Alt
+ Цвет частиц 2 Pos
+ Цвет частиц 2 Включено
+ Цвет частиц 3
+ Цвет частиц 3 Alt
+ Цвет частиц 3 Pos
+ Цвет частиц 3 Включено
+ Цвет частиц 4
+ Цвет частиц 4 Alt
+ Начальная скорость частицы x Min
+ Начальная скорость частицы x Max
+ Начальная скорость частицы y Min
+ Начальная скорость частицы y Макс
+ Начальное вращение частицы Min
+ Начальное вращение частицы Макс
+ Скорость вращения частицы Мин
+ Скорость вращения частицы Макс
+ Выравнивание частиц по скорости
+ Время жизни частицы Мин
+ Время жизни частицы Макс
+ Пропуск обновления частиц
+ Граница порождения частиц
+ Наложение источника частиц
+ Наложение частиц на частицы
+ Рисовать только следы
+ Шанс появления следов
+ Время жизни тропы мин
+ Время жизни следа Макс
+ Толщина следа Мин
+ Толщина следа Макс
+ Цвет следа 1
+ Цвет следа 1 Alt
+ Цвет тропы 2
+ Цвет тропы 2 Alt
+ Цвет тропы 2 Pos
+ Цвет следа 2 Включено
+ Цвет дорожки 3
+ Цвет следа 3 Alt
+ Цвет тропы 3 Pos
+ Цвет дорожки 3 Включено
+ Цвет следа 4
+ Цвет дорожки 4 Alt
+ Длина минимального сегмента тропы
+ Исходная смесь для тропы
+ Смесь, используемая в качестве исходной смеси
+ Количество воздуходувок
+ Размер воздуходувки Мин
+ Размер воздуходувки Макс
+ Скорость воздуходувки Мин
+ Скорость воздуходувки Макс
+ Скорость вращения воздуходувки Мин
+ Скорость вращения воздуходувки Макс
+ Усилие воздуходувки Мин
+ Усилие воздуходувки Макс
+ Шкала смещения камеры воздуходувки
+ Разрешение сетки сил X
+ Разрешение силовой сетки Y
+ Сила ветра X
+ Сила ветра Y
+ Сила сопротивления частиц
+ Гравитация
Включить режим отладки
Просмотр слоев: Это позволит снова открыть окно редактора слоев, если вы закрыли его в любое время.
Свойства помещения: Это позволит снова открыть окно "Свойства помещения", если вы закрыли его в любое время.
Свойства слоя: Это позволит снова открыть окно свойств слоя, если вы закрыли его в любое время.
-
Instance Creation Order: Откроется окно Порядок создания экземпляров (которое также можно открыть с помощью кнопки в окне Свойства помещения):
+
Instance Creation Order: Откроется окно Порядок создания экземпляров (которое также можно открыть с помощью кнопки в окне Свойства помещения): В этом окне перечислены все экземпляры в комнате в том порядке, в котором они будут созданы (сверху вниз). Если вам нужно, чтобы определенный экземпляр был создан раньше других, вы можете просто щелкнуть и перетащить его в нужное вам положение.
Сбросить Windows на текущем рабочем столе: Это сбросит расположение окон редактора помещений к значениям по умолчанию для рабочего пространства, на котором в данный момент сфокусирован рабочий стол.
-
Редактирование плитки: При работе со слоем плитки эта опция будет выделена в выпадающем меню. Она имеет следующее подменю:
+
Редактирование плитки: При работе со слоем плитки эта опция будет выделена в выпадающем меню. Она имеет следующее подменю: При редактировании слоя плитки вы можете выбрать несколько плиток, нажав, удерживая и перетаскивая левую кнопку мыши , или выбрать и сгруппировать отдельные плитки с помощью / + , или удалить отдельные плитки из выделения с помощью + . Из этого меню можно очистить выделение или инвертировать его, а также вырезать, скопировать или вставить выделение в другой слой (или даже в тот же слой, но в другой позиции). Последняя опция вновь откроет пристыкованное окно редактора набора плиток, если вы его закрыли.
-
Конвертировать изображение в карту плиток: Опция Convert Image To Tile Map - это мощный инструмент, который можно использовать для импорта одного изображения, а затем извлечь из него используемые плитки и воссоздать их как слой карты плиток в редакторе помещений, создав в процессе необходимый набор плиток и sprite. При выборе этого инструмента вам будет предложено предоставить файл несжатого изображения (PNG, GIF или BMP), который затем будет загружен. После загрузки откроется инструмент Импорт изображения:
- Здесь вы можете выбрать способ разделения плитки при создании набора плиток, задать ширину и высоту ячеек, а также необходимые смещения по краям. Вы также можете задать приблизительную ширину (в пикселях) для конечного создаваемого sprite. Например, если набор плиток состоит из ячеек 64x64 и вы зададите здесь ширину 200, то конечный sprite, созданный для использования в наборе плиток, будет иметь ширину 192 пикселя (т.е. 3 ячейки). Если оставить значение по умолчанию 0, то GameMaker попытается создать как можно более "квадратный" sprite с примерно одинаковым количеством ячеек по горизонтали и вертикали.
-
- После установки способа разделения изображения, щелкнув по образцу рядом с опцией " Удалить цвет ", вы откроете окно выбора цвета и сможете выбрать цвет, который будет удален из конечного изображения sprite. Обычно это фоновый цвет, который необходимо удалить, и установка этого образца на любое значение, отличное от 100% прозрачности (альфа 0), приведет к удалению выбранного цвета при импорте.
-
- Наконец, у вас есть возможность дать имя слою sprite, набору плиток и карте плиток, которые будут созданы для вас этим инструментом. При завершении импорта будет создан sprite со всеми изображениями, расположенными в виде сетки, а также набор плиток из этого sprite. В помещении будет создан новый слой карты плиток и воспроизведено изображение с использованием созданного набора плиток. Обратите внимание, что инструмент не дублирует плитки, а распознает, когда ячейка с данными изображения совпадает с другой ячейкой (сюда входят повернутые плитки). Это видно на следующем изображении, где была создана только одна плитка цветка и одна плитка ящика, однако на базовом изображении есть несколько экземпляров обоих, причем некоторые экземпляры повернуты:
+
Конвертировать изображение в карту плиток: Опция Convert Image To Tile Map - это мощный инструмент, который можно использовать для импорта одного изображения, а затем извлечь из него используемые плитки и воссоздать их как слой карты плиток в редакторе помещений, создав в процессе необходимый набор плиток и sprite. При выборе этого инструмента вам будет предложено предоставить файл несжатого изображения (PNG, GIF или BMP), который затем будет загружен. После загрузки откроется инструмент Импорт изображения:
+ Здесь вы можете выбрать способ разделения плитки при создании набора плиток, задать ширину и высоту ячеек, а также необходимые смещения по краям. Вы также можете задать приблизительную ширину (в пикселях) для конечного создаваемого sprite. Например, если набор плиток состоит из ячеек 64x64 и вы зададите здесь ширину 200, то конечный sprite, созданный для использования в наборе плиток, будет иметь ширину 192 пикселя (т.е. 3 ячейки). Если оставить значение по умолчанию 0, то GameMaker попытается создать как можно более "квадратный" sprite с примерно одинаковым количеством ячеек по горизонтали и вертикали.
+
+ После установки способа разделения изображения, щелкнув по образцу рядом с опцией " Удалить цвет ", вы откроете окно выбора цвета и сможете выбрать цвет, который будет удален из конечного изображения sprite. Обычно это фоновый цвет, который необходимо удалить, и установка этого образца на любое значение, отличное от 100% прозрачности (альфа 0), приведет к удалению выбранного цвета при импорте.
+
+ Наконец, у вас есть возможность дать имя слою sprite, набору плиток и карте плиток, которые будут созданы для вас этим инструментом. При завершении импорта будет создан sprite со всеми изображениями, расположенными в виде сетки, а также набор плиток из этого sprite. В помещении будет создан новый слой карты плиток и воспроизведено изображение с использованием созданного набора плиток. Обратите внимание, что инструмент не дублирует плитки, а распознает, когда ячейка с данными изображения совпадает с другой ячейкой (сюда входят повернутые плитки). Это видно на следующем изображении, где была создана только одна плитка цветка и одна плитка ящика, однако на базовом изображении есть несколько экземпляров обоих, причем некоторые экземпляры повернуты:
Существует два способа создания текстовой дорожки. Выбрав инструмент " Текст" на панели инструментов, вы можете:
-
Щелкните один раз на холсте: Это создаст "развернутую" текстовую дорожку. Это означает, что текст может быть сколь угодно длинным, и он останется на одной линии. Обертывание можно легко включить позже в Инспекторе.
+
Щелкните один раз на холсте: Это создаст "развернутую" текстовую дорожку. Это означает, что текст может быть сколь угодно длинным, и он останется на одной линии. Обертывание можно легко включить позже в Инспекторе.
Щелкните и перетащите в холсте: Это создает "обернутую" текстовую дорожку, то есть текст отображается только внутри рамки. Размер этой рамки задается перетаскиванием при создании текстовой дорожки. Его размер также можно изменить позже с помощью дорожек параметров или Инспектора. Рекомендуется использовать обернутые текстовые дорожки, так как это значительно облегчает выравнивание текста и позволяет добиться стабильных результатов при анимации.
@@ -37,9 +37,9 @@
Изменение текста
Когда вы создаете новую текстовую дорожку, GameMaker открывает Инспектор и автоматически выбирает поле Текст, позволяя вам начать писать текст.
Чтобы изменить текст для дорожки в любое время, просто выберите эту дорожку, перейдите в Инспектор и снова измените поле Текст.
Поведение при изменении размера
-
Изменение размера текстовой дорожки на холсте будет работать по-разному в зависимости от того, обернута или не обернута текстовая дорожка.
-
- Если текстовая дорожка развернута, она будет масштабироваться аналогично тому, как масштабируются sprites и объекты. Однако при изменении размера обернутой текстовой дорожки изменяется размер ее рамки, а не значения масштаба.
+
Изменение размера текстовой дорожки на холсте будет работать по-разному в зависимости от того, обернута или не обернута текстовая дорожка.
+
+ Если текстовая дорожка развернута, она будет масштабироваться аналогично тому, как масштабируются sprites и объекты. Однако при изменении размера обернутой текстовой дорожки изменяется размер ее рамки, а не значения масштаба. Чтобы изменить масштаб обернутой текстовой дорожки, используйте Gizmos или отредактируйте значения параметра Scale вручную.
Шрифтовые активы
@@ -49,13 +49,13 @@
Параметры
Вы можете изменять и анимировать все обычные параметры, предусмотренные для дорожки sprite, такие как позиция, вращение, масштаб, происхождение и умножение цвета. С помощью этих параметров вы можете перемещать и вращать текст, делать его больше или меньше, изменять его цвет и альфа-фактор.
Также предусмотрены некоторые специфические для текста параметры, которые также могут быть анимированы:
-
Расстояние между символами: Это расстояние между каждым символом (в пикселях).
+
Расстояние между символами: Это расстояние между каждым символом (в пикселях).
-
Межстрочный интервал: Это расстояние между каждой строкой текста (в пикселях).
+
Межстрочный интервал: Это расстояние между каждой строкой текста (в пикселях).
-
Масштабирование абзацев: Это пространство между каждым абзацем текста (в пикселях). Новый абзац начинается, когда вы добавляете разрыв строки вручную, нажав .
+
Масштабирование абзацев: Это пространство между каждым абзацем текста (в пикселях). Новый абзац начинается, когда вы добавляете разрыв строки вручную, нажав .
Размер рамки: Это размер рамки текста, который используется только в том случае, если в инспекторе включена функция Wrap (подробнее см. раздел ниже).
После добавления необходимых активов их можно поместить в исходные позиции для анимации, а также трансформировать с помощью различных элементов управления трансформацией. Доступ к ним осуществляется двумя различными способами:
-
Подведите мышь к краям актива на холсте, нажмите и перетащите (обратите внимание, что курсор будет меняться, чтобы показать различные трансформации, которые будут изменены):
+
Подведите мышь к краям актива на холсте, нажмите и перетащите (обратите внимание, что курсор будет меняться, чтобы показать различные трансформации, которые будут изменены):
-
С помощью гизмо трансформации в начале координат актива, которое можно изменить на панели инструментов холста:
+
С помощью гизмо трансформации в начале координат актива, которое можно изменить на панели инструментов холста:
Кнопки управления ключевыми кадрами - это один из способов добавления, удаления или редактирования определенных ключей в допинг-листе. Кнопки выглядят следующим образом:
-
- Это кнопка "Разделить выбранные клавиши". Когда вы выбрали одну или несколько клавиш параметров на листе допинга, вы можете нажать эту кнопку, и они будут разделены на две отдельные клавиши в позиции головки воспроизведения временной шкалы:
+
- Это кнопка "Разделить выбранные клавиши". Когда вы выбрали одну или несколько клавиш параметров на листе допинга, вы можете нажать эту кнопку, и они будут разделены на две отдельные клавиши в позиции головки воспроизведения временной шкалы:
-
- Это кнопка "Удалить выбранные ключи". Когда вы выбрали один или несколько ключей параметров в доп. листе, вы можете нажать эту кнопку, и они будут удалены:
+
- Это кнопка "Удалить выбранные ключи". Когда вы выбрали один или несколько ключей параметров в доп. листе, вы можете нажать эту кнопку, и они будут удалены:
-
- Это кнопка "Записать новый ключ". Когда вы выбрали ключ актива в доп. листе и нажали эту кнопку, новые ключи параметров будут добавлены к дорожке актива как дорожки параметров, а ключи параметров будут добавлены как точки на временной шкале доп. листа в позиции playhead:
+
- Это кнопка "Записать новый ключ". Когда вы выбрали ключ актива в доп. листе и нажали эту кнопку, новые ключи параметров будут добавлены к дорожке актива как дорожки параметров, а ключи параметров будут добавлены как точки на временной шкале доп. листа в позиции playhead:
-
- Это кнопка "Автоматически записывать изменения". Когда эта кнопка включена, любые изменения, внесенные в актив на холсте, будут автоматически записываться, а соответствующие дорожки параметров и ключи параметров будут добавлены в позицию головки воспроизведения на доп-листе. Например, если вы переместите головку воспроизведения с кадра 0 на кадр 10, а затем на холсте переместите актив на 100 пикселей вправо, будет добавлена дорожка параметров для позиции, а ключи параметров будут добавлены на кадре 0 (начальная позиция) и на кадре 10 (позиция головки воспроизведения), и когда вы нажмете кнопку "Play" в последовательности, актив переместится на 100 пикселей вправо на десять кадров.
+
- Это кнопка "Автоматически записывать изменения". Когда эта кнопка включена, любые изменения, внесенные в актив на холсте, будут автоматически записываться, а соответствующие дорожки параметров и ключи параметров будут добавлены в позицию головки воспроизведения на доп-листе. Например, если вы переместите головку воспроизведения с кадра 0 на кадр 10, а затем на холсте переместите актив на 100 пикселей вправо, будет добавлена дорожка параметров для позиции, а ключи параметров будут добавлены на кадре 0 (начальная позиция) и на кадре 10 (позиция головки воспроизведения), и когда вы нажмете кнопку "Play" в последовательности, актив переместится на 100 пикселей вправо на десять кадров.
Ключи параметров - это "точки", отображаемые на дорожке параметров там, где произошло изменение этого параметра. Эти точки можно перемещать по мере необходимости и расширять, чтобы они длились более одного кадра (как объясняется далее на этой странице), и
их значение можно изменить либо на панели треков, либо путем изменения актива на холсте (если это параметр масштаба, положения или вращения). Обратите внимание, что все параметры трека
- будут также отражены в виде точки на ключевой дорожке актива , к которой принадлежит параметр, но эти точки нельзя редактировать, они используются в качестве информационной помощи, когда вы сворачиваете различные дорожки параметров на панели дорожек.
+ будут также отражены в виде точки на ключевой дорожке актива , к которой принадлежит параметр, но эти точки нельзя редактировать, они используются в качестве информационной помощи, когда вы сворачиваете различные дорожки параметров на панели дорожек.
Кнопки управления ключевыми кадрами - это один из способов добавления, удаления или редактирования определенных ключей в допинг-листе. Кнопки выглядят следующим образом:
- Это кнопка "Разделить выбранные ключи". Когда вы выбрали одну или несколько клавиш параметров на доп. листе, вы можете нажать эту кнопку, и они будут
- будут разделены на две отдельные клавиши в позиции головки воспроизведения временной шкалы (обратите внимание, что сначала клавиши должны быть растянуты, чтобы занять несколько кадров):
+ будут разделены на две отдельные клавиши в позиции головки воспроизведения временной шкалы (обратите внимание, что сначала клавиши должны быть растянуты, чтобы занять несколько кадров):
- Это кнопка "Удалить выбранные ключи". Когда вы выбрали один или несколько ключей параметров в доп. листе, вы можете нажать эту кнопку, и они будут
- будут удалены:
+ будут удалены:
- Это кнопка "Записать новый ключ". Когда вы выбрали ключ актива в доп. листе и нажали эту кнопку, новые ключи параметров будут добавлены к треку актива как дорожки параметров, а ключи параметров будут добавлены как точки на временной шкале доп. листа.
- трек как дорожки параметров, а ключи параметров будут добавлены как точки на временной шкале dope sheet в позиции playhead:
+ трек как дорожки параметров, а ключи параметров будут добавлены как точки на временной шкале dope sheet в позиции playhead:
- Это кнопка "Автоматически записывать изменения". Если эта кнопка включена, любые изменения, внесенные в актив в пределах холста, будут автоматически записаны и
соответствующие дорожки параметров и ключи параметров будут добавлены в позиции головки воспроизведения на доп. листе. Например, если переместить головку воспроизведения с кадра 0 на кадр 10, а затем на холсте переместить актив на 100 пикселей вправо, дорожка параметров
- будет добавлена для позиции, а ключи параметров будут добавлены в кадре 0 (начальная позиция) и в кадре 10 (позиция головки воспроизведения), и когда вы нажмете кнопку "Play" в последовательности, актив переместится на 100px вправо в течение десяти кадров.
+ будет добавлена для позиции, а ключи параметров будут добавлены в кадре 0 (начальная позиция) и в кадре 10 (позиция головки воспроизведения), и когда вы нажмете кнопку "Play" в последовательности, актив переместится на 100px вправо в течение десяти кадров.
@@ -124,19 +124,19 @@
Редактор последовательностей
Панель инструментов редактора последовательностей содержит различные опции визуализации и настройки для редактируемой последовательности.
-
Добавить текстовую дорожку: Это позволяет добавить текстовую дорожку в холст последовательности. После выбора этой опции вы можете щелкнуть (и, по желанию, перетащить) в любом месте холста, чтобы создать новую текстовую дорожку.
-
+
Добавить текстовую дорожку: Это позволяет добавить текстовую дорожку в холст последовательности. После выбора этой опции вы можете щелкнуть (и, по желанию, перетащить) в любом месте холста, чтобы создать новую текстовую дорожку.
+
Для получения подробной информации о текстовых дорожках читайте Текст в последовательностях.
-
Toggle Canvas Grid: Это позволяет включить/выключить сетку холста редактора последовательностей. Это сетка, которую GameMaker рисует на холсте предварительного просмотра, чтобы разделить его на секции, и по умолчанию она имеет размер 32x32px. Если вы щелкните на значке меню сетки , вы увидите опции сетки:
+
Toggle Canvas Grid: Это позволяет включить/выключить сетку холста редактора последовательностей. Это сетка, которую GameMaker рисует на холсте предварительного просмотра, чтобы разделить его на секции, и по умолчанию она имеет размер 32x32px. Если вы щелкните на значке меню сетки , вы увидите опции сетки: Эти опции позволяют установить цвет и альфа-канал сетки, а также значения ячеек сетки по осям X и Y. Здесь также можно включить или отключить привязку сетки (по умолчанию отключена). Для переключения видимости сетки и ее привязки можно использовать комбинации клавиш "G" и + "G" соответственно.
Управление масштабом холста: Эти кнопки управляют текущим уровнем масштабирования холста. Вы можете увеличивать или уменьшать масштаб, а нажатие на кнопку вернет холст в положение 1:1 с редактируемой последовательностью. Вы также можете нажать кнопку Window Fit , чтобы весь холст последовательности поместился в текущее рабочее пространство редактора (при этом масштаб будет увеличиваться/уменьшаться по мере необходимости, чтобы он поместился). Обратите внимание, что вы также можете увеличивать и уменьшать масштаб с помощью кнопок / и колеса мыши , а нажатие / + установит холст в соотношении 1:1 с дисплеем.
Toggle Gizmos: Нажав на эту кнопку, можно включить или выключить различные штуковины, видимые на холсте. При включении вы увидите все гизмо, связанные с различными активами и самим холстом, а при выключении они не будут отображаться, давая более четкое представление о том, как выглядит последовательность. Обратите внимание, что эта функция включена по умолчанию, и есть меню, доступное через кнопку опций , где вы можете отфильтровать то, что видно, без необходимости отключать все различные виджеты вместе. Полный список этих опций фильтрации и объяснение того, что они делают, можно найти здесь.
-
Переключить режим гизмо трансформации: Каждый актив, добавленный в последовательность, имеет гизмо трансформации в начале координат:
+
Переключить режим гизмо трансформации: Каждый актив, добавленный в последовательность, имеет гизмо трансформации в начале координат: Этот гизмо может управлять масштабированием или поворотом актива, а также контролировать его положение и положение начала актива, однако одновременно он показывает только одну из этих опций. Нажав на эту кнопку, вы сможете переключаться между различными типами виджетов, или вы можете нажать на меню опций , чтобы напрямую выбрать тип управляющего действия, которое вы хотите, чтобы выполнял гизмо трансформации.
-
Toggle Canvas Frame: Эта кнопка используется для включения или выключения рамки холста (по умолчанию она включена). Рамка холста - это просто направляющая, которая используется для определения места размещения элементов в последовательности холста, и любые элементы за пределами рамки не будут отображаться. Эта кнопка также имеет следующее меню опций :
+
Toggle Canvas Frame: Эта кнопка используется для включения или выключения рамки холста (по умолчанию она включена). Рамка холста - это просто направляющая, которая используется для определения места размещения элементов в последовательности холста, и любые элементы за пределами рамки не будут отображаться. Эта кнопка также имеет следующее меню опций : Здесь вы можете установить переключатель рамки холста, а также размер холста. У вас также есть возможность установить опорное изображение- это изображение, которое вы выбираете с вашего компьютера (оно не импортируется в проект), чтобы использовать его в качестве фоновой ссылки для последовательности. Это изображение видно только в редакторе последовательностей и не будет отображаться при использовании последовательности в проекте. При добавлении опорного изображения можно также установить непрозрачность, с которой оно будет нарисовано, и сместить его положение в рамке холста.
@@ -191,35 +191,35 @@
Редактор последовательностей
Раздельное окно
При этой опции редактор последовательностей будет разделен на два отдельных окна, где главное окно IDE будет показывать вид холста на полном рабочем столе, а новое окно будет показывать Dope Sheet и редактор дорожек. Повторное нажатие кнопки
- снова изменит расположение и уберет дополнительное окно.
+ снова изменит расположение и уберет дополнительное окно.
Защелкивающийся верх
-
Этот параметр привязывает редактор дорожек и доп. лист к верхней части сайта IDE.
+
Этот параметр привязывает редактор дорожек и доп. лист к верхней части сайта IDE.
Snap Right
-
Этот параметр привязывает редактор дорожек и доп. лист справа от IDE.
+
Этот параметр привязывает редактор дорожек и доп. лист справа от IDE.
Защелка нижняя
-
Эта опция привязывает редактор дорожек и доп. лист к нижней части IDE (это вид по умолчанию).
+
Эта опция привязывает редактор дорожек и доп. лист к нижней части IDE (это вид по умолчанию).
Защелка левая
-
Этот параметр привязывает редактор дорожек и доп. лист слева от IDE.
+
Этот параметр привязывает редактор дорожек и доп. лист слева от IDE.
Здесь вы можете установить громкость воспроизведения для данного звука. Это значение - просто значение по умолчанию, где если ползунок находится посередине - например, - то громкость для этого звука при использовании в игре будет 0,5. Однако это значение будет отменено
- любым изменением усиления с помощью аудиофункций в вашем проекте.
-
Помимо регуляторов громкости у вас также есть регуляторы воспроизведения, где вы можете предварительно просмотреть звук, установить его на цикл или перемотку. Вы также можете нажать на значок , чтобы открыть звук в микшере.
+ любым изменением усиления с помощью аудиофункций в вашем проекте.
+
Помимо регуляторов громкости у вас также есть регуляторы воспроизведения, где вы можете предварительно просмотреть звук, установить его на цикл или перемотку. Вы также можете нажать на значок , чтобы открыть звук в микшере.
Окно предварительного просмотра Nine Slice позволяет изменить размер изображения и показывает, как будет выглядеть конечное изображение после его масштабирования с помощью техники Nine Slice. Этот предварительный просмотр sprite можно также поворачивать.
Раздел " Девять ломтиков " имеет следующие опции:
-
Активировать девятикратную нарезку: Этот параметр определяет, будет ли использоваться масштабирование Nine Slice при масштабировании sprite. Если опция включена, масштабирование Nine Slice будет использоваться для sprite (и любых экземпляров объектов, использующих этот sprite), размещенных в последовательности или слое комнаты, и масштабированных sprites, нарисованных с помощью draw_sprite_ext() и других подобных функций.
-
+
Активировать девятикратную нарезку: Этот параметр определяет, будет ли использоваться масштабирование Nine Slice при масштабировании sprite. Если опция включена, масштабирование Nine Slice будет использоваться для sprite (и любых экземпляров объектов, использующих этот sprite), размещенных в последовательности или слое комнаты, и масштабированных sprites, нарисованных с помощью draw_sprite_ext() и других подобных функций.
+ ПРИМЕЧАНИЕ: Девятикратная нарезка не будет работать с функциями, которые рисуют только часть sprite или искажают ее, например, draw_sprite_part() или draw_sprite_pos().
-
Направляющие: В этом разделе отображается смещение каждой направляющей относительно своей оси, и его можно использовать для изменения этого смещения. Эти направляющие также можно перемещать внутри окна предварительного просмотра спрайта, просто перетаскивая их мышью.
-
- ПРИМЕЧАНИЕЛюбые направляющие на одной оси не могут пересекаться друг с другом, и перетаскивание одной на другую приведет к тому, что вторая направляющая будет сдвинута.
-
-
- Смещение каждой направляющей относительно соответствующего края. Например, левая направляющая смещена относительно левого края, правая - относительно правого, и так далее.
-
- Цвет и альфа каждой направляющей можно изменить, нажав на цветную кнопку рядом с позицией направляющей.
+
Направляющие: В этом разделе отображается смещение каждой направляющей относительно своей оси, и его можно использовать для изменения этого смещения. Эти направляющие также можно перемещать внутри окна предварительного просмотра спрайта, просто перетаскивая их мышью.
+
+ ПРИМЕЧАНИЕЛюбые направляющие на одной оси не могут пересекаться друг с другом, и перетаскивание одной на другую приведет к тому, что вторая направляющая будет сдвинута.
+
+
+ Смещение каждой направляющей относительно соответствующего края. Например, левая направляющая смещена относительно левого края, правая - относительно правого, и так далее.
+
+ Цвет и альфа каждой направляющей можно изменить, нажав на цветную кнопку рядом с позицией направляющей.
-
Выделение: Этот параметр влияет на то, как выбранный срез отображается в окне предварительного просмотра Sprite. "Инвертированный" выделяет sprite с наложением, кроме выбранного среза, а "Наложение" выделяет только выбранный срез с наложением.
-
+
Выделение: Этот параметр влияет на то, как выбранный срез отображается в окне предварительного просмотра Sprite. "Инвертированный" выделяет sprite с наложением, кроме выбранного среза, а "Наложение" выделяет только выбранный срез с наложением.
+
Цвет и альфа наложения можно изменить, нажав на цветную кнопку рядом с выпадающим меню.
Выбранный ломтик: Этот параметр можно использовать для выбора фрагмента, выбирая один из крайних фрагментов (левый, верхний, правый, нижний) и центральный. Ломтик также можно выбрать, щелкнув по нему левой кнопкой мыши в окне предварительного просмотра спрайта, а повторный щелчок снимет выделение.
-
Режим плитки: Этот параметр используется вместе с параметром Выбранный фрагмент для управления отображением фрагмента при масштабировании sprite. К каждому срезу можно применить один из следующих режимов черепицы:
+
Режим плитки: Этот параметр используется вместе с параметром Выбранный фрагмент для управления отображением фрагмента при масштабировании sprite. К каждому срезу можно применить один из следующих режимов черепицы:
Растянуть: Ломтик будет растянут, чтобы заполнить промежуток между его соединенными углами.
Чтобы помочь вам понять, что делает ваша временная шкала, разрешается давать моментам имя для их идентификации. Это просто строка, которая не будет использоваться в коде игры или где-либо еще, так как она предназначена исключительно для организации и понимания того, что делает ваша временная шкала. Чтобы добавить название/описание к моменту, вам нужно использовать формат /// @description в первой строке блока кода, например:
-
+
/// @description Hello World
Это будет выглядеть следующим образом:
From 25e8bff33f1c73b1e4de4c24fede62feb8a2cb6a Mon Sep 17 00:00:00 2001
From: YYBartT
Date: Tue, 2 Dec 2025 12:25:34 +0100
Subject: [PATCH 2/8] docs(general): Update function, variable, constant,
struct pages with title field for RU manual translation
YoYoGames/GameMaker-Manual#334
* Replaced title contents with filename
* Replaced
Эта переменная содержит массив, который используется вместе с переменной только для чтения argument_count в функциях или методахсценария. Каждая позиция массива содержит входное значение для функции и специально предназначена для использования в функциях с переменным аргументом.
Обратите внимание, что существует также ряд независимых переменных глобальной области видимости, которые также могут быть использованы в пользовательских функциях для ссылки на различные входные аргументы: argument0, argument1, argument2, и т.д... вплоть до argument15.
ПРИМЕЧАНИЕ: Это больше не является строго обязательным и предоставляется больше для поддержки наследия, чем для чего-либо еще. Все определяемые пользователем функции будут принимать переменные аргументы, и любой аргумент, передаваемый в функцию, который не является частью именованных входов, по умолчанию инициализируется как undefined, что можно проверить с помощью функции is_undefined().
Эта переменная, доступная только для чтения, возвращает количество "аргументов", передаваемых функции сценария или функции method. Обычно используется в сочетании с массивом аргументов (argument[0...15]), чтобы позволить варьировать входные аргументы для данной функции.
ПРИМЕЧАНИЕ: Это больше не является строго обязательным и предоставляется больше для поддержки наследия, чем для чего-либо еще. Все определяемые пользователем функции будут принимать переменные аргументы, и любой аргумент, передаваемый в функцию, который не является частью именованных входов, по умолчанию инициализируется как undefined, что можно проверить с помощью функции is_undefined().
Эта переменная является глобальной и используется для хранения карты DS при использовании в асинхронных событиях, и -1 во всех остальных случаях. Фактическое содержимое карты DS будет зависеть от типа обратного вызова асинхронного события, а также от функции, которая была использована для запуска события, поэтому обратитесь к отдельным страницам этих событий для получения полной информации о возможном содержимом карты DS.
Эта переменная является глобальной и используется для хранения числового значения, которое обычно используется для здоровья игрока. Эта переменная предназначена только для поддержки старых проектов предыдущих версий GameMaker, и ее следует не использовать в новых проектах поскольку в будущем она может быть устаревшей.
Эта переменная является глобальной и используется для хранения числового значения, которое обычно используется для жизней игроков. Эта переменная предназначена только для поддержки старых проектов предыдущих версий GameMaker, и ее следует не использовать в новых проектах поскольку в будущем она может быть устаревшей.
Эта переменная является глобальной и используется для хранения числового значения, которое обычно используется для оценки игрока. Эта переменная предназначена только для поддержки старых проектов предыдущих версий GameMaker, и ее следует не использовать в новых проектах поскольку в будущем она может быть устаревшей.
Эта функция может быть использована для получения значения в определенный момент времени из структуры канала. Вы передаете указатель struct для канала (как возвращается функцией animcurve_get_channel()или как возвращено в структуре анимационной кривой из функции animcurve_get()) и позицию "x" (время) вдоль канала кривой для оценки. Эта позиция должна быть между 0 и 1, и функция вернет значение кривой в этой позиции, или вернет 0, если предоставленная структура канала недействительна.
Эта функция может быть использована для создания новой структуры канала анимационной кривой. Структура канала имеет следующие переменные:
@@ -86,7 +86,7 @@
animcurve_channel_new
По умолчанию при создании новой структуры канала переменная "name" будет пустой строкой, "type" - animcurvetype_linear, а "iterations" - 16. Все эти переменные могут быть установлены в нужные вам значения (обратите внимание, что значение "итерации" не влияет на линейные типы кривых). После создания кривой необходимо добавить точки к ней, что делается путем добавления различных структур точек в массив"points". Эти структуры точек могут быть созданы с помощью функции animcurve_point_new().
Эта функция создает пустую структуру кривой анимации, готовую к заполнению данными каналов. Функция возвращает указатель на struct, который затем используется для добавления каналов и других данных в кривую анимации. Вы также можете передать его таким функциям, как animcurve_get() для последующего получения данных из кривой.
Когда вы используете эту функцию, созданная структура не будет содержать данных, и для ее использования необходимо добавить хотя бы один канал, а в канал должны быть добавлены точки. Чтобы добавить канал, см. функцию animcurve_channel_new(), а чтобы добавить точки в канал, см. функцию animcurve_point_new(). Кроме того, вы можете дать структуре анимационной кривой имя, задав переменную "name" (как показано в примере кода ниже). Каналы, добавленные в новую кривую анимации, должны быть добавлены в виде массива, где каждый элемент массива ссылается на структуру канала, а точки в канале также должны быть добавлены в виде массива, где каждый элемент массива ссылается на структуру точки.
Обратите внимание, что созданные таким образом кривые анимации должны быть удалены, если они больше не нужны, так как в противном случае они будут занимать место в памяти, что может привести к утечке памяти, замедлению и, в конечном счете, краху вашей игры. Вы можете удалить кривую анимации, если она больше не нужна, с помощью функции animcurve_destroy(). Вам не нужно очищать данные канала или точки внутри кривой, так как это будет сделано сборщиком мусора автоматически при уничтожении самой кривой.
Эта функция может быть использована для уничтожения любых анимационных кривых, которые были ранее созданы с помощью функции animcurve_create(). Вызов этой функции удалит анимационную кривую из памяти и очистит все каналы или точки, которые она содержит (их никогда не нужно очищать вручную). Обратите внимание, что нельзя уничтожить анимационные кривые, созданные в браузере активов, только те, которые были созданы во время выполнения.
Эта функция возвращает структуру, содержащую все данные для заданной кривой анимации. Вы передаете идентификатор актива кривой анимации (как определено в браузере активов), и функция возвращает структуру со следующими переменными:
@@ -50,7 +50,7 @@
animcurve_get
Обратите внимание, что если функция не сработает (например, заданный актив Animation Curve не существует), то функция вернет -1.
Эта функция возвращает структуру, содержащую данные канала для канала, указанного в активе кривой анимации. Вы передаете идентификатор или структуру анимационной кривой, а также имя или индекс канала, и функция возвращает структуру со следующим форматом:
Эта функция возвращает значение индекса для любого заданного канала кривой анимации. Вы передаете ID кривой анимации или struct, где ID кривой - это имя кривой анимации, как она была определена в Asset Browser, или указатель struct, возвращенный функцией animcurve_create(). Затем введите имя канала в виде строки, и функция вернет значение индекса, связанное с этим каналом. Обратите внимание, что если кривая или канал не существуют, то вы получите ошибку.
Эта функция может быть использована для создания новой структуры точек, которая будет добавлена в канал кривой анимации. При создании структура точек пуста, и вам необходимо установить следующие переменные для создания данных точек:
@@ -47,7 +47,7 @@
animcurve_point_new
Каждый созданный вами point struct должен быть добавлен в массив, и именно этот массив добавляется в переменную "channels" структуры канала кривой анимации (как показано в примере ниже).
С помощью этой функции вы можете добавить одну или несколько строк тегов к любому активу из браузера активов. Вы передаете либо имя актива (в виде строки), либо его индекс, а также либо одну строку тегов, либо массив, каждый элемент которого является одной строкой тегов. Если вы указываете значение индекса актива, то вам необходимо указать дополнительный аргумент тип актива (константа), так как активы разных типов могут иметь одинаковый индекс, хотя они не могут иметь одинаковое имя. Доступные типы активов перечислены в таблице ниже:
@@ -75,7 +75,7 @@
asset_add_tags
Если функция успешно добавляет метку(и), она возвращает true, в противном случае возвращает false.
С помощью этой функции вы можете очистить все теги, присутствующие на любом активе, из браузера активов. Вы указываете либо имя актива (в виде строки), либо его индекс, а если вы указываете значение индекса актива, то вам необходимо указать дополнительный аргумент типа актива (константа), так как активы разных типов могут иметь одинаковый индекс, хотя они не могут иметь одинаковое имя. Доступные типы активов перечислены в таблице ниже:
Вы можете использовать эту функцию для получения уникального идентификационного индекса игрового актива из его названия. Если актив не найден, функция вернет значение -1, в противном случае она вернет уникальный индекс id для проверяемого актива. Этот идентификатор можно использовать в других функциях, как и любое другое значение индекса, например, функцию sprite_index или path_indexнапример. Обратите внимание, что хотя эта функция может использоваться для ссылки на активы из строк (см. пример ниже), вы всегда должны убедиться, что актив существует, прежде чем использовать его, иначе вы можете получить ошибки, которые приведут к краху вашей игры.
С помощью этой функции вы можете получить все теги, присвоенные активу, из браузера активов. Вы указываете либо имя актива (в виде строки), либо его индекс, и функция возвращает массив тегов для этого актива. Если теги не найдены или произошла ошибка (т.е. указанная строка имени не существует), то возвращаемый массив будет пуст. Если вы указываете значение индекса актива, то вам необходимо указать дополнительный аргумент тип актива (константа), так как активы разных типов могут иметь одинаковый индекс, хотя они не могут иметь одинаковое имя. Доступные типы активов перечислены в таблице ниже:
С помощью этой функции вы можете получить тип актива, на который ссылаются, из его имени (строки). При этом будет возвращена одна из перечисленных ниже констант.
С помощью этой функции вы можете проверить, присвоена ли одна или несколько строк тегов любому активу из браузера активов. Вы передаете либо имя актива (в виде строки), либо его индекс актива, а также либо одну строку тега, либо массив, каждый элемент которого является одной строкой тега. Если вы указываете значение индекса актива, то вам необходимо указать дополнительный аргумент тип актива (константа), так как активы разных типов могут иметь одинаковый индекс, хотя они не могут иметь одинаковое имя. Доступные типы активов перечислены в таблице ниже:
С помощью этой функции вы можете проверить, присвоена ли одна или несколько строк тегов любому активу из браузера активов. Вы передаете либо имя актива (в виде строки), либо его индекс актива, а также либо одну строку тега, либо массив, каждый элемент которого является одной строкой тега. Если вы указываете значение индекса актива, то вам необходимо указать дополнительный аргумент тип актива (константа), так как активы разных типов могут иметь одинаковый индекс, хотя они не могут иметь одинаковое имя. Доступные типы активов перечислены в таблице ниже:
С помощью этой функции вы можете удалить одну или несколько строк тегов для любого актива из браузера активов. Вы передаете либо имя актива (в виде строки), либо его индекс, а также либо одну строку тегов, либо массив, каждый элемент которого является одной строкой тегов. Если вы указываете значение индекса актива, то вам необходимо указать дополнительный аргумент тип актива (константа), так как активы разных типов могут иметь одинаковый индекс, хотя они не могут иметь одинаковое имя. Доступные типы активов перечислены в таблице ниже:
С помощью этой функции вы можете получить все активы заданного типа, которым присвоены заданные теги. Вы предоставляете либо один тег (в виде строки), либо массив, где каждый элемент массива является тегом (в виде строки), а также тип актива для проверки. тип актива должен быть одной из следующих констант:
@@ -77,7 +77,7 @@
tag_get_asset_ids
Функция вернет массив, где каждый элемент массива будет одним значением индекса актива. Если не существует активов данного типа, имеющих заданный тег(ы), будет возвращен пустой массив.
С помощью этой функции можно получить имена всех активов, которым был присвоен заданный тег или теги. Вы передаете либо одну строку тега, либо массив, где каждый элемент массива - это строка тега. Функция вернет массив, каждый элемент которого является именем (в виде строки) актива с заданным тегом. Если вам нужен уникальный индекс актива, то вы можете использовать функцию asset_get_index() вместе с возвращаемым именем. Если активов с заданным тегом (тегами) нет, или если произошла ошибка (например, заданные теги не существуют), то будет возвращен пустой массив.
С помощью этой функции вы можете создать новый звук из содержимого буфера. Буфер будет создан ранее (см. функции буфера для получения подробной информации о том, как это сделать), и в него будут добавлены или загружены данные. Затем вы передаете этой функции формат данных (в настоящее время поддерживаются только buffer_u8 или buffer_s16 ), частоту дискретизации (которая может быть от 1000 Гц до 48000 Гц) и смещение в буфере для получения данных. Также необходимо указать количество сэмплов в буфере и каналы, которые требуются звуку. Эти каналы определяются одной из следующих констант:
@@ -47,7 +47,7 @@
audio_create_buffer_sound
Обратите внимание, что после создания звука необходимо освободить связанный с ним индекс указателя, когда он больше не нужен, используя функцию audio_free_buffer_sound(). Если этого не сделать, а затем переназначить переменную или изменить комнату и т.д., идентификатор звука будет потерян и произойдет утечка памяти. Также обратите внимание, что вы не можете удалить буфер, если из него был создан какой-либо звук, и звук не был сначала освобожден. Поэтому сначала нужно освободить звук (или звуки), а затем удалить буфер. Также стоит отметить, что добавление чего-либо в буфер или изменение размера буфера после того, как из него был создан звук, приведет к неожиданным результатам, и это не рекомендуется - как только вы начали создавать звуки из любого буфера, вы не должны манипулировать им каким-либо другим образом.
Эта функция подготавливает буферную очередь для аудио. Вы передаете формат данных (в настоящее время поддерживаются только buffer_u8 или buffer_s16 ), частоту дискретизации (которая может быть от 1000гц до 48000гц), и каналы, которые требует аудио из одной из перечисленных ниже констант:
С помощью этой функции можно освободить значение индекса указателя, связанное с идентификатором звука. Освобожденные звуки будут недоступны для воспроизведения, а если воспроизводится несколько экземпляров звука, то все они будут остановлены. Обратите внимание, что перед удалением
сам буфер, необходимо сначала освободить все связанные с ним идентификаторы звуков.
Эта функция используется для освобождения памяти, связанной с заданной аудиоочередью. Индекс очереди - это значение, возвращенное при создании очереди с помощью функции audio_create_play_queue()и эта функция должна вызываться, когда очередь больше не нужна, чтобы предотвратить утечку памяти. Освобождение очереди остановит любой воспроизводимый звук, и вы не сможете удалить буфер, из которого передается звук, пока не будет освобождена очередь, которой он назначен. Эта функция вызовет асинхронное событие воспроизведения звука, и в этом событии в переменной будет создана специальная DS картаasync_load со следующими парами ключ/значение:
"queue_id" - очередь, которая закончила воспроизведение данных
Эта функция возвращает количество источников записи звука (таких как микрофоны и т.д.), доступных в настоящее время для вашей игры. Так, если возвращаемое значение равно, например, четырем, то у вас будет аудио вход на источниках 0, 1, 2 и 3, причем одно из этих значений будет тем, с которого вы начнете запись с помощью функции audio_start_recording(). Это значение может меняться в любое время по мере того, как люди подключают/отключают микрофоны или другие источники входного сигнала к устройству. Обратите внимание, что вы можете использовать функцию audio_get_recorder_info() для получения информации о каждом подключенном устройстве.
ВАЖНО Эта функция всегда будет возвращать 1 на цели Opera GX.
Эта функция возвращает DS Map с информацией о заданном индексе источника диктофона. Вы можете узнать, сколько источников диктофонов доступно, используя функцию audio_get_recorder_count(), а возвращаемая карта будет содержать следующие пары ключ/значение:
"имя" - имя для описания устройства
@@ -28,7 +28,7 @@
audio_get_recorder_info
ПРИМЕЧАНИЕБольшинство платформ поддерживают запись звука в той или иной форме, но это не означает, что все устройства позволят это сделать, даже если платформа это делает, поэтому всегда следует проверять, что функция audio_get_recorder_count() возвращает значение больше 0, чтобы убедиться, что устройства записи доступны, прежде чем использовать остальные функции записи.
Эта функция добавит данные из буфера в очередь аудио, которую вы ранее создали с помощью функции audio_create_play_queue(). Вы указываете индекс очереди для добавления, ID буфера для получения данных, а также позицию (смещение) в буфере и количество байт для добавления. После добавления звука из буфера в очередь, буфер не может быть удален до тех пор, пока вы не освободите очередь с помощью функции audio_free_play_queue(), а свойства буфера должны соответствовать свойствам очереди, в которую вы добавляете звук.
Эта функция начнет запись звука с проиндексированного источника рекордера. Количество источников рекордера можно получить с помощью функции audio_get_recorder_count(), и как только вы начнете запись, аудио будет сохранено во временном буфере и начнет вызывать асинхронное событие Audio Recording Asynchronous Event. Это событие будет срабатывать на каждом шаге, когда происходит запись, и создаст специальную карту DS в переменной async_load со следующими парами ключ/значение:
"buffer_id" - идентификатор временного буфера, который можно использовать для получения аудиоданных
@@ -26,7 +26,7 @@
audio_start_recording
ПРИМЕЧАНИЕБольшинство платформ поддерживают запись звука в той или иной форме, но это не означает, что все устройства позволят это сделать, даже если платформа это делает, поэтому всегда следует проверять, что функция audio_get_recorder_count() возвращает значение больше 0, чтобы убедиться, что записывающие устройства доступны, прежде чем использовать остальные функции записи.
Эта функция остановит запись на заданном канале рекордера (индекс канала возвращается при вызове функции audio_start_recording()). Когда вы остановите запись, для данного канала рекордера не будет инициировано никаких дальнейших асинхронных событий аудиозаписи, поэтому обычно вы используете эту функцию в реальном асинхронном событии, чтобы убедиться, что вы захватили все данные.
ПРИМЕЧАНИЕБольшинство платформ поддерживают запись звука в той или иной форме, но это не означает, что все устройства позволят это сделать, даже если платформа это делает, поэтому всегда следует проверять, что функция audio_get_recorder_count() возвращает значение больше 0, чтобы убедиться, что записывающие устройства доступны, прежде чем использовать остальные функции записи.
Эта функция возвращает, существует ли аудиоизлучатель (true) или нет (false). Обратите внимание, что если искомый индекс не был инициализирован ранее, эта функция выдаст ошибку, так как она ищет несуществующие индексы.
С помощью этой функции вы можете установить расстояние спада для излучателя. Это расстояние, на котором излучатель должен находиться от слушателя, чтобы звук "упал" до громкости 0. По умолчанию это значение равно 100, но остерегайтесь устанавливать значение меньше 1, так как в этом случае любой звук, воспроизводимый через этот излучатель, будет неслышен слушателю, однако любое другое значение приведет к затуханию звука, чем дальше излучатель находится от слушателя.
То, как будет слышен сам звук, зависит от опорного значения спада (это расстояние, на котором громкость источника обычно уменьшается вдвое) и коэффициента спада (который влияет на звук только после опорного расстояния спада). Коэффициент по умолчанию обычно равен 1, а влияние различных значений коэффициента спада зависит от выбранной модели.
Для получения полного руководства по различным моделям падения и использованию этих значений, пожалуйста, обратитесь к функции audio_falloff_set_model().
С помощью этой функции вы можете удалить заданный эмиттер из памяти. Это всегда следует делать, когда эмиттер не будет использоваться далее в комнате или игре, т.е. в событии Destroy Event экземпляра или в событии Room End Event, иначе вы можете получить утечку памяти, которая замедлит и в конечном итоге приведет к краху вашей игры.
Эта функция устанавливает максимальное усиление (громкость) для звука. Воспринимаемая громкость звука может меняться в зависимости от величины спада и его положения относительно слушателя, но при установке усиления с помощью этой функции полная громкость никогда не превысит указанного значения усиления. На изображении ниже показано, как усиление влияет на громкость излучателя, когда значение fall-off больше 0:
Эта функция изменит громкость звука во время его воспроизведения, а также всех последующих звуков, воспроизводимых через данный излучатель. Обратите внимание, что на некоторых платформах коэффициент усиления может быть больше 1, хотя значение 1 считается "полной громкостью", а большее значение может привести к клиппированию или искажению звука.
ПРИМЕЧАНИЕна конечную громкость также влияет глобальное усиление звука, которое было установлено функцией audio_master_gain().
Эта функция возвращает текущее значение усиления (громкости), установленное для данного аудиоизлучателя, обычно в диапазоне от 0 до 1, где 0 - тишина, а 1 - полная громкость. Обратите внимание, что на некоторых платформах коэффициент усиления может быть больше 1, хотя значение 1 считается "полной громкостью", а большее значение может привести к обрыву звука.
Эта функция возвращает данные битовой маски, определяющие, с каких аудиослушателей эмиттер должен воспроизводить звуки. Для получения дополнительной информации см. раздел " Аудиопрослушиватели".
С помощью этой функции вы можете изменить положение аудиоизлучателя в трехмерном аудиопространстве. Положение будет по-разному влиять на звук в зависимости от того, где находится слушатель в аудиопространстве (положение по умолчанию - (0, 0, 0). См. audio_listener_position() например, если позиция эмиттера установлена на (100, 0, 0), а текущий слушатель находится на (200, 0, 0), то звук, передаваемый от эмиттера, окажется слева от звукового поля. На рисунке ниже показано визуальное представление эмиттеров и их относительных позиций по отношению к слушателю:
Эта функция может быть использована для установки битовой маски для эмиттера, чтобы все звуки, воспроизводимые через эмиттер, воспроизводились только от указанных слушателей. Вы можете создать битовую маску с помощью функции audio_get_listener_info() а затем с помощью побитового or ("|") создать пользовательскую маску с теми слушателями, от которых требуется воспроизведение звука, а затем применить эту маску к эмиттеру. Эта маска отменяет маску по умолчанию или ту, которую вы задали с помощью функции audio_set_listener_mask().
Эта функция может быть использована для придания излучателю эффекта Доплера и имитации движения звука на основе вектора, который определяется из заданных относительных положений x, y и z. Если эмиттер сам по себе никогда не будет двигаться, вам обычно не нужно задавать эти значения, но, например, если вы создаете скроллинговую игру-стрелялку, где враги появляются справа и прокручиваются влево, вы должны установить скорость (hspeed, 0, 0) в событии создания врагов (и обновить эмиттер каждого экземпляра в событии шага с помощью параметра audio_emitter_position()), чтобы придать любым звукам, издаваемым вражескими экземплярами, правильный доплер, когда они проходят мимо экземпляра игрока (который, в свою очередь, будет использовать функцию audio_listener_position() для установки слушателя в правильное положение).
С помощью этой функции вы можете воспроизводить любой звуковой ресурс через эмиттер, при этом любые изменения усиления, положения, высоты тона или скорости эмиттера влияют на то, как пользователь слышит конечный воспроизводимый звук. Вы указываете индекс эмиттера для использования, индекс звука, который будет воспроизводиться, а затем указываете, должен ли звук зацикливаться или нет. Далее вы можете назначить приоритет, который затем используется для определения того, как звуки будут обработаны, когда количество воспроизводимых звуков превысит предел, установленный функцией audio_channel_num(). Звуки с более низким приоритетом будут остановлены в пользу звуков с более высоким приоритетом, а значение приоритета может быть любым реальным числом (фактическое значение произвольно и может быть от 0 до 1 или от 0 до 100, поскольку GameMaker будет определять их приоритет одинаково). Обратите внимание, что при работе с приоритетами чем больше число, тем выше приоритет, так что звуку с приоритетом 100 будет отдано предпочтение перед звуком с приоритетом 1.
Эта функция также возвращает уникальный индексный номер воспроизводимого звука, который можно сохранить в переменной, чтобы затем поставить его на паузу или остановить с помощью соответствующих функций. Это означает, что если у вас есть несколько экземпляров одного и того же звука, воспроизводимого в любой момент времени, вы можете выбрать только один экземпляр этого звука для работы с ним с помощью аудиофункций.
Эта функция загружает в память все звуки, отмеченные как принадлежащие заданной аудиогруппе. Функция вернет true, если загрузка начата, и false, если идентификатор группы недействителен или она уже была помечена для загрузки. Функция является асинхронной, поэтому ваша игра будет продолжать работать, пока аудио загружается в фоновом режиме. Это означает, что она также вызовет событие Asynchronous Load/Save Event, чтобы сообщить вам, что вся группа была загружена в память и звуки теперь можно использовать.
Эта функция возвращает строку, содержащую имя заданной аудиогруппы для отображения или проверки. Когда вы определяете аудиогруппу в Опциях игры, вы даете ей уникальное "имя", которое на самом деле является константой, используемой в качестве значенияID для группы. Все, что делает эта функция, это принимает ID и возвращает строку с именем ID, которое вы дали.
С помощью этой функции можно приглушить или затушить группу звуков на определенный промежуток времени, а также мгновенно установить усиление группы.
Время измеряется в миллисекундах, и функция требует, чтобы вы ввели конечный уровень усиления, которого группа должна достичь к концу этого времени. Этот уровень усиления может быть от 0 (тишина) до 1 (полная громкость), а шкала линейна, так что значение 0,5 будет равняться половине громкости. Чтобы мгновенно изменить усиление, просто установите аргумент time в 0. Обратите внимание, что на некоторых платформах усиление может быть больше 1, хотя значение 1 считается "полной громкостью", а большее значение может привести к обрыву звука.
Эта функция выгружает в память все звуки, отмеченные как принадлежащие данной аудиогруппе. Функция вернет true, если выгрузка инициирована, и false, если идентификатор группы недействителен, или она уже была помечена для выгрузки. Обратите внимание, что все звуки, воспроизводимые в данный момент при вызове этой функции, будут остановлены.
Некоторые целевые платформы позволяют использовать более одного слушателя, поэтому важно знать, сколько их у цели, прежде чем менять или использовать различные слушатели. Эта функция возвращает количество доступных слушателей.
Эта функция создаст карту DS и заполнит ее информацией для заданного слушателя.
ПРИМЕЧАНИЕВы несете ответственность за уничтожение возвращенного DS Map с помощью соответствующей функции.
Карта DS будет содержать следующие ключи:
@@ -27,7 +27,7 @@
audio_get_listener_info
Значение маски можно использовать для настройки звука или излучателя на воспроизведение от нескольких слушателей одновременно, просто используя побитовое or "|" для создания маски для звука (см. пример кода ниже), в то время как индекс используется для установки свойств, таких как позиция или скорость для данного слушателя, используя функции типа audio_listener_set_position().
Эта функция создаст карту DS и заполнит ее значениями положения, скорости и ориентации для заданного слушателя. Индекс слушателя по умолчанию равен 0, но вы можете использовать функцию audio_get_listener_info() для получения различных индексов, доступных для целевой платформы. Если вы укажете неправильный индекс слушателя, функция вернет -1.
ПРИМЕЧАНИЕВы несете ответственность за уничтожение возвращенной карты DS с помощью соответствующей функции.
С помощью этой функции можно изменить ориентацию слушателя в трехмерном аудиопространстве. Направление взгляда и направление вверх основаны на векторах, которые определяются из заданных относительных положений x, y и z, и по умолчанию имеют значения (0, 0, 1) для направления взгляда и (0, 1, 0) для направления вверх, как показано на рисунке ниже:
Изменение ориентации слушателя с помощью этой функции изменит восприятие звуков, создаваемых аудиоизлучателями в игровой комнате, игроком вашей игры. В приведенном ниже примере звуки, создаваемые излучателем, когда слушатель находится в положении по умолчанию, будут казаться исходящими снизу и справа от слушателя, но при новом положении и ориентации слушателя они будут восприниматься как исходящие сверху и справа.
С помощью этой функции можно изменить положение слушателя в трехмерном аудиопространстве. На рисунке ниже показано положение слушателя в аудиопространстве по умолчанию:
Как вы можете видеть, положение по умолчанию - (0, 0, 0), но обычно вы используете эту функцию для перемещения слушателя вместе с объектом игрока в вашей игре и, таким образом, для изменения того, как звук, созданный эмиттерами, слышен игроку. Например, на изображении игры сверху вниз, экземпляр игрока устанавливает слушатель, который заставит звук от различных эмиттеров "меняться", когда игрок перемещается по уровню:
С помощью этой функции вы можете изменить ориентацию данного слушателя в трехмерном аудиопространстве. По умолчанию индекс слушателя равен 0, но вы можете использовать функцию audio_get_listener_info() для получения различных индексов, доступных для целевой платформы.
Вектор взгляда и вектор вверх основаны на значениях, которые определяются из заданных относительных положений x, y и z, и по умолчанию имеют значения (0, 0, 1) для вектора взгляда и (0, 1, 0) для вектора вверх, как показано на рисунке ниже:
С помощью этой функции вы можете изменить положение данного слушателя в трехмерном аудиопространстве. По умолчанию индекс слушателя равен 0, но вы можете использовать функцию audio_get_listener_info() для получения различных индексов, доступных для целевой платформы. Пример изображения ниже показывает положение слушателя по умолчанию в аудиопространстве:
Как вы можете видеть, положение по умолчанию - (0, 0, 0), но обычно вы используете эту функцию для перемещения слушателя вместе с объектом игрока в вашей игре и, таким образом, для изменения того, как звук, созданный эмиттерами, слышен игроку. Например, на изображении игры сверху вниз, экземпляр игрока устанавливает слушатель, который заставит звук от различных эмиттеров "меняться", когда игрок перемещается по уровню:
Эта функция может быть использована для придания заданному слушателю эффекта Доплера и имитации движения звука на основе вектора, который определяется из заданных относительных положений x, y и z. Индекс слушателя по умолчанию равен 0, но вы можете использовать функцию audio_get_listener_info() для получения различных индексов, доступных для целевой платформы.
Если данный слушатель никогда не будет двигаться, или движение не является постоянным, вам обычно не нужно устанавливать эти значения, но, например, если вы делаете скроллинговую игру, где игрок имеет постоянное движение снизу вверх, а враги - сверху вниз, вы должны установить скорости слушателя и эмиттера (для эмиттеров вы должны использовать audio_emitter_velocity()) соответствующим векторам, чтобы смоделировать правильный эффект Доплера при движении мимо экземпляра игрока.
На рисунке ниже показано, как это можно настроить для приведенного выше примера игры:
Эта функция может быть использована для придания слушателю эффекта Доплера и имитации движения звука на основе вектора, который определяется из заданных относительных положений x, y и z. Если сам слушатель никогда не будет двигаться, или движение не будет постоянным, вам обычно не нужно задавать эти значения, но, например, если вы делаете скроллинговую игру, где игрок имеет постоянное движение снизу вверх, а враги - сверху вниз, вы должны установить скорости слушателя и эмиттера (для эмиттеров вы будете использовать audio_emitter_velocity()) на соответствующие векторы, чтобы смоделировать правильный эффект Доплера при движении мимо экземпляра игрока.
При использовании нескольких слушателей в системе можно установить битовую маску для звука, чтобы он был слышен только отмеченным слушателям. Однако с помощью этой функции можно также установить глобальную маску, и все звуки, воспроизводимые в обычном режиме, будут слышны слушателям, отмеченным этой маской, без необходимости устанавливать маску для каждого звука отдельно.
Создает группу синхронизации и возвращает для нее уникальное значение ID, которое затем должно использоваться во всех дальнейших вызовах аудиофункций для этой группы. Если вы хотите, чтобы группа зацикливалась, передайте true, в противном случае передайте false, но учтите, что если вы хотите, чтобы они зацикливались, все дорожки, добавленные позже, должны быть одинаковой длины. Обратите внимание, что при создании группы синхронизации необходимо освободить память и звуки, связанные с ней, если они не используются, с помощью функции audio_destroy_sync_group() например, в событиях Room End или Destroy.
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
Группы синхронизации звука должны быть уничтожены, если они не используются, чтобы освободить память и звуковые ресурсы, связанные с ними, с помощью этой функции. Для этого берется индекс группы, полученный при ее создании с помощью функции audio_create_sync_group()и освобождает все ресурсы, используемые группой.
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
его функция приостановит заданную группу синхронизации, если она играет, при этом индекс группы будет значением, возвращенным при создании группы с помощью функции audio_create_sync_group(). Это не останавливает звук, и вызов audio_resume_sync_group(). начнет его воспроизведение с той же позиции, на которой он был приостановлен.
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
С помощью этой функции можно назначить звук на ранее созданную группу синхронизации. Индекс группы - это значение, возвращенное при создании группы с помощью функции audio_create_sync_group(), а индекс звука - это индекс любого сжатого звука (*.ogg или *.mp3) из браузера активов. Эта функция только добавляет звук в группу, но не воспроизводит его. Возвращаемое значение будет >= 0 в случае успеха и -1 в случае неудачи, где успешное значение указывает порядок звука в группе синхронизации (таким образом, 0 будет первым добавленным звуком, 1 - вторым и т.д.).
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
Эта функция возобновит данную группу синхронизации, если она воспроизводится и ранее была приостановлена (с помощью функции audio_pause_sync_group). Индекс группы - это значение, возвращенное при создании группы с помощью функции audio_create_sync_group().
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
С помощью этой функции вы можете начать воспроизведение ранее созданной группы синхронизации. Вам необходимо предоставить индекс группы, который является значением, возвращенным при создании группы с помощью функции audio_create_sync_group().
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
Эта функция остановит заданную группу синхронизации, если она играет, при этом индекс группы будет значением, возвращенным при создании группы с помощью функции audio_create_sync_group().
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
его функцию можно использовать для отображения отладочной информации о любой заданной группе синхронизации (индекс группы - это значение, возвращаемое при создании группы с помощью функции audio_create_sync_group()). Вы можете вызвать функцию со значением -1, чтобы отключить наложение.
При отладке групп синхронизации звука будет отображаться накладка:
@@ -42,7 +42,7 @@
audio_sync_group_debug
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
Эта функция возвращает текущую позицию воспроизведения заданной группы синхронизации. Индекс группы - это значение, возвращенное при создании группы с помощью функции audio_create_sync_group(), а возвращаемое значение - время в секундах, в течение которого воспроизводятся дорожки.
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
С помощью этой функции вы можете установить, сколько аудиоканалов доступно для воспроизведения звука в GameMaker. В основном это означает, что вы задаете количество одновременных звуков, которые могут воспроизводиться в любой момент времени, и если это количество превышает указанное, то звуки с более низким приоритетом останавливаются, чтобы освободить канал для звуков с более высоким приоритетом. Вы можете использовать эту функцию для оптимизации игры для устройств, так как чем меньше каналов для звука, тем лучше производительность, но имейте в виду, что это может привести к заметному обрезанию некоторых звуков, если многие из них воспроизводятся одновременно.
С помощью этой функции вы можете создать новый звуковой индекс, который затем можно использовать в обычных аудиофункциях для потоковой передачи звука непосредственно из внешнего источника файла OGG. Функция требует имя файла (которое может быть, например, включенным файлом) и возвращает новый звуковой индекс для использования. Обратите внимание, что после того, как звук больше не нужен, необходимо вызвать функцию audio_destroy_stream() с индексом звука, чтобы удалить его из памяти, иначе вы можете получить утечку памяти, что приведет к замедлению и, в конечном счете, к краху вашей игры.
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.
Эта функция может использоваться для отображения отладочной информации об аудиосистеме, при этом true включает ее, а false - выключает. При отладке аудио таким образом на оверлее будет отображаться следующая информация:
@@ -30,7 +30,7 @@
аудио_отладка
ПРИМЕЧАНИЕЭта функция не работает на целевой платформе HTML5.
Если вы ранее создали звуковой поток из файла с помощью функции audio_create_stream() и этот звук больше не нужен, вы можете вызвать эту функцию, чтобы удалить его из памяти. Любые дальнейшие обращения к индексу звука после его уничтожения приведут к ошибке. Следует отметить, что это освободит поток, но на целевой платформе это может не отобразиться в менеджере памяти. Это происходит потому, что GameMaker объединяет ресурсы памяти для предотвращения накладных расходов на выделение памяти, и поэтому память будет оставаться выделенной до тех пор, пока не понадобится для чего-то другого или не будет повторно использована для нового потока.
ПРИМЕЧАНИЕ: Эта функциональность недоступна для целевой платформы HTML5.