Как сделать управление мышкой в game maker

Обновлено: 07.07.2024

Я пытаюсь создать систему щелчка и перетаскивания в GameMaker 2, например, в одежде или, может быть, в головоломке. Как я могу заставить объекты щелкнуть и перетащить?

Я пытаюсь получить его, чтобы я мог нажать и перетащить предмет одежды, например, и перетащить его на персонажа, а затем перетащить еще одну одежду.

Если все ваши объекты перемещаются в позиции мыши одновременно, возможно, их событие Step выглядит следующим образом:

Или, по крайней мере, это эквивалент GML того, что происходит.

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

Шаг 1: отдельный флаг экземпляра

Мы даем каждому экземпляру переменную со стартовым значением false :

Мы устанавливаем значение true при нажатии кнопки мыши и ; и установите для него значение false при отпускании мыши. Мы можем сделать это, разделив код между нажатием левой кнопки :

И Глобальное левое выпущено событие:

Наконец, наше событие Step будет проходить следующим образом:

Теперь объекты перетаскиваются, только если щелчок мыши произошел внутри маски столкновения.

Шаг 2: флаг глобального экземпляра

Эта переменная будет содержать id экземпляра, который должен перемещаться. Итак, вместо подхода true / false у нас есть переменная noone / id , которая указывает, какой конкретный экземпляр перемещается. Так:

При использовании кода draw_sprite в game maker studio 2 gml анимация устанавливается на смехотворно быструю скорость. Событие розыгрыша выглядит следующим образом.

У спрайта два кадра установлены на 1 секунду, но когда draw_sprite (); code установлен на -1 или sprite_index, он воспроизводит примерно 100 кадров в секунду. Я пробовал установить скорость спрайта, но он ничего не делает.

не имеет отношения к вашей текущей проблеме, но вы делаете if-утверждение для каждого бита здоровья? Если это всего лишь 3 жизни, это не проблема, но если вы расширяете это, попробуйте вместо этого использовать цикл for.

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

Ответы 3

А пока я просто сделаю простой таймер, который вычитает 1 из переменной в каждом кадре, и когда он будет равен 0, я заставлю его изменить sprite_index. Вероятно, это долгий путь, но я все еще открыт для любых предложений по приведенному выше коду.

Просто вопрос, но если вы хотите использовать только один кадр, тогда почему у спрайта все равно два кадра? это часть анимации, или вы хотите установить другой кадр только при выполнении определенного условия? Я думаю, что лучше сделать два отдельных спрайта для кадров, а затем изменить sprite_index на другой кадр, когда это необходимо. Хотя это действительно зависит от того, о чем идет речь во втором кадре.

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

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

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

Чтобы помочь вам быстрее овладеть инструментами Game Maker, мы собрали 2 сборника видеоуроков, где по шагам, наглядно, демонстрируется процесс создания игр.

Изучаем основы Game Maker

Базовый курс уроков Game Maker, поможет новичкам освоиться в программе и создать свою первую 2D игру. Автор видео подробно рассказывает, что нужно делать, как и зачем.

Учимся настраивать движение персонажей (влево, вправо, вниз и вверх).
Предназначение переменных в конструкторе Game Maker. Очень полезный урок.
Задаем параметр прочности (здоровья) для врагов.
Данный видеоролик расскажет вам, как добавить в игру экшена в виде перестрелок.
Задаем своему персонажу уровень здоровья и выводим его на экран.
Учимся основам создания искусственного интеллекта, на правдивых и ложных значениях.
Рандомные, или случайные события, помогут вам создать игру, где каждый уровень будет уникален. Смотрим и вникаем.
Настраиваем автоматическое движение за любым объектом. Пригодиться для создания виртуальных спутников.
Задаем дистанцию для определенных объектов.
Чтобы объекты не пропадали за пределами окна, стоит заранее настроить область их движения.
Учимся создавать многопользовательские игры, в которые можно играть с друзьями через интернет.
Даем врагам возможность вести прицельный огонь по заданным целям.
Добавляем в игру окно инвентаря для хранения и использования виртуальных объектов.
Добавляем возможность сохранения данных игры в отдельный документ.
Подробное объяснение понятия “цикл” и примеры его использования в разработке игр.

Знакомимся с жанрами

Сборник уроков для любителей. В данных видеороликах демонстрируется процесс разработки игр разных жанров. На наглядном примере показывают, как создаются TDS-стрелялки, платформеры, раннеры, стратегии и редакторы карт.

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

О, наконец-то практика! Но сначала все-таки узнаем, что движение тела, не что иное, как изменение его координат. Разумеется, в 2D играх, а значит и в GM, используется Декартова прямоугольная система координат. К сожалению (или к счастью), в GM ось ординат Y направлена вниз, а не вверх (ось абсцисс, как принято, направлена вправо). Вот картинка:

Изменяем х и у - двигаем объект! Элементарно, Ватсон! Достаточно в step событии объекта разместить код:

Важно: x и y - так называемые свойства объекта, являются встроенными разработчиками переменными, значения которых можно менять, и которые влияют на характеристики объекта и его поведение. Помимо всего, у объектов очень много свойств, к примеру, sprite_index или depth. Это также означает, что вы не сможете создать переменную с именем свойства. Но сейчас важны только свойства, относящиеся к движению. Примечание Uber

И, о да! Результат налицо, наш подопытный кролик потопал направо. Также можно и изменять координату у. Ради эксперимента, поиграйте со значениями.
А если движение на протяжении всей игры почти не изменятся? Как, например, движение платформы в платформере (влево-вправо, вверх-вниз). Для этого у каждого объекта есть свойства hspeed (от англ. horizontal speed), vspeed (vertical speed) и направление движения - direction (измеряется в градусах, от 0 до 360). В GM направления опять же немного отличаются от привычных, а именно:

  1. Создать объект, поместить его в комнату.
  2. В событии create объекта сначала попробовать изменять координаты (х-=2, у+=1, например). Какой можно сделать вывод?
  3. Теперь вместо изменения координат задайте hspeed и/или vspeed (например, hspeed=3) Понаблюдайте за эффектом.
  4. Ну и почти последний шаг: задайте переменную speed (скорость, она является результатом сложения hspeed и vspeed) и direction, заодно.
  5. Порадуйтесь своему успеху!

Кроме x и y, у нас есть ещё свойства, относящиеся к передвижению. Вот их список:
xprevious Отражает координату экземпляра объекта по оси X в предыдущем шаге.
yprevious Отражает координату экземпляра объекта по оси Y в предыдущем шаге.
xstart Отражает координату по оси X в текущей комнате при старте.
ystart Отражает координату по оси Y в текущей комнате при старте.
friction Отражает текущее трение экземпляра объекта (пикселей за шаг).
Трение просто постоянно замедляет объект, пока его скорость speed не упадёт до нуля. Примечание Uber
gravity Отражает силу гравитации для текущего экземпляра объекта (пикселей за шаг).
Стоит отметить, что это не скорость, с которой полетит объект в заданном gravity_direction направлении, а ускорение, которое получает объект и измеряется в пикселях за шаг в шаге (или шаг в квадрате). Примечание Uber
gravity_direction Отражает направление гравитации в градусах для текущего экземпляра объекта (270 - вниз).

Читайте также: