C# или C++ должны быть выбраны для изучения Игрового Программирования (консоли)? [закрытый]

У меня есть основное игровое знание программирования в c и C++. Я изучаю c# в наше время. Если я хочу сделать карьеру в консольном игровом программировании, какой я должен использовать для продолжения? Я заметил, что много игровых компаний использует C++/C (вероятно, из-за причин прежней версии). Также, вероятно, C++ обладает большим количеством числа поддерживаемых библиотек?
В которых языках современные игровые механизмы (unreal/crysis и т.д.) записаны в?
Какой язык лучшее поставилось? и почему?

36
задан 3 revs 11 December 2017 в 07:18
поделиться

18 ответов

C++, по двум причинам.

1) много игр запрограммировано на С++. На управляемом языке до сих пор не запрограммирована ни одна основная игра.

2) Си++ настолько сложен, насколько это возможно. Приходится осваивать ручное управление памятью и вообще никаких проверок (кроме отличного Valgrind!). Если Вы освоите Си++, то это можно будет перенести на управляемые процедурные языки. Меньше - наоборот.

С++ имеет уровень сложности, близкий к APL! Вы никогда не добьетесь успеха, играя со слабыми оппонентами.

Джоэл очень сильно об этом говорит . Люди, которые понимают, как работает машина, делают программистов лучше, потому что все абстракции негерметичны.

55
ответ дан 27 November 2019 в 05:08
поделиться

Взгляните на это так - хотя вы можете написать игру на C #, это не откроет вам много дверей в карьере. Если вы знаете C ++ и Lua, тогда у вас будет гораздо больше возможностей для трудоустройства.

Вы также говорите не только о настольных ПК и консолях, в настоящее время игры в значительной степени предназначены для мобильных устройств, поэтому только знание C # ограничит вас еще больше. Конечно, C ++ не будет оптимальным выбором для написания приложений для iPhone, но вы будете гораздо ближе к программисту на C ++, если знаете C ++, чем если знаете C #.

Разработчики игр используют C ++ не по устаревшим причинам (хотя установка движков и библиотек C ++ помогает), а для повышения производительности и опыта. Разработчики игр знают C ++, он у них работает очень хорошо, так что ничего менять не нужно. Это не похоже на бизнес-приложения (в Windows), в которых разработчик думает о текущих инструментах Microsoft.

2
ответ дан 27 November 2019 в 05:08
поделиться

Я думаю, что C ++.

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

2
ответ дан 27 November 2019 в 05:08
поделиться

Это действительно зависит от того, какую игру вы планируете создать: многие игры могут быть написаны на таком языке, как C #. При этом большая часть разработки игр выполняется на C ++ просто потому, что большая часть разработки игр должна максимально использовать все возможности платформы, а это означает либо C, C ++, либо ( shudder ) ассемблер.

2
ответ дан 27 November 2019 в 05:08
поделиться

Если бы вы знали C # и XNA, вы могли бы довольно просто создать несколько примеров игр, что могло бы помочь выйти на рынок.

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

0
ответ дан 27 November 2019 в 05:08
поделиться

Это всегда трудно сказать, потому что они использовали сборку до 1993 года, NBA Jam, если кто-то помнит этого плохого мальчика. Технология постоянно развивается, поэтому очень трудно сказать, куда она пойдет, я бы порекомендовал выучить C и получить очень четкое представление об этом, а затем перейти на C++. Я скажу это в качестве предостережения, если вам нравится играть в игры, в которые вы не получите удовольствия от игр с кодировкой.

0
ответ дан 27 November 2019 в 05:08
поделиться

C ++ - это лингва-франка индустрии консольных игр. Хорошо это или плохо, но вы должны знать это, чтобы стать профессиональным программистом консольных игр.

3
ответ дан 27 November 2019 в 05:08
поделиться

С++ с выигрышем32/GDI относительно легко, но гораздо сложнее, чем, скажем, Flash или Python (pygame) - однако, используя C++, вы многому научитесь в процессе и будете готовы продолжать продвижение по карьерной лестнице в качестве разработчика игр. Вы также можете заглянуть в XNA, если хотите программировать на xbox360.

Я взял несколько уроков в Game Institute (GI) и многому научился на С++, win32 API и DirectX.

3
ответ дан 27 November 2019 в 05:08
поделиться

C++, по двум причинам.

1) много игр запрограммировано на C++. Ни одна игра мейнстрима пока не запрограммирована на управляемом языке.

2) C++ так же трудно, как и получается. Вы должны освоить ручное управление памятью и, как правило, не проверять границы (помимо отличного Valgrind!). Если вы владеете C++, вы найдете его переносимым на управляемые процедурные языки. Меньше, чем наоборот.

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

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

-121--1287515-

Вероятно, потребуется оператор instanceof .

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

-121--1882334-

Вы не найдете C # работающим на каких-либо консолях, поэтому это бесполезно в этом отношении.

Если вы изучаете программирование, C # предлагает более мягкую кривую обучения, чем C++, но вы можете писать C++, не попадая в более страшные и сложные области языка, так что на самом деле это не намного сложнее.

Если вы хотите программировать с графикой или другими "игровыми" вещами, то C # - довольно плохой выбор - идите за C++ с OpenGL или DirectX.

edit

В конечном счете, если вы хотите карьеру в играх, перейти на C++. Возможно, вы сможете написать игровой код на C #, но реально вы не найдете почти столько карьерных возможностей, используя C #, сколько вы делаете с C++. Если вы не хотите стать программистом игровых инструментов, в этом случае C # намного лучше, чем C++, потому что вы можете получить гораздо больше функциональности, работая за гораздо меньшее время. Многие игровые компании переходят на C # для разработки как можно большего количества инструментов.

Конечно, если вы справитесь с рабочей нагрузкой, лучший способ - выучить оба языка и применить "лучший инструмент для работы". Так как они такие похожие, это действительно не трудно выучить один, когда вы узнали другой. (Действительно, большая часть кривой обучения, переходящая с C++ на C #, это .net и LINQ и т.д., а не основной язык C # per se - ужасная его часть почти идентична, с несколькими битами синтаксического сахара здесь и там)

4
ответ дан 27 November 2019 в 05:08
поделиться

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

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

Для кросс-платформенной разработки, если бы не .Net, у нас, возможно, не было бы платформы Mono. Платформа Mono расширила нашу платформу.

Вот некоторые подтверждения моих аргументов ...

5
ответ дан 27 November 2019 в 05:08
поделиться

C ++.

Это золотой стандарт программирования игр AAA. Если вам нужно сделать что-то интересное, вам нужно будет заняться C ++ или углубиться в неуправляемый C # (не всегда приятно).

C ++ также, возможно, быстрее ( применяются обычные предостережения ).

В качестве учебного опыта использование C # того не стоит. C ++, несомненно, лучше, особенно в квази-встраиваемом мире консолей. Чтобы получить объектно-ориентированный опыт, перейдите к Java.

6
ответ дан 27 November 2019 в 05:08
поделиться

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

Если вы разрабатываете не для платформы Microsoft, я сомневаюсь, что вы будете использовать C#.

10
ответ дан 27 November 2019 в 05:08
поделиться

Хорошо, вот мои два цента.

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

Лично я предпочитаю C # над C ++ в любое время. Это связано с множеством причин: и лишь некоторыми из них:

  1. C # снова делает программирование увлекательным;).
  2. Этот управляемый код помогает мне легко выполнять сложные задачи и не забывать о безопасности.
  3. C # - это чистое ООП, принудительное использование правил в вашем коде, которое помогает сделать ваш код более читабельным, "поддерживаемым" и выполнение более стабильным. Производительность превосходит C ++ как минимум на 10%, лучший программист на C ++ может стать еще лучшим программистом на C #.
  4. На самом деле это не причина, скорее что-то "мне" нравится в C #: LINQ.

Итак ... в C ++ мне не хватает многих вещей. Я скучаю по возможности (полностью) управлять собственной памятью. Я не могу сказать вам, сколько раз я ловил себя на том, что пытался «удалить» экземпляр / ссылку. Еще одна вещь, которая мне не нравится в C #, - это невозможность использовать множественное наследование, но опять же это заставило меня больше задуматься о том, как структурировать мой код.

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

Какой бы язык вы ни выбрали, чтобы оставить его в верхней части списка, всегда оставляйте варианты открытыми и не выбирайте какой-то один язык. Вы говорите, что уже знаете C ++, почему бы не изучить C #, это не повредит, и я обещаю вам, что это сделает вас лучшим программистом на C ++.

37
ответ дан 27 November 2019 в 05:08
поделиться

Я не собираюсь отвечать на исходный вопрос, поскольку в большинстве сообщений здесь содержится. Я хочу указать вам на кое-что, что вы пропустили в своем посте. Простое знание C \ C ++ \ C # не поможет вам сделать карьеру в разработке игр. Большинство игровых студий получают от десятков до сотен приложений для простой работы с кодовой обезьяной.Что отличает вас от них? Что делает вас лучшим наймом, чем кто-то другой, у кого есть опыт создания игр в другой студии?

Если вы действительно хотите сделать карьеру в игровой индустрии, даже на консолях, вам следует сделать какую-нибудь демоверсию, которая продемонстрирует то, что вы знаете. C ++ - отличный выбор языка для использования в демонстрации, если вы подаете заявку на должность разработчика консоли. Вы можете показать больше, создав инструмент на C # \ XNA для создания ресурсов для вашей демонстрации. Вы покажете менеджерам по найму и техническим руководителям, что вы НЕ ТОЛЬКО специалист по C ++ или ТОЛЬКО специалист по C #: вы разработчик.

13
ответ дан 27 November 2019 в 05:08
поделиться

Если вы хотите профессионально работать в качестве разработчика игр, вам нужно знать C/C++. Конец истории!

3
ответ дан 27 November 2019 в 05:08
поделиться

Ссылки без конста должны инициализироваться значениями l. Если бы вы могли инициализировать их временными элементами, то что бы сделали следующие?

int& foo = 5;
foo = 6; // ?!

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

const int& foo = 5;
foo = 6; // not allowed, because foo is const.

Помните, что ссылки на самом деле должны ссылаться на что-то, а не только на временные переменные. Например, допустимо следующее:

int foo = 5;
int& bar = foo;
bar = 6;
assert(foo == 6);
-121--3286570-

Терминология по этому поводу немного запутана; вы можете захотеть исследовать их немного дальше. Вот краткий ответ:

Вы назначаете временный объект (результат вызова конструктора класса) переменной. Временный объект - это R-значение. Нельзя присвоить значение R ссылке, отличной от const.

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

-121--3286571-

Я считаю, что C++ - это язык, который вы ищете. Большая часть разработки игр ведется на языке C++, потому что это мультипарадигменный язык (ООП, мета-программирование и т. д.) и потому, что он позволяет управлять памятью. Что делает C++ еще лучше, так это то, что он может быть использован для разработки на множестве платформ, в то время как C # не может сделать это в таком большом масштабе.

Многие скажут, что с C # вам не придется беспокоиться о выделении памяти, и это верно по определенной цене. Вы будете нести бремя инфраструктуры .NET на своих плечах и будете медленно видеть ограничения C # в том, как определенные задачи должны быть выполнены.

Вероятно, вы прочитали из некоторых ответов, что C++ является жестким языком программирования. Это в основном верно, но, возможно, вы не слышали о C++ 0x. Некоторые функции, найденные в C #, такие как сбор мусора, станут доступны (необязательно для использования) с C++ 0x. Кроме того, многопоточность, наконец, будет поддерживаться языком с этой редакцией стандарта C++.

Я рекомендую вам купить несколько книг на C++, а также книги на C++ DirectX/OpenGL.

2
ответ дан 27 November 2019 в 05:08
поделиться

Вы должны быть настройки делегатом NSTextField , созданного в контроллере, а затем реализовать textField: shouldChireInRange: replaceyString: в контроллере, чтобы вы получали уведомления о любых изменениях текста в текстовом поле.

При изменении текста храните измененный текст в свойстве контроллера.

При создании NSTextField в cellForRowAtIndexPath задайте значение из этого свойства.

Помните, что с Cocoa вы должны держать данные модели отдельно от вашего представления.

-121--4434979-

В зависимости от того, сколько лет книге, она может относиться к сегментированным архитектурам, где существуют два различных «размера» указателя: ближние указатели, которые указывают на локальный сегмент (и могут быть установлены в 16 бит), и дальние или длинные указатели, которые могут указывать на другой сегмент (и, следовательно, были больше). Вот почему вы видите типы, как LPVOID в Win32 API: LPVOID является «длинный (дальний) указатель на пустоту», то есть указатель на любое место в памяти.

Использование LP и NP является зависанием от Win16 и сегментированных процессорных архитектур того времени. В современной Windows, с ее плоскими виртуальными адресными местами, ближние и дальние указатели, как правило, представляют только археологический интерес: есть только один вид указателя, и вы можете игнорировать «ближний» и «длинный/дальний» квалификаторы.

-121--1849179-

Эй, если BASIC достаточно хорош для Gorillas, это достаточно хорошо для меня.

2
ответ дан 27 November 2019 в 05:08
поделиться

Это зависит

Это зависит от многих вещей - ваших целей, вашего опыта, ваших временных рамок и т. Д.

Большая часть игрового программирования не зависит от языка. Трехмерная математика - это трехмерная математика в C # в той же степени, что и в C ++. Хотя API-интерфейсы могут быть разными, и может потребоваться другая «бухгалтерия», фундаментальная логика и математика останутся прежними.

И это правда, что большинство игровых движков AAA - это C ++ с написанным поверх них языком сценариев. Это неоспоримо. Однако большинство движков AAA также имеют набор собственных инструментов, поддерживающих их, и они могут быть в чем угодно - Java, C #, C ++ и т. Д.

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

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

Если вы хотите научиться писать движок и являетесь опытным разработчиком , вам, вероятно, следует подумать о C ++. C # тоже возможен, но количество кода и простота интеграции C ++, вероятно, превосходит его.

Если вы хотите научиться писать движок и являетесь новым разработчиком , я бы, вероятно, порекомендовал C # / XNA. Вы будете быстрее разбираться в игре, с меньшими трудностями при изучении тонкостей C ++.

Если вы хотите работать в отрасли , вам нужно выяснить, какую работу вы хотите. Язык высокого уровня может помочь освоить инструменты и / или веб-разработку, что может открыть новые возможности для реальной работы с игрой. Даже знание языков сценариев может помочь, если вы хотите получить больше должности разработчика игр / сценаристов. Скорее всего, вы не сразу получите работу по работе с ядром движка, так как навыки, необходимые для этого, довольно высоки. Сильные навыки разработки на C ++ всегда полезны, особенно в сценариях реального времени или сетевых сценариях.

Разработка игрового движка AAA связана с серьезным программным кодом, вводящим в заблуждение.

Если вы хотите создать компанию по профессиональному развитию , то вы, вероятно, не читаете это, но уже знаете, что C ++, вероятно, является единственным жизнеспособным ответом.

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

26
ответ дан 27 November 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: