Jump to content

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

(Перенаправлено из «Программирование игр »)

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

[ редактировать ]

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

Инструменты

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

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

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

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

[ редактировать ]
Использование графического API в операционных системах:
ТЫ Вулкан Директ Х ГНМКС Металл
Windows 10 да да нет нет
Мак МолтенВК нет нет да
Линукс да нет нет нет
Андроид да да да нет
iOS МолтенВК да да да
Тизен в Деве нет нет нет
Парусник в Деве нет нет нет
Xbox Один нет да нет нет
Orbis OS (PS4) нет нет да нет
Нинтендо Переключатель да нет нет нет

Сегодня графика является ключевой определяющей особенностью большинства игр. Раньше 2D-графика была нормой для игр, выпущенных в середине 1990-х годов, но теперь большинство игр класса ААА могут похвастаться полной 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 используется на смартфонах Microsoft Xbox , Windows Phone 7.5 и мобильных устройствах, работающих под управлением операционной системы Pocket PC ).

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) передал контроль над спецификацией группе Khronos в попытке решить проблему. [18]

Другие API

[ редактировать ]

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

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

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

[ редактировать ]

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

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

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

while (user does not exit)    check for user input    run AI    move enemies    resolve collisions    draw graphics    play soundsend while

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

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

Любители

[ редактировать ]

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

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

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


См. также

[ редактировать ]
  1. ^ Букнайт, В. Джек (сентябрь 1970 г.). «Процедура создания трехмерных полутоновых презентаций компьютерной графики» . Коммуникации АКМ . 13 (9): 527–536. дои : 10.1145/362736.362739 . ISSN   0001-0782 . S2CID   15941472 .
  2. ^ Миллингтон, Ян (18 марта 2019 г.). ИИ для игр . дои : 10.1201/9781351053303 . ISBN  9781351053303 . S2CID   186504701 .
  3. ^ Шубоц, Мориц (12 декабря 2016 г.). «Cogex: логическое доказательство для ответов на вопросы» . Датасакура .
  4. ^ «Языковые привязки SDL» . Проверено 8 ноября 2015 г.
  5. ^ «Аллегро — Языковые привязки» . Проверено 8 ноября 2015 г.
  6. ^ Корлан, Александру-Дан (2003). «Бенчмарки языков программирования» . Проверено 8 ноября 2015 г.
  7. ^ Корлан, Александру-Дан (11 июня 2011 г.). «Бенчмарки языков программирования» . Проверено 8 ноября 2015 г.
  8. ^ Jump up to: а б Корлан, Александру-Дан (2011). «Программирование игр на C и C++» . Проверено 8 ноября 2015 г.
  9. ^ Jump up to: а б ДеЛура, Марк (5 марта 2009 г.). «Обследование двигателя: общие итоги» . Проверено 8 ноября 2015 г.
  10. ^ Корлан, Александру-Дан. «LWJGL – Проекты» . Архивировано из оригинала 10 ноября 2015 г. Проверено 8 ноября 2015 г.
  11. ^ Заяц «Без ошибок» (30 ноября 2015 г.). «Глава V(b) из «Разработка и развертывание MMOG» » .
  12. ^ Корлан, Александру (2011). «Программирование игр на C и C++» . Датасакура .
  13. ^ Хайд, Рэнди (1985). Использование языка ассемблера 6502 .
  14. ^ Хельгасон, Дэвид (2 ноября 2012 г.). «Разработчики игр, запустите свои движки Unity 3D» . GamesBeat (Интервью). Беседовал Дин Такахаши. ВенчурБит . Проверено 13 июля 2014 г.
  15. ^ «[Phoronix] Почему Sony использует LLVM/Clang на PlayStation 4» . Фороникс.com . Проверено 17 ноября 2014 г.
  16. ^ Корлан, Александру-Дан (24 марта 2015 г.). «Lua: Использование» . Архивировано из оригинала 24 июля 2019 г. Проверено 8 ноября 2015 г.
  17. ^ «Почему большинство инди-игр 2D, а не 3D?» . Безудержные игры. 16 мая 2013 г. Проверено 1 января 2017 г.
  18. ^ «Хронос помещает тесты соответствия OpenGL и OpenGL ES в открытый исходный код» . Пресс-релиз группы «Хронос». Архивировано из оригинала 3 мая 2008 г.
  19. ^ Штутц, Майкл (2001). Программирование игр для Linux, глава 1 . Linux Journal Press. ISBN  1-886411-48-4 .
  20. ^ «Отчет: 79% мобильных разработчиков предпочитают создавать приложения для Android» . 29 августа 2016 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 1f0213eafd5a0bea3d525f743671309a__1714608540
URL1:https://arc.ask3.ru/arc/aa/1f/9a/1f0213eafd5a0bea3d525f743671309a.html
Заголовок, (Title) документа по адресу, URL1:
Video game programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)