Как сделать онлайн игру в rpg maker

Добавил пользователь Валентин П.
Обновлено: 19.09.2024

Представляем видео курс по изучению игрового движка GameMaker Studio. За курс мы научимся работать с Game Maker Studio 2 и создавать в нём небольшие 2D игры. Также мы создадим небольшую RPG игру с анимациями и функциями.

Видеоурок

Информация про GameMaker

Движок GameMaker – это специальный игровой движок, что позволяет создавать игры без каких-либо знаний в программировании. Движок был разработан компанией YoYo Games и первый его выпуск состоялся в 1999 году. Движок в основном предназначен для создания 2D игр, хотя разработка 3D проектов также присутствует.

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

Это лишь небольшой список всех игр, что были разработаны на движке GameMaker.

Установка движка

Работать с движком можно на Windows, Мак и Linux. Разрабатывать игры можно под ПК, телефоны, планшеты, а также можно создавать веб игры для запуска через браузер.

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

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

План курса

За курс мы ознакомимся с игровым движком GameMaker. Мы изучим построение простых 2D игр на основе данного движка, а также создадим полноценную RPG игру. В игре будет анимация, персонажи, функции, дизайн и все стандартные атрибуты полноценной игры.

К концу курса у вас будет достаточно знаний для разработки игр на движке GameMaker 2.

Задание к уроку

Скачайте и установите программу к себе на компьютер.

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

Для установки программы скачайте и установите её с официального сайта .

Дальнейшие действия будут аналогичны с действиями в видео уроке.

Большое задание по курсу

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

Сайт команды New Team, посвященный программированию игр, дистрибьюции и прочим темам, связанным с созданием игр.

среда, 30 мая 2012 г.

Создание врага в RPG Maker VX ACE

Я уже не раз упоминал о конструкторе игр RPG Maker. И вот, захотелось самому в нём что-то создать. Для начала решил вспомнить основы, а заодно поделиться с вами.

Перед вами простой пример того, как создать врага в RPG Maker VX Ace. Данный враг будет находиться на карте, говорить с нами перед боем, а после боя бесследно исчезнет.

Руководство оснащено картинками и комментариями к ним для удобного понимания.

[Программирование плагина RPG Maker MV] [Пример урока 5] Создание мини-игры: Битва танков (часть 1)

  • Автор: Мандарава (угорь верблюд Ло)
  • Weibo: @ pro

Мини-игры в MV могут быть сделаны с использованием событий или плагинов. Эта статья будет использовать плагины для написания игры, похожей на Tank Battle. Цель этой статьи не в том, чтобы показать, как создать полноценную игру с танковым сражением, а в том, чтобы научиться использовать плагины MV для написания небольших игр. Поэтому цель этой статьи - представить соответствующие методы, которые можно использовать для создания мини-игр MV. Я надеюсь, что вы можете сделать ссылку на реализацию этой статьи, чтобы вы могли писать различные типы других мини-игр.

Содержание этой статьи:

  1. Структура игры и внедрение процесса
  2. Загрузка и использование связанных материальных ресурсов
  3. Базовые знания: воспроизведение звуковых эффектов
  4. Базовые знания: резка рамки спрайтового листа.
  5. Базовые знания: использовать анимацию в MV
  6. Анализ класса Scene_TankWarTitle
  7. Анализ класса Sprite_Bullet
  8. Анализ класса Sprite_Explode
  9. Анализ класса Sprite_Tank
  10. Sprite_Enemy анализ класса
  11. Анализ класса Scene_TankWar
  12. Анализ класса Scene_TankWarGameOver

Структура игры и внедрение процесса

Для быстрой разработки и отладки вы можете переписать Scene_Boot.prototype.start Способ заставить игру напрямую войти в титульный экран игры Battle of Tank, когда она запущена Scene_TankWarTitle (Конечно, при окончательном выпуске вы можете добавить событие NPC на карту MV, а затем вызвать команду сценария SceneManager.goto(Scene_TankWarTitle); Давайте откроем игру танкового боя), код выглядит так:

Загрузка и использование связанных материальных ресурсов

Для изображений и звуковых эффектов, связанных с этой статьей, пожалуйста, посетитеВот скачать. mndtankwar Пожалуйста, поместите папку в директорию проекта MV img Под папкой se Поместите аудио файлы в папку в проект audio/se Папка.
Для удобной загрузки изображений ресурсов сначала разверните ImageManager Класс, определить loadTankwar Метод, который используется из img/mndtankwar Загрузите картинку с указанным именем в папку.

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

Базовые знания: воспроизведение звуковых эффектов

использование AudioManager.playSe(se) Для воспроизведения звукового эффекта файл звукового эффекта сохраняется в проекте. audio/se/ По содержанию. Параметры метода se Это не простое имя аудиофайла, а объект с указанными конкретными атрибутами. Этот объект должен указывать имя аудиофайла name , pan (Это может быть связано со значением эквалайзера канала, -1 полностью левого канала, 1 полностью правого канала, 0 означает баланс, другие значения являются двухканальным микшированием ?! Я не уверен насчет цели профессиональной лексики аудио; если вам интересно, вы можете обратиться к нейВот),подача pitch , объем volume , Такие как игра TankWarStart Аудио в качестве примера, se Формат выглядит следующим образом:

Этот метод в основном используется для воспроизведения звуковых эффектов, например, для воспроизведения звуковых эффектов огня и взрыва.

Базовые знания: резка рамки спрайтового листа.

Спрайт-лист предназначен для объединения каждого кадра кадра последовательности анимации спрайта в одно изображение, что удобно для управления и сокращает использование ресурсов, таких как память, во время работы. Цель вырезания кадра - записать положение (координаты), ширину, высоту и другую информацию о каждом кадре в большом изображении, поэтому, когда нам нужно нарисовать различные кадры изображения спрайта, мы можем использовать эту информацию для быстрого получения изображения кадра, которое нужно нарисовать. Расположение области на большой картине.
Ниже приведен список спрайтов (TankPlayer.jpg) танка игрока, используемого в нашей игре. Можно видеть, что спрайт-лист состоит из изображений 4х4 = 16 кадров, каждое изображение имеет одинаковый размер и размещается регулярно. Размер большого изображения составляет 160x160, поэтому размер каждого кадра изображения составляет 40x40.
Первая строка рисунка - это анимационный кадр при ходьбе, когда танк движется вниз, второй ряд - когда танк движется влево, третий ряд - когда он движется вправо, а четвертый ряд - вверх При осуществлении.

1293833-128cfb7fb6469f2d.jpg


Из этого рисунка легко узнать положение, высоту и ширину каждого кадра в этом большом изображении. Прежде всего, высота и ширина каждого кадра изображения составляют 40x40, поэтому информация о положении и ширине первого кадра первой строки равна (Информация о кадре)Да: То есть координаты (0,0), ширина и высота 40х40, второй кадр первой строки: Первый кадр второй строки: Второй кадр второй строки: . И так далее. Мы суммируем это в один makeAnimFrames Глобальная функция, код выглядит следующим образом:

параметр texture Это спрайт-картинка, frameWidth с участием frameHeight Указывает размеры по ширине и высоте изображения кадра. Затем вы можете использовать следующий метод, чтобы вырезать кадр таблицы спрайтов танка игрока выше:

Так получается animFrames Это двумерный массив, каждый элемент которого является одномерным массивом, всего 4 одномерных массива, каждый из которых хранит информацию о кадрах каждого кадра анимации хождения по танку.
PS: ImageManager.loadXXX Метод загрузки картинки не сразу загружает картинку, это просто демонстрация, обычно мы будем в сцене create Загрузите ресурс изображения в метод, а затем хотя бы start Вырежьте кадр в методе.

Так какая же польза от резки таких кадров?Это включает другой метод в MV: Sprite.prototype.setFrame(x, y, width, height) 。Функция этого метода:При отрисовке спрайт-картинки на экран он не рисует непосредственно всю картинку, а только часть картинки. Какая часть рисуется, определяется параметром x, y, width, height Решать. Метод его решения: по координатам на картинке спрайт-листа (x,y) (Верхний левый угол - начало координат) width Широкий, сними height Высокий, конечный закрытый участок. Как показано на рисунке ниже, размер этого рисунка спрайт-листа составляет 144x192 и состоит из кадров 3x4. Размер каждого кадра составляет 48x48. Если для параметра установлено значение x=48, y=48, width=48, height=48 Тогда используйте setFrame При рисовании изображения будет отображаться только изображение кадра в области, обведенной зелеными блоками на рисунке ниже. Оглядываясь назад на определение выше makeAnimFrames Способ, информация последнего кадра, полученная этим способом, определяется следующим образом: var frame=< x: col * frameWidth, y: row * frameHeight, width: frameWidth, height: frameHeight >; Теперь должно быть проще понять, почему я определяю информационную структуру фрейма следующим образом: setFrame Соответствует параметрам в.

1293833-d462c4f439dcc872.jpg

Базовые знания: использовать анимацию в MV

В мини-играх вы также можете напрямую вызывать эффекты анимации, определенные в базе данных MV. Метод также очень прост. Сначала получите экземпляр анимации, а затем используйте один Sprite Спрайт объекта класса, вызов startAnimation(animation, mirror, delay) Метод. Следующий код:

использование $dataAnimations[animationId] Получить анимацию с указанным идентификатором анимации, определенным в базе данных MV. Вот animationId Конкретное значение можно найти в MV 【База данных-анимации】 Просмотреть (какую анимацию использовать, введите здесь ее идентификатор), здесь показана анимация с идентификатором 46. Вызывается после получения анимации sprite.startAnimation(animation, false, 0) Чтобы показать анимацию. Два других параметра здесь, один mirror , Который указывает, нужно ли зеркально отображать анимацию, delay Указывает время задержки воспроизведения.

Анализ класса Scene_TankWarTitle

Этот класс соответствует титульной сцене. Этот класс относительно прост, в create Добавьте фоновый спрайт и название игры Спрайт с логотипом на сцену в методе; update В этом методе определяется, нажимает ли пользователь кнопку ОК или нажимает экран, если это так, входит в поле битвы. Scene_TankWar 。

Анализ класса Sprite_Bullet

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

Sprite_Bullet К этой категории относятся снаряды (пули), выпущенные танками. в initialize Укажите изображение спрайта в методе и установите его начальную скорость по умолчанию. Эта начальная скорость не важна. Пожар в танке fire , Переназначить скорость, включая направление скорости.

Анализ класса Sprite_Explode

1293833-21e2bfeadbd984fe.jpg

Анализ класса Sprite_Tank

Танк имеет три состояния: жив, умирает и уже мертв, и необходимо определить перечисление:

в initialize В методе используйте this._animFrames = makeAnimFrames(texture, frameWidth, frameHeight); Получите информацию о кадре последовательности анимации хождения по танку с листа спрайта, в Sprite_Tank.prototype.updateCurrentFrame Вызывается каждый раз в методе setFrame Метод рисует соответствующие изображения кадра в листе спрайта на экране в соответствии с информацией о кадре и, наконец, формирует анимацию ходьбы танка (конечно, танк еще не обеспечил скорость ходьбы, поэтому это анимация ходьбы на месте), как показано ниже:


Изображение листа спрайта, используемого танком игрока, выглядит следующим образом (размер каждого кадра составляет 40x40).

1293833-128cfb7fb6469f2d.jpg

Sprite_Enemy анализ класса

Анализ класса Scene_TankWar

Анализ класса Scene_TankWarGameOver

Анализ этой статьи относительно прост: вначале я планировал написать процесс сборки всего кода, но после написания 1/3 я обнаружил, что эта статья станет слишком длинной и слишком длинной, возможно, было бы лучше записать ее как видеоурок. Наконец, я решил выдвинуть только базовые знания, а затем просто проанализировать реализацию каждого класса. Самое главное - подробно отметить назначение каждой строки кода в исходном коде. Эта серия требует от вас базовых знаний в области программирования js, поэтому, если вы не выучили js или не имеете понятия oop, вы можете этого не понимать. Рекомендуется сначала проверить книги по js.

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

Как создать РПГ игру на компьютере самостоятельно

Однако, даже с ним, есть тонны вещей, которые порой вымораживают. Например написание сюжетной истории, как сделать, чтобы карты не выглядели отстойно. Как сделать чтобы последний бос не дох с одного выстрела… Проблемы механики, которые я хочу решить, и которые не являются частью стандартного РПГ мейкера. И почему НПЦ ударился о стену, а не пошел по коридору и т. д.?

Это может показаться очень очевидным. Но когда вы начинаете, вы понимаете, что это не так просто, как всем кажется.

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

Самое сложное — нарисовать нормальную карту

Карты на самом деле мой худший враг. И самое что нравится меньше всего — это проектирование карт. Ведь нужно, чтобы она выглядела красиво, но практично ли это?

Я рисую MGSV? (Излишне много времени чтобы побродить, и при этом ничего не делать.)

Имеет ли это смысл при учете другой карты, имеет ли эта карта смысл в сюжете? (Если вы войдете в то, что выглядит как лачуга, и найдете особняк внутри, то игрок просто будет кричать “wtf” на вас… Кроме того, особняки не существуют в бедных, умирающих деревнях.)

Разве карта похожа на то, где человек может нормально существовать. Если нет, то где вы ошиблись, слишком ли она большая, все ли уместно. А может слишком маленькая?

Найти баланс — это постоянная борьба. И особенно в РПГ или в любой игре с прокачкой персонажа. Потому что вы должны учитывать, как игрок будет тратить свое время. И если вам необходимо провести 10 часов на прокачку уровня, то вы наверное облажались… Нужно вернуться к шагу один, переделать все, если вы не можете проследить как это получилось. Нужно оценить, не слишком ли легко или трудно. Кто будет играть в ишру, дети, подростки, взрослые?

Дети не совсем ищут что то вроде Dark Souls. Им нужно что-то, что предлагает нормальную заварушку, но в конечном счете прогибается под вашей мощью. как например Pokémon.

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

Механика тоже важна при создании РПГ

Механика также является целой наукой. Но я думаю, что могу упростить достаточно для этого ответа. Ведь мы можем поговорить о боевой механике и полевой механике. Может ли игрок прыгать вокруг окружающей среды, как в Prince of Persia. И если да, то как это влияет на общий опыт игры, является ли игра платформером?

Что насчет боя, мне нравится этот плагин для RPG Maker MV. Он позволяет мне менять членов партии на тех местах, где удобно. И если кто-то умирает, кто должен был вовремя от лечиться, но получил камнем по голове. Или вы не хотите, чтобы игрок чувствовал, что мог бы продолжать но получил гейм овер, из за того что вы не учли что он может тут погибнуть. и таким способом. Все потому что да, люди не совершенны. Поздравляю, вы выяснили первое правило балансировки, “как может кто-то облажаться в идеально продуманном сценарии, неправильно прокачавшись например”.

Но это все при условии, что все понятно для вас, ивы знаете, как кодировать..

Ну, я надеюсь, что вы можете найти кого-то, кто предлагает механику в качестве открытого источника или готов помочь вам! Насчет графики, вы можете делать анимации, установки. Что насчет текстур и т. д.?

Это 2D или 3D, как это повлияет на вашу игру, презентабельность. Сможете ли вы показать игроку опыт, который вы действительно хотите. Или компромиссы все же будут сделаны, чтобы сделать этот проект возможным?

Музыка, вы можете сочинять или играть на инструменте, может быть и то и то?

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

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

И в заключение…

Становится еще сложнее предположить, что вы не используете что-то вроде RPG Maker или SRPG Studio.

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

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

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