Страницы

Поиск по вопросам

воскресенье, 24 ноября 2019 г.

Язык программирования для разработки игр [закрыт]


Насколько мне известно, в gamedev сложилась традиция использовать C++. (Irrlicht, Ogre, Unreal Engine). (Хотя Quake Engine написан на C).
C++ это один из языков, где легко прострелить себе ногу (по большей части из-за тог
что он основан на Си), и чтобы писать код на нём нужно обладать большим опытом и профессионализмом. Нужно знать возможные грабли. (Отсутсвие модульной системы добавляет боли)
У меня есть подозрение, что использования C++ можно избежать.
Теперь компьютеры стали быстрее.
C++ хвалят за возможность специализации (с помощью шаблонов) методов для конкретны
типов данных. (Это позволяет выполнять код без лишних вызовов, хотя это и раздувает код).
Но ведь ту же специализацию можно сделать с помощью JIT. Или, например, весь быстры
код можно записывать с помощью eDSL, с компиляцией в рантайме (к примеру с помощью LLVM). Более того, этот подход может дать более быстрое выполнение чем специализированные методы C++, т.к. в рантайме доступно больше информации, и можно оптимизировать больше.
Наверняка кто-нибудь до этого уже додумался.
Собственно вопрос: Пишет ли кто-нибудь игры (или графические/игровые движки) не н
C++? Какие есть проекты? Особенно интересуют проекты где необходимы быстрые вычисления.    


Ответы

Ответ 1



1) O'Caml или другой из ML-family. Бенчмарк, где кресты глотают пыль. 2) Lisp. Warcraft 2 in 1300 lines (eDSL на Lisp). 3) Object Pascal. Казуалка (с сервером на Haskell). 4) Любой другой, кроме крестов, если, разумеется, не стоит цель прострелить ног всеми возможными способами и вдоволь насосаться леденца.

Ответ 2



Хотя мощности и повысились, но и уровень игрушек повысился. Если вы хотите писать игры уровня 2000 года то да, можете хоть Java использовать. Для современных же проектов лучше всё же C++ и даже ассемблерная оптимизация. Если не хочется изучать С++ то советую посмотреть на игровой движек Unity 3D, гд написание управляющего кода возможно на JavaScript, C#, Python(Boo) а вскоре обещают и ActionScript для компилирующихся во флеш проектов. Кстати не стоит думать что вы пишете прямой исполняемый код на этих языках. Все скрипт написаные в редакторе будут скомпилированны. Например реализация JS в Unity почти в два раза быстрее оригинального.

Ответ 3



Я бы разделил игровой проекта на отдельные крупные области и использовал в каждой из них приемлимые средства, выстраивая неких стек: Графический движок. Тут работа с нижележащими API (OpenGL, DirectX), работа с буферами памяти, шейдерами, процедурная генерация, жесткие оптимизации. Здесь C++ вне конкуренции. Игровая логика. Как правило в конечном счете это просчет взаимодействий объекто с объектами. Причем объекты вполне соответствуют объектам в традиционном ООП понимании.Действи одних объектов, могут вызывать реакции в других; объекты могут образовывать сложные иерархии. Удобно воспользоваться объектно-ориентированным языком с автоматической сборкой мусора, чтобы сосредоточиться на поведении игровой среды. Например, C#, Java, Python, Ruby. Алгоритмическая база. Различные варианты AI, работа с графами и сложными структурам данных, поиски и сортировки. Задачи, типичные для функциональных языков. F#, Scala, Lisp, Haskell, OCaml, Clojure. Разумеется, не стоит разводить зоопарк трудносовместимых сред в одном проекте. Н некоторые комбинации могут быть вполне эффективными: C++/Java/Scala, C++/C#/F#, C++/Python

Ответ 4



Лично я пишу с XNA Game Studio + Visual Studio Express (C#). легко писать код много информации в интернете можно написать что-то типа такого: http://exdream.com/XnaRacingGame/ и т. д.

Ответ 5



Minecraft написан на Java. можете погуглить на эту тему

Ответ 6



Цивилизация - движок ест-но на плюсах, а скриптование на Python World Of Warcraft - скриптование на Lua Ну а небольшие и 2D игры можно писать целиком на интерпретируемых языках, используя порты движков навроде Box2D.

Ответ 7



На .Net вполне приличные игрушки можно делать, например есть игровой движок NeoAxis Engine ну и как писали ранее XNA, Unity 3D

Ответ 8



Для начала надо определиться с несколькими вопросами, потому что ответить на вопрос в общей форме "На каком языке писать игру?" невозможно в принципе. Во-первых, какую игру вы собираетесь писать? Варианты ответа: Игру ААА-класса, чтоб убер-графика, убер-эффекты, всё реалистичное, чтоб у игрока челюсть отваливалась от одного скриншота. Серединка-наполовинку: полу-инди с полу-убер-графикой. Хлам для мобилок и браузеров: геймплей — ничто, монетизация — всё! Тру-инди: из графики только пикселизованные монстрики. Вся суть — геймплей! Во-вторых, кто вы по профессии? Варианты ответа: Крутейший специалист по компьютерной графике, доктор по алгебре и дискретной математике, ассемблер — ваш родной язык, шейдеры пишете с закрытыми глазами. Простой смертный программист. Первый раз видите компьютер вживую. Про языки программирования что-то в последний раз слышали в школе. В-третьих, кто вы по отношению к игре? Автор, владелец, вдохновитель. Шестерёнка в компании. Только сейчас задумались о гейм-деве. Теперь, когда вы держите в уме ответы на эти вопросы, можно заняться разбором вариантов. *1* Если вы крутейший специалист, то вы не читаете этот вопрос. Пропускаем. 1*1 Если вы заправляете разработкой ААА-игр, то вы тоже не читаете этот вопрос. **2 Если вы работаете на кого-то, то выбора у вас нет. Ха-ха-ха. 1** Если вы хотите заниматься разработкой игр AAA-класса, то есть некоторый выбор. 13* Если вы простой смертный, решивший приобщиться к разработке самых дорогих игр, то выбора особо нет. На данный момент практически все игры ААА-класса пишутся на C++, как самом подходяще для этой цели: практически все существующие, актуальные и передовые средства разработк (библиотеки, программы, инструменты) поддерживают C++; это один из немногих языков, который позволяет опускаться так низко к железу, насколько надо (ближе только C); на C++ написано огромное количество кода во многих компаниях, у него огромное наследие — пожалуй, самое огромное из всех языков на данный момент. Для мелких фиговин, типа скриптов для управления интерфейсом, могут использоватьс другие языки — менее шустрые, но которые легко обновлять и писать: Lua и прочие. Обычно они составляют не самую большую часть логики. Или вы уже разрабатываете, или только собираетесь — выбора у вас нет, C++ надо изучать, если хотите заниматься разработкой всерьёз, а не клепать скриптики. Есть, конечно, вероятность, что через некоторое время будет создан "убийца плюсов" но пока дела на этом фронте продвигаются неважно. Если вдруг продвинутся, то вы будете об этом знать — всё-таки событие мирового масштаба. 22* Если ваша игра обойдётся без самой совершенной графики, и вы умеете программировать, то у вас уже есть выбор. Чем меньше у вас сложной логики, тем свободнее выбор языка. Если у вас тьма тьмуща сложных алгоритмов, например, в вашей игре моделируются какие-то сложные процессы, т эти алгоритмы придётся писать на C++. Как вариант, можно посмотреть в сторону функциональных языков, но это на любителя: чем больше языков в программе, тем больше сложностей, особенно когда в команде вы не один. Если нагрузка на CPU ограничена, то вы можете воспользоваться тем фактом, что CP — отдельно, GPU — отдельно. Если вы даже из самого медленного языка отправите на отрисовк пучок графических операций, то они отработают быстро, потому что они будут выполняться отдельно от вашего тормозного кода. Сейчас, когда компьютеры стали достаточно быстрыми, часто ресурсов хватает на все дополнительные тормоза, которые возникают из-за управляемого кода (C#, Java и т.д.). Отдельно надо упомянуть сборку мусора: чем сложнее логика, чем вы придирчевее к частот кадров, тем менее доступным становится это удобство. Если логика разрастётся, то с большо вероятностью может оказаться, что от сборки мусора вообще придётся отказаться и повсеместно использовать пулы и прочие подобные средства. Дело в том, что сборка мусора, какой бы быстрой она ни была, на данный момент слишком медленная, чтобы не приводить к пропущенным кадрам. Мусор, генерируемый со скорость 60 кадров в секунду, разрастается слишком быстро. 23* Если вы ничего толком не умеете, то писать сложные игры в качестве первой попытки не стоит. Начните с чего-нибудь попроще. 42* Если графика у вас относительно простая, а сложных ресурсоёмких алгоритмов нет, то ваш выбор становится очень широк. Вы можете писать абсолютно на чём угодно! Игру можно писать на любом интерпретируемо языке, который на порядки медленнее оптимизированого кода на C++. Какая разница, если игрок не заметит? И чем меньше у вас команда, тем более диким может быть ваш выбор. Если вы в команд единственный программист, то можно писать на любом эзотерическом языке программирования, ведь это никому не помешает, а вы получите от этого истинное удовольствие. Если у вас есть какая-никакая команда, то лучше всё-таки считаться со мнением окружающи и не использовать языки и инструменты, про которые никто не слышал. Даже если ваша текуща команда знает их, потом может оказаться, что найти замену человеку невозможно. Используйте проверенные временем инструменты, используйте мейнстримовые языки программирования. Может, это и ухудшит производительность труда, но риск оказаться ни с чем будет заметно ниже. 43* Если вы не умеете программировать, то вы на распутье: вам или надо научитьс программировать, или воспользоваться более простыми средствами разработки игр. Пугаться программирования не надо. Кто знает, может, у вас скрытый талант? Есть истори успеха, когда художник, впервые увидивший код, пишет успешную игру практически в одиночку и выигрывает кучу призов. Но есть и путь проще: движки для игр, предназначенные для непрограммистов. Там в будете рисовать нужное вам, расставлять свойства, копировать скриптики и смотреть, ка оно всё шевелится. Но чем сложнее игра, тем больше нужно кода. Подобные движки часто сильно ограничивают свободу творчества, поэтому выбирайте сами, в каком направлении лучше двигаться. 3** И напоследок: если вы пишете для мобилок и браузеров, то вы имеете уникальну возможность настолько же быстро упираться в аппаратные ограничения, как и игры ААА-класса (которые для мобилок существуют с точки зрения денег, но не с точки зрения результата, но это так, лирическое отступление). Здесь ваш выбор будет сильно ограничен платформой (или платформами). Для одной платформ "родной" один язык, для другой — другой. Выбор, на чём писать кросс-платформенные игры невелик. Писать код на управляемых языках придётся немного по-другому, уделяя пристальное внимание сборке мусора. Здесь вы будете убиваться об стенку, чтобы ваша игра нормально работала на всех устройствах. Так как ни одна платформа не доминирует, то сразу смотрите в сторону кросс-платформенны движков и библиотек. Псевдо-ААА тоже сплошником на нём пишется, и это никого не смущает. Так как разнообразие невелико, то в трёх соснах не заблудитесь. P.S. Я ещё не рассмотрел тьму тьмущую вещей: для какой платформы вы пишете, как выбирать движок и т.п. Считайте это общим вектором, а не инструкцией по применению.

Ответ 9



На Haskell, скажем, вполне себе успешно пишут, например, 3DFPS Frag, паззл Rainca или платформер Nikki and the Robots (хотя в последнем физический движок взят готовый написанный на C). Игры, учитывая их ясно некоммерческое происхождение (тот же Frag, скажем — диссертация), вполне себе приличны, так что явно не скажешь, что не написать ничего хорошего. С другой стороны, впрочем, Кармак на QuakeCon говорил, что со скриптовыми интерпретаторам лучше не связываться, и что с ActionScript, скажем, они огребли достаточно проблем. И с его опытом не поспоришь, хотя, с другой стороны, его опыт относится к достаточно конкретной игровой нише.

Ответ 10



Пишу лёгкие игры (целых две штука) на Objective C для iOS. О популярности данно отрасли можете судить сами по размеру AppStore

Ответ 11



Можно писать на разных языках, даже на скриптовом Lua. А движки здесь посмотрет можете всевозможные - gcup.ru

Ответ 12



Если вы собираетесь писать серьезные игровые движки, то выбор один это С++. Тем более С++ не так страшен, как о нем говорят. Сейчас многие унижают С++. Называю его мертвым языком, но вы должны понимать что это в основном маркетинг таких гиганто как Microsoft и Oracle, которые пиарят свои продукты C# и Java. Фраза про выстрел в ногу не исключение. Стоить заметить, что та же Microsoft все свои разработки пишет на С++. В любом случае более богатые возможности языка С++ я всегда считал плюсом, а не минусом. В чем основные отличия С++ от Java и С#: Вам придется понять что такое указатель и ссылка. На самом деле это не сложно, если понять что такое адрес. Если сами не разберетесь, думаю на этом ресурсе вам помогут. В С++ нет сборщика мусора поэтому память придется чистить в ручную с помощью delete То есть нужно запомнить, если выделили память через new, то где-то дальше в в программе вы должны очистить ее с помощью delete. Вот в принципе и все основные неудобства которые может вызвать С++ по сравнению с С# или Java. Теперь поговорим почему разработчики движков не часто используют C# или Java. Вы упомянули про JIT. Как раз JIT компиляция проблем не создает а а даже может помоч при оптимизации под конкретную архитектуру, увеличив производительность. Компилятор Clang (LLVM) как раз развивается в этом направлении. Основным недостатком C# и Java, является сборщик мусора. Сейчас объясню почему. Игровой движок представляет из себя фактически бесконечный цикл, который должен выполнятс 30 раз в секунду, а лучше 60 или больше. А вот теперь представьте, что вы написали движо который выдает 30 fps. Все работает, все круто. А затем пришел сборщик мусора. Чтоб очистить память он должен остановить выполнение процесса (ну или хотя бы потока), та как сборщик не может анализировать память которая изменяется. Что выйдет из такой приостановки программы сами можете догадаться. То есть в вашем движке живет что то, что пожирает ресурсы и периодически приостанавливает выполнение вашей программы. И самое страшное вы этим практически никак не можете управлять. Согласитесь это не приемлемо, если конечно у вас ресурсов не до фига. К еще одному недостатку языков С# или Java можно отнести большее потребление памяти, что для игр также критично. Исходя из этого тот же С# хорош для indie игр, и не пригоден для разработки серьезных движков. Так что использование С++ в gemedev это не традиция, это скорее необходимость, та как альтернативы нет. В любом случае С++ хороший язык, с богатыми возможностями, так что советую его изучить, если вы действительно собираетесь в будущем писать качественные движки.

Ответ 13



Специально для тех, кому не нравится вычленять информацию из ответа, а хочется голых фактов, пишу ещё один ответ. TL;DR Учите плюсы. Длинная версия Если у вас есть команда, то ваш выбор ограничен мейнстримовыми языками. Выбрать экзотически язык могут себе позволить только инди-одиночки, а реально нуждаются в нём — те, кт пишет алгоритмически сложные игры. Так как пересечение двух вышеописанных множеств пренебрежимо мало, то, вероятно, всех на самом деле интересует написание написание средненьких и инди-игр небольшой командой. Эрго, рассматриваем применимость мейнстримовых языков. C++. Язык по умолчанию. Абсолютный рекордсмен по производительности, по кросс-платформенности по совместимости со всем и вся, а также обладатель самого масштабного наследия кода Плюсы кошмарны, несмотря на тщетные попытки запрятать указатели куда подальше, а текст ошибок сделать хоть немного вменяемым. Undefined behavior и прочие радости жизни никуда за столько лет не девались. Но язык обладает преимуществами, к которым остальные языки даже не приблизились. Java. Язык популярен во многих сферах, в результате для него написано много библиотек в том числе для игр. Производительность — плохая (в несколько раз медленнее плюсов н математических тестах). Возможности для оптимизации очень ограничены. Несмотря на хорошую кросс-платформенность, портирование далеко не на все актуальные платформы будет безболезненным: забудьте про XBOX, виндофоны и прочие девайсы. C#. Примерно на равных состязается с Java в энтерпрайзе, но сильно устапает по популярност в опен-сорсе. Изначально производительность такая же плохая, как у джавы, но возможност оптимизации значительно шире. Если при проседании производительности в джаве вам придётся переписывать критичные куски на другом языке, то в случае шарпа есть возможность уйти "на уровень ниже" в пределах языка. Часть игровых движков с потрохами на плюсах позволяют писать код на шарпе. Если нагрузка на CPU позволяет расходовать ресурсы впустую, то можно использовать. Совершаются попытки компилировать в нативный код, но это всё равно далеко не C+ по производительности: "управляемость" языка никуда не девается из-за компиляции, пусть и с компилятором на базе плюсового. VB.NET. Как C#, только с меньшими возможностями для оптимизации и меньшим выбором библиотек. Преимуществ над C# не имеет — ну, кому-то может нравиться синтаксис. JavaScript. Антирекордсмен по производительности, несмотря на попытки добавить хитроумны оптимизирующие прибамбасы в браузеры. Жабоскрипт выбирают не от хорошей жизни, особенно в геймдеве. Собственно, если вы пишете для браузеров, особо выбора нет. В браузерах всё медленнее минимум на порядок — не только исполнение кода, но и отрисовк графики — тормозят даже простенькие инди-игры. Как способ оптимизации никто в здравом уме и трезвой памяти этот язык использовать не будет. Из достоинств — работает везде, где есть браузер. Objective-C. И компиляторы, и язык — с сишными корнями. Уход на Obj-C сложно назват уходом от страшного и ужасного си, так что выпадает из рассмотрения. Ну и Apple пытается запрятать морально устаревший язык под ковёр, выставив Swift — перспективы не лучшие (правда, только если смотреть далеко в будущее). Кросс-платформенность никакая. Delphi. В новых версиях заявлена кросс-платформенность, так что можно рассмотреть К сожалению, кросс-платформенность настолько тормозная, что приложение-пример падает из-за недостатка памяти. Собственно, всё. Язык родственен C++, в последних версиях появились обобщённые типы и прочее, пр этом в нём меньше мрака вроде undefined behavior. Однако и многих возможностей плюсов нет, а компилятор так и не приблизился по оптимизациям к плюсам. Python, Ruby и иже. Главные конкуренты с жабаскриптом по тормознутости. Питон, написанны на шарпе, питон, написанный на "почти питоне", и прочие подобные приблуды, пытаютс выжать из языка сносную производительность, чтобы не было стыдно на фоне жабаскрипта, но до плюсов как до Луны пешком. Разумеется, как и для любого мейнстримового языка, имеется зоопарк библиотек-фреймворков, но кросс-платформенность ограничена. Итог Для "скриптовых" языков пишутся разнообразные оптимизаторы. Но динамическую типизаци никуда не выкинешь, поэтому невозможно оптимизировать код, оставив его в первозданном виде. Иногда изобретаются подмножества языка, чтобы на них писать что-то более оптимизированное, но это ломает весь кайф, что называется. В несколько более выигрышной позиции "управляемые" языки. Совершаются попытки врод прикручивания плюсового компилятора, прикручивания LLVM, но управляемость остаётся на месте. Ну и в случае C# и то, и другое находятся на ранних стадиях развития, поэтому говорить о результатах рано. Строго типизированные компилируемые языки без хитрых оптимизаций все слишком родственн с плюсами, чтобы гордо заявить "я теперь не пишу на сях". Учитывая пропасть в кросс-платформенности и совместимости, переходить на них смысла нет. Так или иначе, скомипилированный код всё равно оказывается быстрее, потому что JI должен быть быстрым. Проект на плюсах, компилирующийся час — это нормально. Проект на другом языке, компилирующийся у игрока час — это ни в какие ворота. На данный момент на горизонте не видать ничего, способного из мейнстримовых "несишных языков выжать сишную производительность. Если упираетесь в CPU, и вы не один в команде, вариантов у вас нет.

Ответ 14



Для создания простенькой 2Д игры , можно учить скриптовые языки, а для красивой 3 игр, нужно конечно знать плюсы или C#. Есть множество игровых порталов которые рассказывают о создании игр, и один из них описал iwowa.

Ответ 15



Для managed DirectX под дотнет есть куча фреймворков - SharpDX, SlimDX, Tao Framework связка какого-то из них и Unity3D по идее должна дать возможность вполне себе писать движки на шарпе.

Ответ 16



Есть ММО, точнее не игра а на текущий момент разработка на Blitz3D+C#. В сил некоторых обстоятельств название разглашать не могу.

Ответ 17



Игры можно писать на каком угодно языке, к примеру для питона существует неплохой фреймворк pyglet Если нужно что то более серьезное рекомендую unity3d

Комментариев нет:

Отправить комментарий