Как сделать удар в game maker

Обновлено: 08.07.2024

При использовании кода 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 на другой кадр, когда это необходимо. Хотя это действительно зависит от того, о чем идет речь во втором кадре.

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

И снова рад приветствовать всех вас на своем канале! В прошлых двух уроках мы с вами создали уровень с кирпичами, биту и мяч. Научили биту двигаться влево и вправо, сделали так, чтобы бита упиралась в стены.

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

Запускаем мяч

С прошлых уроков мы в мяч добавили всего одну строчку кода в событии шага:

Этот код "заставлял" мяч приклеиться к бите и двигаться вместе с ней. Но если мы запустим мяч, то он не сможет летать, так как его x координата будет постоянно привязана к x координате самой биты. По этому давайте введем еще одну переменную, которая будет отвечать за то, стоитли у нас мяч на бите или запущен в полет.

Давайте добавим событие создания (Create) в объекте мяча и объявим в нем переменную:

Это булева переменная. Что это значит? Булева переменная - это та, что может иметь только два значения: true (истина) или false (ложь). Их можно заменить соответственно: 1 (истина) или 0 (ложь).

Я назвал переменную fixed, что значит "зафиксирован", и присвоил ей значение true (истина). Т.е. логически это можно понять как то, что при создании мяча, он зафиксирован. Теперь давайте подправим код в событи шага мяча:

Т.е. мы добавили проверку условия - если мяч зафиксирован, то его координата будет всегда равняться координате самой биты. Если вы запустите сейчас игру, то увидите, что ничего не изменилось. Но эта переменная нам пригодится далее, думаю вы уже сами понимаете для чего. Когда мы запустим мяч, то просто сменим данную переенную на false и тогда код в скобках <> выполянться не будет и соответственно мяч не будет следовать за битой.

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

1. Введение;
2. Стрельба в одном направлении;
3. Использование переменной для стрельбы в разных направлениях;
4. Создание паузы между выстрелами;
5. Уничтожение пули, когда она пропадает из вида.

ВВЕДЕНИЕ

Вопрос "Как научить компьютерного персонажа стрелять?" часто задается на различных форумах! Данный урок предназначен именно для тех кто еще не знает как это делается или тех, кому нужна дополнительная информация.

Снаряд или пуля это некий объект, созданный в определенном месте, запрограммированный на движение в нужном направлении и уничтожающий другой объект, с которым он сталкивается.

Если Ваши пули должны на протяжении всей игры перемещаться только в одном направлении, например как в играх стиля "Space Invader", тогда все достаточно просто, но вот когда встает вопрос о перемещении пуль в различых направлениях - тогда реализация данной системы несколько усложняется.

Направление движения любого объекта расчитывается по сторонам света (для примера можно использовать компас). В дальнейшем рекомендуем использовать предлогаемую схему при выборе направления полета ваших пуль (снарядов).

Перед тем как приступить непосредственно к прочтению и реализации урока, предлогаем Вам запустить Game Maker (мы используем версию 4.2a) и создать все необходимое, а именно:

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

СТРЕЛЬБА В ОДНОМ НАПРАВЛЕНИИ

В самом начале урока (в соответствии с компасом) выбираем направление для полета нашей пули.

В событии CREATE объекта вашей пули поместим действие 'Set direction and speed of motion' - это такая иконка (с синими стрелками, торчащими в разные стороны) и затем укажем желаемое направление полета пули, введя соответствующую цифру в окошке 'direction', после чего укажем скорость с которой наша пуля должна перемещаться - введя соответствующую цифру в поле 'speed', в окошке RELATIVE галочку ставить не нужно.

Теперь в объекте главного игрового персонажа в событии выстрела (в нашем случае это клавиша 'Space') поместим действие 'Create an instance of an object' - иконка (светящаяся лампочка) которая находится во вкладке OBJECTS - выбираем спрайт пули и устанавливаем координаты создания пули X=0, Y=0 при этом пуля будет создана в верхнем левом углу комнаты. Чтобы образец пули был создан рядом со спрайтом главного героя необходимо в поле RELATIVE поставить галочку, если Вы забыли ее поставить, то вернитетесь и сделайте это.

Теперь, запустим нашу игру и проверим что получилось - выстрелив (при нажатии клавиши "Space") мы видим что пуля создается в верхнем левом углу, относительно спрайта нашего главного героя (это произойдет если размер спрайта пули отличается от размера спрайта игрового персонажа), после чего она летит в установленном направлении.

Для этого нам необходимо выяснить высоту и ширину спрайта главного игрового персонажа - данная информация позволит легко и просто создать нашу пулю в нужном месте.

Теперь пуля должна быть создана правильно без смещений.

ИСПОЛЬЗОВАНИЕ ПЕРЕМЕННОЙ ДЛЯ СТРЕЛЬБЫ В РАЗНЫХ НАПРАВЛЕНИЯХ

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

IMAGE_SINGLE - команда, которая в спрайте состоящем из нескольких изображений (фреймов), использует фрейм с определенным индексом.

Создаем спрайт для главного игрового персонажа в котором он расположен (смотрит) во всех 4 направлениях (вверх, вниз, влево и направо).

ОБРАТИТЕ ВНИМАНИЕ: Если Вы хотите чтобы Ваш игровой персонаж был анимированный, тогда придется использовать 4 мульти-фреймных (анимированных) спрайта, вместо одного спрайта с 4 персонажами развернутыми (смотрящими) в разные стороны. Рассматриваемая ниже методика не будет работать, при использовании более чем одного спрайта.

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

    ------------------------------ врезка -----------------------------
    <
    if (player.image_single = 0)
    <
    x = player.x+player.sprite_width/2-[ПШП];
    y = player.y-[ВП];
    direction = 90;
    >
    if (player.image_single = 1)
    <
    x = player.x+player.sprite_width;
    y = player.y+player.sprite_height/2-[ПВП];
    direction = 0;
    >
    if (player.image_single = 2)
    <
    x = player.x+player.sprite_width/2-[ПШП];
    y = y+player.sprite_height;
    direction = 270;
    >
    if (player.image_single = 3)
    <
    x = player.x-[ШП];
    y = player.y+player.sprite_height/2-[ПВП];
    direction = 180;
    >
    speed = 2
    >
    ---------------------------- врезка ---------------------------

[ШП] = Ширина Пули
[ВП] = Высота Пули
[ПШП] = Половина Ширины пули
[ПВП] = Половина Высоты Пули

Когда Вы будете добавлять ваши значения, НЕ используйте скобки [], только указывайте цифру.

    if (player.image_single=0)
    <
    x = player.x+player.sprite_width/2-[ПШП];
    y = player.y-[ВП];
    direction=90;
    >
    x = player.x+player.sprite_width/2-[ПШП];
    y = player.y-[ВП];
    direction = 90;

ОК с первой строкой разобрались. теперь давайте рассмотрим следующее уравнение.

Оставшиеся части изучаемого сценария несколько отличаются друг от друга, но тем не менее все они используют одни и те же 'правила поведения', а последняя строка сценария "speed=2" устанавливает скорость, с которой наша пуля перемещается, увеличивая данное значение мы увеличим скорость.

СОЗДАНИЕ ПАУЗЫ МЕЖДУ ВЫСТРЕЛАМИ

    ---------------------- врезка ---------------------
    <
    if (canshoot=1)
    <
    instance_create(x, y, bullet);
    alarm[0]=room_speed/2;
    canshoot=0;
    >
    >
    --------------------- врезка -----------------------

В заключении мы должны присвоить для переменной canshoot стартовое значение, иначе при использовании вышеприведенного сценария мы получим ошибку, для этого в событии CREATE объекта игрового персонажа добавляем действие X=2 с такими же установками, какие мы использовали в событии ALARM 0.

УНИЧТОЖЕНИЕ ПУЛИ, КОГДА ОНА ПРОПАДАЕТ ИЗ ВИДА

Единственную вещь которую не стоит забыть выполнить, это уничтожить пули улетающие за границы комнаты. Это очень просто сделать - используя действие 'Destroy the instance' (иконка с мусорным баком), поместив ее в событии OUTSIDE бъекта пули.

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

Если же у вас появится желание предложить на всеобщее обозрение свои уроки или просто интересную информацию по созданию игр при помощи GameMaker, то милости просим, присылайте свои работы на наш E-Mail, с указанием темы 'Tutorial' или непосредственным указанием на предмет урока. Мы обязательно опубликуем вашу работу на нашем сайте с обязательным указанием автора!

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

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

Для кого предназначен движок GameMaker: Studio?

В Master коллекции движка GM:S реализована кроссплатформенная совместимость для настольных компьютеров, HTML5 и мобильных устройств (как для Android, так и для iOS). Кроме того, имеется возможность интеграции системы управления версиями и монетизации (например, реклама и покупки в приложении). Общая стоимость master коллекции составляет около $800 долларов на момент написания этой статьи. Поэтому этот движок идеален для:

  • Любого желающего кто интересуется кроссплатформенной разработкой
  • Инди-команд разработчиков с небольшим бюджетом

Низкий порог вхождения в GM:S возможен благодаря интеграции drag-and-drop интерфейса. Таким образом, это фантастический инструмент для людей с небольшими знаниями программирования в качестве первого опыта; этот интерфейс является отличным способом изучить процесс выполнения программы и некоторую базовую логику.

Благодаря своим возможностям управления, GM:S позволяет разработчикам быстро создавать и запускать очень простые игры, что отлично подходит для игровых джемов и создания игровых прототипов.

Что в нем хорошего

GM:S очень хорош в управлении ресурсами, включением ресурсов в код, обеспечивает легкий способ изменения логики игровых объектов и событийное программирование.

Управление ресурсами

Как только разработчик создал спрайт, добавить его в GM:S можно за несколько кликов. После импорта спрайта, модификации могут быть сделаны уже в GM:S.

Creating a sprite

Создание спрайта.

Интеграция ресурсов в код

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

Изменение логики игровых объектов и событийное программирование.

Редактор игровых объектов — это отличное средство обучения, для новичков в разработке игр, и предоставляет удобный способ изменения логики игрового объекта. Как вы можете видеть на этом скриншоте, GM:S позволяет вам писать код для конкретных событий:

Modifiying game object events
Modifiying game object events
Modifiying game object events

Модификация событий игрового объекта.

Для кого это не подойдет?

  • Людям, которые хотят создать полнофункциональную игру, нажатием нескольких кнопок. Для великих игр потребуется время.
  • Для тех, кто хочет разработать следующую грандиозную MMO. Создание сетевых игр является относительно новым направлением для GM:S, и для создания многопользовательских игр есть инструменты получше.
  • Элитные программисты которые требуют, чтобы их язык не мог управлять собственной памятью. GM:S - это не C/C++, и не является конечным языком, ориентированным на производительность. (Нельзя сказать, что производительность здесь плохая, просто C/C++ по-прежнему остается королем этой категории.)

Что в нем плохого

GML не является объектно-ориентированным языком в прямом смысле этого слова. Существуют игровые объекты, у них есть свойства, и можно даже создавать отношения типа родитель-потомок. Однако объекты не имеют методов. Для выполнения операции над объектом, вам нужно будет использовать его идентификатор экземпляра внутри скрипта. Вначале это может вызвать путаницу для тех кто пришел из объектно-ориентированных языков.

GM:S поддерживает 3D, но это не главное. Нет 3D-редактора, отсутствует программа импорта 3D моделей, а код для работы с трехмерной графикой довольно запутан. Если вас интересуют 3D-игры, я рекомендую вам использовать другой инструмент. В будущем 3D может стать более приоритетным для YoYo Games (компании, владеющей GM:S), но на данный момент это явно последнее в списке.

Где я могу получить GameMaker: Studio?

Ниже приведено сравнение различных версий GameMaker, взятых с веб-сайта YoYo Games:

feature compare
feature compare
feature compare

Как вы видите, бесплатная версия (Studio) довольно ограничена, но это отличный способ увидеть рабочий процесс и расположение инструментов, а также потратить некоторое время на изучение языка.

Обновление: Бесплатная версия GameMaker: Studio теперь та же, что и стандартная версия! Для получения дополнительной информации см. GameMaker: Studio будет бесплатной.

Стандартная версия отлично подходит для разработчиков одиночек, которые только планируют разработку компьютерных игр; Профессиональная версия идеально подходит для небольшой команды разработчиков планирующих переходить в конечном итоге на кроссплатформенную разработку, поскольку они могут добавлять различные модули с течением времени после получения некоторого дохода; и Master Collection отлично подойдет для небольших команд, которые являются частью созданных студий, и хотели бы использовать кроссплатформенную разработку с самого начала.

GM:S также доступен в Steam, но я бы рекомендовал не покупать его там, так как YoYo Games не знает, что вы его приобрели, и, следовательно обладателям их продукта будет больше хлопот в отделе обслуживания клиентов. Кроме того, они иногда предлагают дешевые апгрейды для тех, у кого уже есть определенная версия GM:S, и они не могут дать то же обновление пользователям купившим в Steam. Кроме того, если вы покупаете у Steam, то необходимо войти в Steam, чтобы запустить GM:S, а это может раздражать.

Обучение GameMaker: Studio

GM:S предлагает два различных способа создавать игры. Первый это так называемый интерфейс Drag and Drop (сокращённо DnD). Он довольно мощный и позволяет создавать сложную логику. Однако, он не такой мощный, как второй вариант: использование языка программирования GameMaker Language (сокращённо GML). GML - это прекрасный язык сценариев, который может делать все, что может делать DND, и многое другое.

Начало работы

После того, как вы загрузили версию движка GM:S которая соответствует вашим потребностям, вам следует ознакомиться с учебными материалами, которые поставляются вместе с GM:S. Их можно найти во вкладке Tutorials после того, как вы откроете GM:S.

В начале уроков будет показано, как использовать drag and drop интерфейс, а более поздние руководства начинают охватывать язык программирования GML. Самое приятное в предложенных уроках - это то, что они фактически добавляют окно к интерфейсу, в котором вы узнаете, как создавать каждую игру, поэтому вам не нужно обращаться к веб-странице - все доступно изложено для вас в GM:S!

Для самого продвинутого обучения можно посмотреть демки на вкладке Demos после запуска GM:S. Они не откроют окно обучения, но они предоставляют доступ ко всему используемому исходному коду, чтобы можно было просматривать его, запускать отладчик и наблюдать за тем, что происходит, так что вы получите хорошее представление как использовать их методы в своих играх.

Руководство


Руководство в программе GM:S

Если вы выполняете поиск как в прилагаемом руководстве, так и в онлайн-руководстве и не можете найти ответы, не бойтесь! На reddit существует большое сообщество /r/gamemaker и есть официальные форумы. Кроме того, имеется отличный сайт полон инди-разработчиков, некоторые из них часто используют GM:S на форумах TIG. Эти сообщества полны полезных людей, поэтому не бойтесь задавать свои вопросы!

Расширения

Если вам не хватает встроенных функций движка GameMaker, не волнуйтесь; он расширяемый! Бесплатная версия не позволяет использовать расширения, но в платной версии это возможно.

Что могут делать расширения?

Расширения добавляют новую функциональность, изначально не предусмотренную YoYo games. Вот некоторые примеры:

GiiMote - позволяет разработчику интегрировать WiiMote элементы управления в свою игру, добавляя функции, которые опрашивают состояние WiiMote (положение и нажатие кнопок).

FX Creator Extension - упрощает создание таких эффектов, как погода, лучи и брызги воды.

Взаимодействие с базами данных с помощью SQL - позволяет вашей игре подключиться к базе данных SQL, получить данные в виде строки, а затем использовать их в игре. Расширение добавляет такие функции, как TestDatabaseConnection и ExecuteSQL так, что вы можете получить данные обратно в виде двух строк кода.

Одно серьезное ограничение - некоторые расширения несовместимы с мобильными платформами.

Где найти расширения

Самые лучшие места, которые я нашел, это официальный сайт ресурсов и неофициальный сайт под названием GMToolbox.

Как их установить

  1. Необходимо загрузить расширение - это должен быть файл .gex .
  2. Щелкните правой кнопкой мыши папку Extensions в GM:S и выберите Add Existing Extension.
  3. Это должно вызвать диалоговое окно, и в правом нижнем углу вы увидите кнопку с надписью Install. Нажмите ее.
  4. Откроется другое диалоговое окно со списком установленных пакетов (возможно, пустым). Справа от этого окна есть кнопка, которая снова с надписью Install. Нажмите ее.
  5. Это открывает еще одно диалоговое окно; перейдите в папку, в которой сохранен файл .gex , щелкните его и нажмите кнопку Open.

Учебные ресурсы

Уроки инди-разработчиков

Список уроков Chevy Ray - Chevy Ray является разработчиком Flash-игрового движка FlashPunk, частый соперник на Ludum Dare и разработчик нескольких классных игр. Он написал несколько уроков по GameMaker, и это подборка тех его материалов, которые он считает лучшими. Уроки охватывают такие темы, как масштабирование вида, оптимизация скорости, параллакс-скроллинг.

Серия уроков Derek Yu's - Derek Yu является членом TIGSource и разработчиком Spelunky. Эта серия уроков для более старой версии GameMaker, но вы по-прежнему можете легко пройти ее. Это полное пошаговое руководство по созданию космической сайд-скроллер стрелялки; по мере создания вы узнаете, как работают игровые объекты, как создавать прокручивающиеся фоны, как создавать спрайт шрифты и множество других замечательных тем. Обязательно к прочтению.

Другие уроки и руководства

Официальные уроки - официальные уроки посвящены созданию нескольких игр разных стилей (некоторые из них 3D-игры, поэтому эти уроки могут быть особенно глубокими, если вы будете использовать GM:S). Кроме того, имеется урок по созданию многопользовательских игр, который, по моему мнению, является одним из лучших в Интернете по изучению создания многопользовательской игры в GM:S.

Я рекомендую их для людей, которые хотят разработать определенный тип игры и желают узнать как разрабатывать игры подобного типа, но если вы ищете урок для начинающих, я рекомендую уроки Derek Yu's.

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

Становимся профессионалом

Несколько GameMaker игр стали коммерчески успешными, и есть много других великолепных GameMaker игр, которые являются прекрасными примерами того, что возможно создать используя GM:S.

Отточеные игры

Spelunky - оригинальная версия Spelunky была создана в GameMaker; более новая XBLA версия и новая ПК-версия игры, нет. Это коммерческий успех, версия, созданная в GameMaker, бесплатная.


A Nation of Wind - эта игра скрытый драгоценный камень и в нее стоит определенно поиграть.


Dustforce - вышла в Steam, это не был огромный коммерческий успех, но тем не менее, это отличная игра!


Коммерческие хиты





Заключение

GameMaker: Studio отлично подходит для новичков и профессионалов. Его великолепный код и функции управления ресурсами, в сочетании с относительно низкой ценой, делают его великолепным игровым движком для небольших команд и независимых разработчиков, обладающих приличным опытом программирования, и его доступность, и событийность, и также система drag-and-drop на основе действий, делает его отличным движком для тех, кто практически не имеет опыта программирования.

Надеюсь, вам понравилось читать этот обзор, и теперь у вас есть хорошая идея, как начать работу с GM:S. Если вы считаете, что я, что-то упустил или вам нужна дополнительная информация, не стесняйтесь, напишите мне в комментариях. Удачи вам на вашем пути разработчика игр!

10 советов и трюков GameMaker Studio 2. Часть 1.

Функции создания экземпляров, такие как instance_create_layer и instance_create_depth - одни из самых основных функций, которые разработчики используют в Game Maker. Но не все знают, что они возвращают идентификатор созданного экземпляра, который можно сохранить в переменную для дальнейшего его использования.

Macros и Enums не нуждаются в вызове для инициализации - достаточно скрипта, в котором хранятся ваши макросы и энумераторы, и они будут загружены в ваш проект.

Для экономии времени вы можете щёлкать средней кнопкой мыши на ресурс или функцию в редакторе кода. GMS2 откроет соответствующий объект или, если это функция, то страницу со справкой.

GMS2 поддерживает тернарные операторы, которые предоставляют элегантный подход к условным выражениям: ? :

Вместо использования оператора if вы можете заносить результат выражения сразу в переменную.

Дельта-синхронизация - это количество микросекунд, прошедших с последнего кадра. К примеру, вы можете связать перемещение с delta_time для обеспечения постоянной скорости движения на всех устройствах, независимо от частоты кадров.

Простой пример, как постепенно поворачивать объект к курсору

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

Простой способ для мигания спрайта или текста с заданным интервалом:

В меню Preferences -> Objects вы можете создать шаблон, который будет использоваться по умолчанию для всех новых сценариев и событий. Это может сэкономить вам очень много времени.

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