У меня есть основное игровое знание программирования в c и C++. Я изучаю c# в наше время. Если я хочу сделать карьеру в консольном игровом программировании, какой я должен использовать для продолжения? Я заметил, что много игровых компаний использует C++/C (вероятно, из-за причин прежней версии). Также, вероятно, C++ обладает большим количеством числа поддерживаемых библиотек?
В которых языках современные игровые механизмы (unreal/crysis и т.д.) записаны в?
Какой язык лучшее поставилось? и почему?
C++, по двум причинам.
1) много игр запрограммировано на С++. На управляемом языке до сих пор не запрограммирована ни одна основная игра.
2) Си++ настолько сложен, насколько это возможно. Приходится осваивать ручное управление памятью и вообще никаких проверок (кроме отличного Valgrind!). Если Вы освоите Си++, то это можно будет перенести на управляемые процедурные языки. Меньше - наоборот.
С++ имеет уровень сложности, близкий к APL! Вы никогда не добьетесь успеха, играя со слабыми оппонентами.
Джоэл очень сильно об этом говорит . Люди, которые понимают, как работает машина, делают программистов лучше, потому что все абстракции негерметичны.
Взгляните на это так - хотя вы можете написать игру на C #, это не откроет вам много дверей в карьере. Если вы знаете C ++ и Lua, тогда у вас будет гораздо больше возможностей для трудоустройства.
Вы также говорите не только о настольных ПК и консолях, в настоящее время игры в значительной степени предназначены для мобильных устройств, поэтому только знание C # ограничит вас еще больше. Конечно, C ++ не будет оптимальным выбором для написания приложений для iPhone, но вы будете гораздо ближе к программисту на C ++, если знаете C ++, чем если знаете C #.
Разработчики игр используют C ++ не по устаревшим причинам (хотя установка движков и библиотек C ++ помогает), а для повышения производительности и опыта. Разработчики игр знают C ++, он у них работает очень хорошо, так что ничего менять не нужно. Это не похоже на бизнес-приложения (в Windows), в которых разработчик думает о текущих инструментах Microsoft.
Я думаю, что C ++.
Потому что C # требует дополнительной установки для среды выполнения C #, которая только занимает место на диске. А C #, конечно, немного медленнее.
Это действительно зависит от того, какую игру вы планируете создать: многие игры могут быть написаны на таком языке, как C #. При этом большая часть разработки игр выполняется на C ++ просто потому, что большая часть разработки игр должна максимально использовать все возможности платформы, а это означает либо C, C ++, либо ( shudder ) ассемблер.
Если бы вы знали C # и XNA, вы могли бы довольно просто создать несколько примеров игр, что могло бы помочь выйти на рынок.
Я предполагаю, что основные игровые движки написаны на C ++, но некоторый другой код ядра может быть на C #.
Это всегда трудно сказать, потому что они использовали сборку до 1993 года, NBA Jam, если кто-то помнит этого плохого мальчика. Технология постоянно развивается, поэтому очень трудно сказать, куда она пойдет, я бы порекомендовал выучить C и получить очень четкое представление об этом, а затем перейти на C++. Я скажу это в качестве предостережения, если вам нравится играть в игры, в которые вы не получите удовольствия от игр с кодировкой.
C ++ - это лингва-франка индустрии консольных игр. Хорошо это или плохо, но вы должны знать это, чтобы стать профессиональным программистом консольных игр.
С++ с выигрышем32/GDI относительно легко, но гораздо сложнее, чем, скажем, Flash или Python (pygame) - однако, используя C++, вы многому научитесь в процессе и будете готовы продолжать продвижение по карьерной лестнице в качестве разработчика игр. Вы также можете заглянуть в XNA, если хотите программировать на xbox360.
Я взял несколько уроков в Game Institute (GI) и многому научился на С++, win32 API и DirectX.
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 - ужасная его часть почти идентична, с несколькими битами синтаксического сахара здесь и там)
По правде говоря ... вы должны решить, какой язык лучше. Я знаю, что могу делать с C #. Я знаю, что можно сделать на C ++. C # не создан для того, чтобы делать то, для чего был создан C ++ ... писать код на самом базовом уровне и при этом сохранять смысл при чтении человеческими глазами.
Мы разрабатываем игровой движок с C #, DirectX ... это проблема? черт возьми ... но мы решили это сделать. Мы рассматриваем некоторые уровни производительности, которые очень близки к тому, что может дать C ++. Так что я не вижу в этом никаких проблем.
Для кросс-платформенной разработки, если бы не .Net, у нас, возможно, не было бы платформы Mono. Платформа Mono расширила нашу платформу.
Вот некоторые подтверждения моих аргументов ...
C ++.
Это золотой стандарт программирования игр AAA. Если вам нужно сделать что-то интересное, вам нужно будет заняться C ++ или углубиться в неуправляемый C # (не всегда приятно).
C ++ также, возможно, быстрее ( применяются обычные предостережения ).
В качестве учебного опыта использование C # того не стоит. C ++, несомненно, лучше, особенно в квази-встраиваемом мире консолей. Чтобы получить объектно-ориентированный опыт, перейдите к Java.
Нет ни одного языка, который был бы "лучшим пари". Используйте язык, наиболее подходящий для того, что вам нужно делать, будь то игровое программирование или любая другая область. Си++ не исчезнет в ближайшее время.
Если вы разрабатываете не для платформы Microsoft, я сомневаюсь, что вы будете использовать C#.
Хорошо, вот мои два цента.
Если вы планируете серьезно заняться игровой индустрией, я рекомендую вам выучить оба языка. Начав с C ++, затем перейдя на управляемый язык, такой как C #. C ++ имеет преимущества перед C #, но C # также имеет преимущества перед C ++.
Лично я предпочитаю C # над C ++ в любое время. Это связано с множеством причин: и лишь некоторыми из них:
Итак ... в C ++ мне не хватает многих вещей. Я скучаю по возможности (полностью) управлять собственной памятью. Я не могу сказать вам, сколько раз я ловил себя на том, что пытался «удалить» экземпляр / ссылку. Еще одна вещь, которая мне не нравится в C #, - это невозможность использовать множественное наследование, но опять же это заставило меня больше задуматься о том, как структурировать мой код.
На эту тему было больше дискуссий, чем звезд в известной вселенной, и все они зашли в тупик. Ни один из языков не лучше другого, и отказ от одного из них в пользу другого в конечном итоге навредит вам. Времена меняются, и меняются стандарты компьютерного программирования.
Какой бы язык вы ни выбрали, чтобы оставить его в верхней части списка, всегда оставляйте варианты открытыми и не выбирайте какой-то один язык. Вы говорите, что уже знаете C ++, почему бы не изучить C #, это не повредит, и я обещаю вам, что это сделает вас лучшим программистом на C ++.
Я не собираюсь отвечать на исходный вопрос, поскольку в большинстве сообщений здесь содержится. Я хочу указать вам на кое-что, что вы пропустили в своем посте. Простое знание C \ C ++ \ C # не поможет вам сделать карьеру в разработке игр. Большинство игровых студий получают от десятков до сотен приложений для простой работы с кодовой обезьяной.Что отличает вас от них? Что делает вас лучшим наймом, чем кто-то другой, у кого есть опыт создания игр в другой студии?
Если вы действительно хотите сделать карьеру в игровой индустрии, даже на консолях, вам следует сделать какую-нибудь демоверсию, которая продемонстрирует то, что вы знаете. C ++ - отличный выбор языка для использования в демонстрации, если вы подаете заявку на должность разработчика консоли. Вы можете показать больше, создав инструмент на C # \ XNA для создания ресурсов для вашей демонстрации. Вы покажете менеджерам по найму и техническим руководителям, что вы НЕ ТОЛЬКО специалист по C ++ или ТОЛЬКО специалист по C #: вы разработчик.
Если вы хотите профессионально работать в качестве разработчика игр, вам нужно знать C/C++. Конец истории!
Ссылки без конста должны инициализироваться значениями 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.
Вы должны быть настройки делегатом NSTextField
, созданного в контроллере, а затем реализовать textField: shouldChireInRange: replaceyString:
в контроллере, чтобы вы получали уведомления о любых изменениях текста в текстовом поле.
При изменении текста храните измененный текст в свойстве контроллера.
При создании NSTextField
в cellForRowAtIndexPath
задайте значение из этого свойства.
Помните, что с Cocoa вы должны держать данные модели отдельно от вашего представления.
-121--4434979-В зависимости от того, сколько лет книге, она может относиться к сегментированным архитектурам, где существуют два различных «размера» указателя: ближние указатели, которые указывают на локальный сегмент (и могут быть установлены в 16 бит), и дальние или длинные указатели, которые могут указывать на другой сегмент (и, следовательно, были больше). Вот почему вы видите типы, как LPVOID в Win32 API: LPVOID является «длинный (дальний) указатель на пустоту», то есть указатель на любое место в памяти.
Использование LP и NP является зависанием от Win16 и сегментированных процессорных архитектур того времени. В современной Windows, с ее плоскими виртуальными адресными местами, ближние и дальние указатели, как правило, представляют только археологический интерес: есть только один вид указателя, и вы можете игнорировать «ближний» и «длинный/дальний» квалификаторы.
-121--1849179-Эй, если BASIC достаточно хорош для Gorillas, это достаточно хорошо для меня.
Это зависит
Это зависит от многих вещей - ваших целей, вашего опыта, ваших временных рамок и т. Д.
Большая часть игрового программирования не зависит от языка. Трехмерная математика - это трехмерная математика в C # в той же степени, что и в C ++. Хотя API-интерфейсы могут быть разными, и может потребоваться другая «бухгалтерия», фундаментальная логика и математика останутся прежними.
И это правда, что большинство игровых движков AAA - это C ++ с написанным поверх них языком сценариев. Это неоспоримо. Однако большинство движков AAA также имеют набор собственных инструментов, поддерживающих их, и они могут быть в чем угодно - Java, C #, C ++ и т. Д.
Если вы хотите написать игру и являетесь опытным разработчиком то у C ++ и C # есть много чего для них. В C # меньше забот, а в C ++ больше доступных библиотек и инструментов. Однако для чего-то очень сложного лучше всего попытаться использовать существующий движок в качестве отправной точки.
Если вы хотите написать игру и являетесь новым разработчиком , не пишите движок. Используйте существующий движок и модифицируйте его или используйте его возможности, чтобы написать свою игру. Поверьте мне.
Если вы хотите научиться писать движок и являетесь опытным разработчиком , вам, вероятно, следует подумать о C ++. C # тоже возможен, но количество кода и простота интеграции C ++, вероятно, превосходит его.
Если вы хотите научиться писать движок и являетесь новым разработчиком , я бы, вероятно, порекомендовал C # / XNA. Вы будете быстрее разбираться в игре, с меньшими трудностями при изучении тонкостей C ++.
Если вы хотите работать в отрасли , вам нужно выяснить, какую работу вы хотите. Язык высокого уровня может помочь освоить инструменты и / или веб-разработку, что может открыть новые возможности для реальной работы с игрой. Даже знание языков сценариев может помочь, если вы хотите получить больше должности разработчика игр / сценаристов. Скорее всего, вы не сразу получите работу по работе с ядром движка, так как навыки, необходимые для этого, довольно высоки. Сильные навыки разработки на C ++ всегда полезны, особенно в сценариях реального времени или сетевых сценариях.
Разработка игрового движка AAA связана с серьезным программным кодом, вводящим в заблуждение.
Если вы хотите создать компанию по профессиональному развитию , то вы, вероятно, не читаете это, но уже знаете, что C ++, вероятно, является единственным жизнеспособным ответом.
Если вы хотите заниматься разработкой казуальных игр , вам, вероятно, следует рассмотреть возможность использования Flash или аналогичной технологии.