2009-04-13 3 views
33

Итак, я закончил тем, что написал свой собственный игровой движок, основанный на вершине XNA, и мне просто интересно, что еще мне нужно, чтобы сделать полный движок.Что должно быть в 2D игровом движке?

Это то, что в двигателе:

  • Физика (Предсказатель физика)
  • частиц двигателя (Mercury Project)
  • 2D Камеры
  • ввода Обработка
  • управления Screen (меню, пауза Экран и т. Д.)
  • Sprite (Анимация, листы спрайтов)
  • И вещи XNA, такие как Sound.

Я пропустил что-нибудь, что может иметь решающее значение для игрового движка?

+1

Ничего против SO, но вы, вероятно, будет лучше разместив это на форумах gamedev.net. – ryeguy

+0

Хорошее (и гибкое) обнаружение столкновения. –

+1

Распознавание столкновений находится в двигателе Farseer Phsyics –

ответ

18

Тема или рынок для вашего двигателя. Если вы делаете что-либо помимо основного основного графического движка, вам нужно сосредоточиться на рынке вашего движка, например, RPG, стратегии, головоломки, платформера, действия или FPS (нормально, а не FPS).

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

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

+0

+1 Случай с Unreal Engine: Последний остаток. Отличная игра (RPG), но графика была настолько беспорядочной в тех точках, которые вы не поверите. Все это происходит из-за того, что RPG имеют гораздо более эффектные эффекты, которые происходят сразу по сравнению с FPS, и поэтому им нужно улучшить деградации в двигателе частиц, когда сразу происходит несколько эффектов! –

1

3d Ускорение должно быть в двухмерном двигателе.

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

+0

У вас есть пример того, как это произойдет? –

+1

Xna уже использует 3d acc. Так что это автоматически встраивается. Действительно, это просто означает, что он использует gpu - в моем понимании –

+0

Действительно, XNA Sprites уже выполнены с помощью 3D-ускорения, поэтому вам не нужно беспокоиться об этом. –

6

Пара идей:

  • Искусственный интеллект (возможно, просто в AI коммунальные услуги, такие как pathfinding algorithms)
  • Сохранение всего или части состояния игры (для приостановки и перезапуска в более позднее время или сохранения высоких результатов).
+0

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

+0

Я думал больше о простых алгоритмах AI (таких как враг, который всегда движется к вам), а также утилит (т. Е. Алгоритмах поиска пути). – gnovice

+0

+1: очень хороший * учебник. Спасибо, что поделились ею. –

12

Еще несколько вещей:

  • Путь поиска - очень полезные для ИИ
  • AI - возможно, - зависит от того, как родовое вы хотите, чтобы двигатель быть.
  • Рекорды
  • Повторы - делает рекорды намного интереснее, так как вы можете их фактически наблюдать.
+0

Знаете ли вы о каких-либо хороших библиотеках XNA/C# для поиска путей? Или вы просто рекомендуете читать об используемых алгоритмах и создавать решение, которое работает для конкретной игры? – Venesectrix

+0

Я никогда не использовал XNA, поэтому я действительно не знаю хороших библиотек.Я уверен, что уже есть много отличных, но иногда хорошо читать об алгоритмах и реализовывать их самостоятельно. – Zifre

+0

@Venesectrix: Pathfinding (A * - самый популярный алгоритм) очень прост в реализации, и для него есть много ресурсов. См. Http://www.ziggyware.com/readarticle.php?article_id=162 для связанного с XNA. – Noldorin

1
  • Анимация рамка, так что вы можете сказать: возьмите этот спрайт, переместить его в этом направлении, folowing этого пути, используя эту скорость, ускорение и такую ​​
  • Базовой систему с графическим интерфейсом. Не реализовать весь Windows, но основные вещи, как указатель и кнопки, и такой - держать его основной компонент
  • отладки для отображения FPS, количество спрайтов и такие

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

0

Инструмент повторения плитки. Что-то, что позволяет пользователю добавлять/создавать плитки и манипулировать ребрами для плавного шаблона повторения.

2

Это зависит от игры, но еще одна вещь, которая часто необходима, - это хорошая сетевая инфраструктура.

Многие современные игры, в том числе 2D-игры, похоже, имеют определенную форму сетей.

5

Я думаю, что вы рассмотрели общие требования 2D-движка. Единственное, что я пропустил бы в этом списке будет:

  • GUI библиотека

Кроме того, чтобы сделать развитие процессов проще:

Вы можете также добавить еще один слой поверх существующего XNA в вещи:

  • Весьма худой реализации Сеть/Lobby
  • Более абстрактные обработки нескольких контроллеров (DROPIN/Dropout во время игровых сессий, как увидеть Resident Evil 5 Coop) - возможно, на основе событий

Наконец, вы можете добавить некоторые «готовые» шейдеры. Может быть, получить вдохновение от прекращенного FaceWound (от разработчика Garry's Mod).

+1

+1 для упоминания GUI –

1

Хорошее обнаружение столкновений очень полезно. Если вы его эффективно реализуете, это действительно сокращает время, необходимое для каждого кадра. Кроме того, в моем движке (для Pygame) у меня есть способ разделения главного экрана на несколько подэкранов, которые я считаю полезными.

0

В зависимости от типа целевой игры включите навигационный график (ы) с аннотациями узлов и краев. (Хорошо для многих игр, но не столько для прокрутки маркеров, которые сделаны с 2D-графическими двигателями)

  • Компонент для их создания (с помощью алгоритма заполнения заливки).
  • Обязательно включите все основные алгоритмы поиска/планирования пути (A */Dijkstra/etc.), Чтобы пересечь эти графики.

Ошибка в том, что вам нужно будет определить, что такое «карта» для двигателя, что может ограничить пользователей двигателя.

Похожие вещи:

  • Место Триггеры на основе (игрок входит невидимый круг и что-то происходит - очереди Cutscene, начать засаду, и т.д.). Я бы сказал, предоставить базовый класс для триггера и реализовать некоторые базовые, чтобы показать, как это делается (например, оружие и т.д.)
  • Некоторые игровые движки реализуют сети (хотя это своего рода часть «материала xna»)
0

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

1

Простое обнаружение столкновения с помощью пикселя. НЕ ФАЗА. Простые процедуры рисования, такие как drawline, drawcircle и т. Д.

0

Um. Этот список является «внутренним» списком. Сделать отличный движок - сделать отличный «внешний» список. Посмотрите, например, на UE3 - здесь есть отличные инструменты. Вам нужны инструменты для создания мира, создания оптимальных пакетов ресурсов (он также должен быть во внутреннем списке ;-)), для спецификации объекта столкновения и т. Д. Плюс, чтобы добавить к Organiccat answer, вы должны принять решение о техническом уровне. Вы можете пойти на простые спрайты или вы можете захотеть причудливых эффектов (поэтому нужны шейдеры, и вам нужна инфраструктура)

56

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

Что должно быть в вашем двигателе заключается в следующем:

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

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

Как только у вас есть эта игра, напишите еще одна игра. Затем, когда вы это сделали, изучите код второй игры. Сколько из этого было использовано в первой игре?

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

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

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

+1

Какой приятный и простой способ взглянуть на него, jalf (+1)! Это сказало; Я почти уверен, что вам понадобится список «основных функций» (в зависимости от того, какую игру вы делаете), с чего начать, когда вы начинаете создавать первую из двух игр. – Leif

+1

@Leif: почему? Если эти функции фундаментальны, то вам все равно придется добавить их в какой-то момент, так что нет никакого вреда в ожидании, пока они вам не понадобятся. И кто знает, может быть, они не настолько фундаментальны в конце концов. может быть, вы закончите с полной игрой без этих – jalf

+0

. Я вижу, как это может иметь смысл в некоторых ситуациях, но может быть трудно получить несколько надежное чувство «полной полноты», работы впереди и вашего прогресса, без какого-либо определения работа, необходимая для достижения ваших целей. Я думаю, что попытка составить план всегда хороша, тогда можно определить приоритеты и разделить работу на разделенные части. Если все сделано правильно, я думаю, что «план» может действовать как важные ориентиры и мотивационный фактор, даже если вы вносите изменения в соответствие с требованиями продукта. «Неявное планирование», по моему опыту, оказалось очень продуктивным. – Leif

2

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

1
  • 2d система освещения - хорошая передовая функция. Вы можете использовать для этого Krypton.
  • Редактор карт. Или даже лучше поддерживать любой формат карты плитки, совместимый с «Tiled Map Editor». Поэтому вы можете просто использовать Tiled.
  • Планировщик/Таймер для игровых действий.
  • Эффекты экрана, такие как поворот страницы, выцветание и т. Д., Чтобы сделать приятные переходы между экранами.
  • Игровые уровни со сборкой в ​​параллаксе тоже будут полезны.
  • В игровой консоли для обработки команд или скриптов без перезагрузки.
  • Простая загрузка текстурного атласа как спрайты или анимация.
1

Хорошая работа, Мы (я и некоторые из моих друзей) работает на движке игры тоже на самом деле, У нас уже есть все, что вы сказали, но, кроме того, мы получили следующее.

  • аудио менеджера: простой класс для работы с фоновой музыкой и звуками эффектов в XNA.
  • видео-менеджер: это не сложно, простой класс для обработки видео играет в XNA.
  • эффекты менеджер: отвечает за такие вещи, как цветок, размытость, черный/белый цвет .. и т.д.

Good Luck :)

Смежные вопросы