stringtranslate.com

Программирование видеоигр

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

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

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

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

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

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

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

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

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

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

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

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

С сегодняшним визуально насыщенным контентом программисту часто приходится взаимодействовать с художественным персоналом . Конечно, это во многом зависит от роли программиста. Например, программисту 3D-графики может потребоваться работать бок о бок с 3D-моделлерами игры, обсуждая стратегии и соображения по дизайну, в то время как программисту ИИ может потребоваться очень мало взаимодействия, если вообще потребуется, с художественным персоналом. Чтобы помочь художникам и дизайнерам уровней с их задачами, программисты могут работать добровольно или быть призваны разрабатывать инструменты и утилиты . [1] [2] Многие из них могут быть предназначены для определенной цели и могут содержать ошибки из-за ограничений по времени (время на разработку таких инструментов часто не включено в график игры), а также потому, что они в любом случае предназначены только для внутреннего использования. Многие игровые инструменты разрабатываются на языках RAD для более быстрой разработки и могут быть отброшены после завершения игры.

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

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

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

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

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

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

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

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

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

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

Инструменты

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

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

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

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

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

Для персональных компьютеров выбранный язык может быть не более чем вопросом предпочтений. Языковые привязки для популярных библиотек, таких как SDL и Allegro , широко распространены, [4] [5] и разрыв в производительности между идиоматическим кодом, написанным на современных компилируемых языках, незначителен. [6] [7] Самые популярные языки обычно являются процедурными или объектно-ориентированными и реализуются с помощью компиляторов ; например, C , [8] C++ , [8] [9] и Java . [10] Однако разработчики могут учитывать особенности, специфичные для домена , такие как взаимодействие с операционной системой и устойчивость к обратному проектированию для онлайн-видеоигр. [11] Многие игры написаны не только на одном языке, но могут сочетать два или более языков; например, Unity , популярный игровой движок, имеет различные части, написанные на C, C++ и C# . [12]

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

Высокоуровневые языки сценариев все чаще используются в качестве встроенных расширений для базовой игры, написанной на компилируемом языке программирования, для удобства как оригинального разработчика, так и любого, кто хотел бы модифицировать игру. Lua является очень популярным выбором, поскольку его API написано на ANSI C , а язык предназначен для встраивания в другие приложения. [9] [16] Многие разработчики создали собственные языки для своих игр, такие как QuakeC от id Software и UnrealScript от Epic Games .

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

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

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

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

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

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

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

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

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

Другие API

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

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

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

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

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

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

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

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

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

Любители

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

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

Некоторые любители могут использовать программные пакеты, помогающие в разработке игр, такие как Adobe Animate , Unity , Android Studio , pygame , Adventure Game Studio , Roblox Studio , GameMaker Studio , Godot , Unreal Engine , Pixel Game Maker MV или Construct .


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

Ссылки

  1. ^ Bouknight, W. Jack (сентябрь 1970 г.). «Процедура генерации трехмерных полутоновых компьютерных графических презентаций». Communications of the ACM . 13 (9): 527–536. doi : 10.1145/362736.362739 . ISSN  0001-0782. S2CID  15941472.
  2. ^ Миллингтон, Ян (2019-03-18). ИИ для игр. doi :10.1201/9781351053303. ISBN 9781351053303. S2CID  186504701.
  3. ^ Шубоц, Мориц (2016-12-12). «Cogex: логическое средство доказательства для ответов на вопросы». Datasakura .
  4. ^ "SDL Language Bindings" . Получено 2015-11-08 .
  5. ^ "Allegro - Языковые привязки" . Получено 2015-11-08 .
  6. ^ Корлан, Александру-Дэн (2003). "Тесты языков программирования" . Получено 08.11.2015 .
  7. ^ Корлан, Александру-Дэн (11.06.2011). "Тесты языков программирования" . Получено 08.11.2015 .
  8. ^ ab Corlan, Alexandru-Dan (2011). "Программирование игр на C и C++" . Получено 2015-11-08 .
  9. ^ ab DeLoura, Mark (2009-03-05). "The Engine Survey: General results" . Получено 2015-11-08 .
  10. ^ Корлан, Александру-Дэн. "LWJGL - Проекты". Архивировано из оригинала 2015-11-10 . Получено 2015-11-08 .
  11. ^ 'No Bugs' Hare (30 ноября 2015 г.). "Глава V(b) из "Разработка и развертывание MMOG"".
  12. ^ Корлан, Александру (2011). «Программирование игр на C и C++». Datasakura .
  13. ^ Хайд, Рэнди (1985). Использование языка ассемблера 6502 .
  14. ^ Хельгасон, Дэвид (2 ноября 2012 г.). «Разработчики игр, запустите свои движки Unity 3D». GamesBeat (интервью). Интервью взял Дин Такахаши. VentureBeat . Получено 13 июля 2014 г.
  15. ^ "[Phoronix] Почему Sony использует LLVM/Clang на PlayStation 4". Phoronix.com . Получено 17 ноября 2014 г. .
  16. ^ Corlan, Alexandru-Dan (2015-03-24). "Lua: Uses". Архивировано из оригинала 2019-07-24 . Получено 2015-11-08 .
  17. ^ «Почему большинство инди-игр 2D, а не 3D?». Rampant Games. 2013-05-16 . Получено 2017-01-01 .
  18. ^ "Khronos помещает тесты соответствия OpenGL и OpenGL ES в открытый исходный код". Пресс-релиз Khronos Group. Архивировано из оригинала 2008-05-03.
  19. ^ Штутц, Майкл (2001). Программирование игр Linux, Глава 1. Linux Journal Press. ISBN 1-886411-48-4.
  20. ^ «Отчет: 79% разработчиков мобильных приложений предпочитают разрабатывать приложения для Android». 29 августа 2016 г.

Внешние ссылки

Вики