реклама
разместить

GameMaker: советы для новичков

Рекомендации, которые покажут, как надо или не надо делать.

GameMaker: советы для новичков

Попробуйте прочитать документацию

Прежде чем гуглить или спрашивать кого-то о проблеме, обязательно проверьте соответствующую секцию в документации — она может содержать информацию, которая может помочь решить вашу проблему.

Не копируйте код, если вы его не понимаете

Иногда, чтобы просто заставить что-то работать, вы копируете код и какого-то руководства, даже не понимая, что он делает. Кажется что всё в порядке, но на самом деле это только усугубляет проблему. Вы не сможете полностью контролировать свой проект, если вы не понимаете, как в нём работает какая-либо часть кода.

Прежде чем копировать код в своей проект, попробуйте хотя бы понять, как он устроен. Прочитайте. Погуглите. Спросите кого-то. Поймите.

Различные значения для различных экземпляров

Предположим, вам нужно сделать пару врагов: первый с 4 HP и второй с 10 HP. Как новичок, вы подумаете, что нужно создать ещё один объект и изменять HP внутри него. Но этот вопрос можно решить проще.

Когда вы размещаете экземпляр внутри комнаты через редактор комнат, вы можете открыть окно «Код создания» (в GMS2 нужно кликнуть дважды) и писать код в нём. Таким образом вы можете задавать HP экземпляров внутри их кода создания.

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

Используйте place_meeting()

Функция place_meeting() может использоваться для проверки столкновений между объектами. Лучше использовать эту функцию в условии, чем использовать событие столкновения, так как вы сможете больше контролировать работу столкновений.

GameMaker: советы для новичков

Первый и второй аргументы — это X и Y координаты, в которых будет проверятся столкновение. Третий аргумент — это объект, с которым будет проверятся столкновение.

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

GameMaker: советы для новичков

Лучший способ получения ввода (input)

Многие новички используют условия для установки переменных ввода. Например

GameMaker: советы для новичков

Но есть более простой способ. Вот этот.

GameMaker: советы для новичков

Вы знаете что keyboard_check() возвращает true если нажата определённая клавиша, или возвращает false если она не нажата. Но в GameMaker'е true становится — 1, а false — 0, это просто числа. Поэтому их можно использовать в таком уравнении.

Если нажата правая клавиша, то hsp будет равен 1.

GameMaker: советы для новичков

Если нажата левая клавиша, то hsp будет равен -1.

GameMaker: советы для новичков

И если ни одна клавиша не нажата, то hsp будет равен 0.

GameMaker: советы для новичков

Тоже самое можно применить к вертикальному положению.

GameMaker: советы для новичков

Событие Draw GUI для элементов HUD

Для отрисовки HUD некоторые люди используют объекты или отрисовывают их через событие Draw — добавляют их относительные позиции в координаты камеры/вьюпорта.

Внутри события Draw GUI вам не требуется добавлять позиции камеры для того, чтобы HUD следовал за ней. Это событие использует координаты окна игры, вместо координат комнаты. Поэтому, если вы рисуете что-то в (0, 0), то это будет рисоваться в верхнем левом углу игрового окна, а не комнаты. Так что, всё что вы рисуете там, остаётся там: на его позицию не влияет камера в игре. Это как ещё один слой над вашей игрой.

Как работают функции создания

В этом совете я обращусь к тому, что создает путаницу среди начинающих разработчиков.

Я говорю о функциях _create. Это функции, которые для создания чего-либо (поверхности, буфферов, структур данных и так далее) и сохраняет результат в переменную.

<i>arg 















—



 аргумент</i>
arg — аргумент

Давайте возьмём список структуры данных, как пример. Эта функция создаёт список и хранит его в переменной, верно?

Если я создам список в локальной переменной, он исчезнет в конце события, потому что переменная является локальной. Ведь так?

GameMaker: советы для новичков

На самом деле, это работает не так. Всякий раз, когда вы создаёте список, он создаёт его внутри памяти. Именно там он и существует. Функция просто возвращает указатель, на список внутри памяти. Таким образом, переменная, которую вы используете как «список», представляет собой просто указатель, который позволяет вам получить доступ к фактическому списку в памяти.

Даже если переменная является локальной — список не существует. Помните, что переменная — это просто указатель. Чтобы уничтожить список, вам надо использовать.

Эта функция удалит список из памяти
Эта функция удалит список из памяти

Кроме того, когда вы делаете так.

GameMaker: советы для новичков

Вы не создаете другой список, называемый «list_2», который совпадает с « list_1». Вы просто копируете значение указателя в эту переменную, поэтому обе переменные указывают на тот же список в памяти.

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

Очистите поверхность, когда вы её создаёте

Когда вы создаете поверхность, она должна быть пустой, ведь так?

Ну, это не всегда так. Смотрите: когда вы уничтожаете поверхность, она освобождает память, но не очищает её. Если вы создаёте поверхность и она создаётся в том же блоке памяти, где когда-то существовала поверхность, которая была уничтожена, то содержимое уничтоженной поверхности может перенестись в новую.

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

GameMaker: советы для новичков

В раздел Gamedev попадают не только редакционные материалы, но и читательские тексты с пометкой «Блог». Вы можете нажать кнопку «Написать» и рассказать о своём опыте разработки. Подробнее о читательском контенте в разделе вы можете почитать тут.

4040
реклама
разместить
72 комментария

Комментарий недоступен

8

«А когда инстансов станет несколько - начнутся проблемы. Потому что GMS в такой ситуации под капотом перебирает все инстансы, и выполняет с ними указанную операцию.»
Если вы храните id инстансов в переменной, и обращаетесь по нему, нет никаких проблем.
«Есть other, но нет this. Нормально? Нормально»
Есть self, который this
«Переменные можно объявлять в любом месте, но нет способа проверить, объявлена уже переменная, или нет. Нормально? Почему нет? This is GML!»
Зависит от того, как давно вы обновлялись. Если вы с ГМ давно знакомы, то в версии 8, например, эта функция была. Если недавно, то в ГМС2.1 эта функция есть =)

5

Звучит только как минусы. Или у GML есть свои плюсы? Вообще, велосипеды всегда не хорошо, как по мне...

Кагбе, "объект->экземпляр" ещё дедушка Вирт использовал. Один из популяризаторов ООП.
А то понапривыкали "класс->объект" и всё. ИМХО, вкусовщина.
Вот с переменными, похоже, действительно засада.

1

"...и игра даже будет работать"
Там много таких медвежьих услуг, которые зато делают вхождение в язык и его использование очень дружелюбным :)

1

Не копируйте код, если вы его не понимаете

хех...

3

Действительно, как будто что-то плохое.

2
Раскрывать всегда
«4070 Ti Super Duper»: тесты и главное из обзоров GeForce RTX 5070 Ti

Видеокарта достойная, но только не по тем ценам, которые сейчас на рынке.

«4070 Ti Super Duper»: тесты и главное из обзоров GeForce RTX 5070 Ti
5050
1010
44
11
11
Краткий вывод: За эту цену нафиг надо.
реклама
разместить
NASA повысило вероятность столкновения астероида 2024 YR4 с Землёй до 3,1%

Небесное тело приблизится к планете в 2032 году.

NASA повысило вероятность столкновения астероида 2024 YR4 с Землёй до 3,1%
128128
3939
1414
1010
88
77
22
22
11
11
Какова позиция русских рэперов по этому вопросу?

Когда я начала серьёзно заниматься киберспортом, у меня всегда было несколько аккаунтов. Один – основной, где я держала свой ранг, а другие – для тестирования стратегий, игры с друзьями низкого уровня или просто ради фана. Но потом я столкнулась с проблемой: платформы начали банить мои доп аккаунты, а иногда и основной. Ну и тогда я задумалась – ка…

66
11
День не без хороших новостей: Bonnie Blue, известная тем, что переспала с 1057 мужчинами менее чем за 24 часа, как сообщается, беременна

Порадуемся за молодых

57 оказались дтэферами, поэтому она их вычеркнула <br />
5151
66
55
33
11
11
11
Это 1,3 мужика в минуту, при условии полного отсутствия сна и отдыха
Милли Бобби Браун в журнале Vanity Fair

Оказывается она книгу написать успела: в 2023 году в свет вышел роман "Девятнадцать шагов". Роман вдохновлен биографией ее бабушки. Действие происходит во время Второй мировой войны. В центре сюжета - молодая девушка, которая после знакомства с американским летчиком планирует сбежать вместе с ним подальше от бомбежек. На амазоне можно купить.

4343
2929
88
22
11
11
11
11
милфа Бобби Браун
A24 выпустила тизер Bring Her Back — следующего хоррора от режиссёров «Два, три, демон, приди!»

В главной роли — Салли Хокинс, звезда «Формы воды».

4747
11
A24 уже не те...
Режиссёр «Сёгуна» 1980 года считает, что недавний сериал от FX непонятен американской аудитории

Однако кинематографист рад тому, что авторы новой адаптации решили не копировать его шоу.

Режиссёр «Сёгуна» 1980 года считает, что недавний сериал от FX непонятен американской аудитории
2525
2323
66
33
Сочувствую его окружению. Если кому-то настолько доступный и продуманный сериал оказался сложным, где действующих кланов и фракций в два раза меньше, чем в попсовой игре престолов, то это какой-то фейспалм.
[]