Программирование видеоигр - Video game programming

Программирование игр, подмножество разработка игр, это разработка программного обеспечения из видеоигры. Программирование игр требует значительных навыков в программная инженерия и компьютерное программирование в данном язык, а также специализацию в одной или нескольких из следующих областей: симуляция, компьютерная графика, искусственный интеллект, физика, аудио программирование, и Вход. За многопользовательские онлайн-игры (MMOG), знание дополнительных областей, таких как сетевое программирование и программирование базы данных необходимы. Хотя часто занимаются профессиональным программисты игр, некоторые могут запрограммировать игры как хобби.

Процесс разработки

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

Прототипирование

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

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

Игровой дизайн

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

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

Производство

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

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

С сегодняшним визуально насыщенным контентом программист часто должен взаимодействовать с художественный персонал. Конечно, это во многом зависит от роли программиста. Например, Программист 3D графики возможно, придется работать бок о бок с разработчиками 3D-моделей игры, обсуждая стратегии и соображения дизайна, в то время как Программист AI возможно, потребуется очень мало взаимодействовать, если вообще, с художественным персоналом. Чтобы помочь художникам и дизайнерам уровней с их задачами, программисты могут добровольно или быть привлечены к разработке. инструменты и утилиты. Многие из них могут быть предназначены для определенной цели и могут быть багги из-за нехватки времени (время на разработку таких инструментов часто не включается в расписание игры), а также потому, что они в любом случае предназначены только для внутреннего использования. Многие игровые инструменты разработаны в РАД языки для более быстрого развития и могут быть удалены после завершения игры.

Тестирование

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

Близится к завершению

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

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

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

Обслуживание

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

Продолжительность

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

Инструменты

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

Помимо IDE, многие компании-разработчики игр создают специальные инструменты разработан для использования внутри компании. Некоторые из них включают в себя прототипы и инструменты преобразования активов (программы, которые изменяют изображения, например, в пользовательский формат игры). Некоторые настраиваемые инструменты могут даже поставляться с игрой, например редактор уровней.

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

Языки программирования

ЯзыкФункции
сборкаПотенциально минимальный процессор накладные расходы
CШироко известные, широко переносимые, многочисленные API-интерфейсы, компилируемые в Машинный код
C ++Объектно-ориентированный, широко известные, многочисленные API, компилируются в машинный код
ЯваОбъектно-ориентированный, сборщик мусора, широко переносимый (через виртуальная машина )
C #, Visual Basic .NET, так далее.Объектно-ориентированный, сборщик мусора, интерфейс с Microsoft товары
Цель-C, БыстрыйОбъектно-ориентированный, интерфейс с яблоко товары
Lua, Python, JavaScript, Tcl, так далее.Знакомый синтаксис, легко встраиваемый в вышеперечисленные языки, часто используемый для сценарии
Лисп, Паскаль, Perl, Болтовня, так далее.Необычные игровые языки, хотя привязки к популярным библиотекам распространены

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

За персональные компьютеры, выбранный язык может быть не более чем вопросом предпочтений. Языковые привязки для популярных библиотек, таких как SDL и Аллегро широко распространены,[1][2] и разрыв в производительности между идиоматическим кодом, написанным на современном составлен языков незначительна.[3][4] Самые популярные языки обычно процедурный или же объектно-ориентированный и реализовано через компиляторы; Например, C,[5] C ++,[5][6] и Ява.[7] Однако разработчики могут принять во внимание домен -специфические функции, такие как взаимодействие с операционной системой и устойчивость к разобрать механизм с целью понять, как это работает для онлайн-игр.[8] Многие игры написаны не только на одном языке, а могут сочетать два или более языков; Например, Единство, популярный игровой движок, содержит различные элементы, написанные на C, C ++ и C #.

За консоли, поддержка целевой платформы обычно является наиболее важным фактором. В прошлом видеоигры для консолей писались почти исключительно на сборка из-за ограниченных ресурсов с точки зрения хранения и скорости обработки.[9] Однако по мере развития технологий появляются возможности для разработки игр на консолях. Nintendo,[10] Microsoft, и Sony[11] у всех разные SDK для них Wii U, Nintendo Switch, Xbox One, и PlayStation 4 приставки соответственно.

Высокий уровень языки сценариев все чаще используются в качестве встроенных расширений базовой игры, написанной на скомпилированном языке программирования, для удобства как исходного разработчика, так и всех, кто хотел бы мод игра. Lua - очень популярный выбор, поскольку его API написан на ANSI C и язык разработан для встраивания в другие приложения.[6][12] Многие разработчики вообще создали собственные языки для своих игр, например id Программное обеспечение с QuakeC и Эпические игры ' UnrealScript.

API и библиотеки

Ключевым решением в программировании игр является то, что, если таковое имеется, API и библиотеки использовать. Сегодня доступно множество библиотек, которые решают ключевые задачи программирования игр. Некоторые библиотеки могут обрабатывать звук, ввод и рендеринг графики. Некоторые могут даже справиться с некоторыми AI такие задачи как Найти путь. Есть даже целые игровые движки которые решают большинство задач по программированию игр и требуют только кодирования игровая логика.

Выбор API и библиотек во многом зависит от целевой платформы. Например, библиотеки для PlayStation 2 разработка может быть недоступна для Майкрософт Виндоус наоборот. Однако существуют игровые фреймворки, которые позволяют или упрощают кроссплатформенную разработку, поэтому программисты могут программировать игру на одном языке и запускать игру на нескольких платформах, таких как Wii, PlayStation 3, Xbox 360, PSP и Microsoft Windows.

Графические API

Использование графического API в операционных системах:
Операционные системыВулканDirect XGNMXМеталл
Windows 10даданетнет
MacMoltenVKнетнетда
GNU / Linuxданетнетнет
Androidдададанет
iOSMoltenVKдадада
Tizenв Devнетнетнет
Парусникв Devнетнетнет
Xbox Oneнетнетнетнет
ОС Орбис (PS4)нетнетнетнет
Nintendo Switchнетнетнетнет

Сегодня графика - ключевая особенность большинства игр. Пока 2D графика было нормой для игр, выпущенных до середины 1990-х, большинство ААА игры теперь хвастайтесь полным 3D графика, даже для игр, которые по своей природе в основном 2D, например Цивилизация III. Однако чисто 2D-графика пережила эпоху Возрождения с инди игры.[13]

Хорошо зарекомендовавший себя персональный компьютер платформа - Microsoft Windows. Поскольку он был предустановлен почти на девяносто процентов ПК продано, теперь у него самая большая база пользователей.[нужна цитата ] Двумя наиболее популярными API-интерфейсами 3D-графики для Microsoft Windows являются: Direct3D и OpenGL. Преимущества и недостатки каждого API горячо обсуждаются в Windows. программисты игр.

В настоящее время самые популярные Вычислительная платформа это Google Android. Поскольку он предустановлен почти на восьмидесяти процентах Смартфоны продано, Android занимает второе место по величине пользовательской базы и продолжает расти. Android использует OpenGL ES & Вулкан (API).

DirectX - это набор игровых API. Direct3D - это 3D API DirectX. Direct3D бесплатно доступен по адресу Microsoft, как и остальные API DirectX. Microsoft разработала DirectX для программистов игр и продолжает добавлять функции в API. Спецификация DirectX не контролируется открытым арбитражным комитетом, и Microsoft может добавлять, удалять или изменять функции. Direct3D не переносится; он разработан специально для Microsoft Windows и никакой другой платформы (хотя форма Direct3D используется в Microsoft Xbox, Смартфоны Windows Phone 7.5 и мобильные устройства, на которых работает Карманные ПК Операционная система).

OpenGL - это переносимая спецификация API. Код, написанный с помощью OpenGL, легко переносится между платформами с совместимой реализацией. Например, Quake II, использующий OpenGL, был перенесен с Windows на Linux фанатом игры. OpenGL - это стандарт, поддерживаемый Советом по обзору архитектуры OpenGL (ARB). ARB периодически собирается для обновления стандарта, добавляя новую поддержку функций новейшего 3D-оборудования. Поскольку OpenGL основан на стандартах и ​​существует дольше всех, он используется и преподается в колледжи и университеты во всем мире.[нужна цитата ] Кроме того, инструменты разработки, предоставляемые производителями некоторых игровых консолей (например, Nintendo GameCube, Nintendo DS и PSP), используют графические API-интерфейсы, похожие на OpenGL. OpenGL часто отстает в обновлении функций из-за отсутствия постоянной группы разработчиков и требования, чтобы реализация начиналась после публикации стандарта. Программисты, решившие его использовать, могут получить доступ к новейшим 3D-функциям некоторых аппаратных средств, но только через нестандартные расширения. Ситуация может измениться в будущем, поскольку комиссия по обзору архитектуры OpenGL (ARB) передала контроль над спецификацией Хронос Групп в попытке противостоять проблеме.[14]

Другие API

Для разработки в Microsoft Windows для ввода могут использоваться различные API DirectX, Звуковые эффекты, Музыка, сеть и воспроизведение видео. Для выполнения этих задач доступно множество коммерческих библиотек, но поскольку DirectX доступен бесплатно, он является наиболее широко используемым.

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

Структура игры

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

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

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

пока (пользователь не выходит) проверить ввод пользователя запустить ИИ переместить врагов разрешить столкновения рисовать графику воспроизводить звукиконец пока

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

Игровые циклы различаются в зависимости от платформы, для которой они разработаны. Например, игры, написанные для ДОС и многие консоли могут доминировать и использовать доступные ресурсы обработки без ограничений. Однако игры для современной операционной системы ПК, такой как Microsoft Windows, должны работать в рамках ограничений планировщика процессов. Некоторые современные игры запускают несколько потоки так что, например, вычисление AI персонажа может быть развязанный от создания плавного движения в игре. Это имеет недостаток (немного) увеличения накладных расходов, но игра может работать более плавно и эффективно на Hyper Threading или же многоядерный процессоры и на многопроцессорных платформах. С фокусом компьютерной индустрии на Процессоры с большим количеством ядер, которые могут выполнять больше потоков, это становится все более важным. Консоли, подобные Xbox 360 и PlayStation 3 уже имеют более одного ядра на процессор и выполняют более одного потока на ядро.

Любители

Единственные платформы, широко доступные для программирования любителями, - это потребительские операционные системы, таких как Android, iOS, Windows, Mac, Linux и т. д. Это связано с тем, что для разработки на игровых консолях требуются специальные системы разработки, которые стоят тысячи долларов. Часто они должны быть получены от производителя консоли и продаются или сдают в аренду только профессиональным студиям разработки игр. Однако раньше Microsoft распространяла фреймворк для разработки игр, XNA, который работает как на Microsoft Windows, так и на Xbox 360. Поддержка XNA была прекращена, но другие проекты, такие как MonoGame и SharpDX пытаются разрешить такой же доступ для кодирования игр. В последнее время Android является самой популярной платформой для любителей мобильных устройств.[16] Некоторые любители также развивают домашние игры, особенно для портативных систем или модифицированный консоли.

Немного программная инженерия студенты программируют игры как упражнения для изучения язык программирования или же Операционная система.

Некоторые любители могут использовать программные пакеты, которые помогают в разработке игр, например Adobe Animate, Единство, Android Studio, Pygame, Студия приключенческих игр, GameMaker Studio, Годо, Unreal Engine, или же Построить.

Смотрите также

Рекомендации

  1. ^ «Привязки языка SDL». Получено 2015-11-08.
  2. ^ «Аллегро - языковые привязки». Получено 2015-11-08.
  3. ^ Корлан, Александру-Дан (2003). «Тесты языков программирования». Получено 2015-11-08.
  4. ^ Корлан, Александру-Дан (11.06.2011). "Тесты языков программирования". Получено 2015-11-08.
  5. ^ а б Корлан, Александру-Дан (2011). «Программирование игр на C и C ++». Получено 2015-11-08.
  6. ^ а б ДеЛора, Марк (2009-03-05). «Исследование двигателя: общие результаты». Получено 2015-11-08.
  7. ^ Корлан, Александру-Дан. «LWJGL - Проекты». Архивировано из оригинал на 2015-11-10. Получено 2015-11-08.
  8. ^ Заяц без ошибок. Глава V (b) из «Разработка и развертывание MMOG»"".
  9. ^ Хайд, Рэнди (1985). Использование языка ассемблера 6502.
  10. ^ Хельгасон, Дэвид (2 ноября 2012 г.). «Разработчики игр, запускайте свои 3D-движки Unity». Игры (Опрос). Беседовал Дин Такахаши. VentureBeat. Получено 13 июля, 2014.
  11. ^ «[Phoronix] Почему Sony использует LLVM / Clang на PlayStation 4». Phoronix.com. Получено 17 ноября 2014.
  12. ^ Корлан, Александру-Дан (2015-03-24). «Lua: использует». Архивировано из оригинал на 2019-07-24. Получено 2015-11-08.
  13. ^ "Почему в большинстве инди-игр 2D вместо 3D?". Безудержные игры. 2013-05-16. Получено 2017-01-01.
  14. ^ «Khronos помещает тесты на соответствие OpenGL и OpenGL ES в открытый исходный код». Пресс-релиз Хронос Груп. Архивировано из оригинал на 2008-05-03.
  15. ^ «Программирование игр для Linux, глава 1». ISBN  1-886411-48-4.
  16. ^ «Отчет: 79% разработчиков мобильных приложений предпочитают создавать приложения для Android». 29 августа 2016.

внешняя ссылка

Вики