Я начал программировать на C #, чтобы потом разрабатывать игры с XNA. Я прочитал хорошую книгу по разработке игр для C #. Поскольку я уже знал другие языки, я мог быстро освоить функции C # и синтаксический код. Затем я подошел к XNA. Поскольку книга, которую я читал, была немного устаревшей, я отложил ее и начал просматривать учебники по разработке игр для XNA через Интернет. Я мог бы выполнить и понять большинство из них, используя 2D-графику. Я создавал анимированные спрайты, заставлял своих персонажей двигаться в любом направлении, прокручивал фон вместе с движением моих персонажей и так далее. Все было сделано с "сырым" XNA.
Мне было трудно понять некоторые из этих вещей, и я обнаружил, что некоторые вещи уже встроены в фреймворк. Я нашел другие игровые движки, в которых я мог четко понимать, по крайней мере, простые линейные коды, такие как « FlatRedBall » , « Axiom » и « Quick Start Engine » . Я уже знал о знаменитых, таких как "OGRE" , "Unreal" и "Unity" . В то же время у меня было искушение выбросить все это и начать изучать некоторые известные программы программирования игрового движка. Я хотел остаться с XNA, потому что мне потребовалось время, чтобы учиться; время, которое я не хотел бы тратить впустую.
На этот раз я оставляю это опытным. Могу ли я пройти через какой-нибудь игровой движок и использовать то, что он может предложить, даже если я начинаю с разработки игр? Некоторые люди могут подумать, что это хорошо, чтобы привыкнуть к скучным процедурам обнаженного фреймворка. Если да, то с чего бы начать? Я слышал, что это варьируется от рынка к рынку. Возможно, мы могли бы подумать, что я хочу специфичную для RPG.
Ответы:
Это зависит от того, что вы хотите узнать. Если вы хотите «просто создать игру», вы можете хорошо работать с движком. Я лично не рекомендую это.
Если вы действительно хотите понять, как работает компьютерная графика, вы должны углубиться и изучить все это. От обновления вашей линейной алгебры (по крайней мере, матриц, векторов и линейных пространств) до понимания работы графических конвейеров. XNA - лучшая основа для начала. В ней была моя первая игра (я имею в виду настоящую игру, первым 3D-приложением были боевые танки в openGL). Если вы хотите начать 3D-программирование, у вас нет таких амбициозных планов, вы не можете сделать RPG сейчас. Вы должны попытаться сделать какую-нибудь игру, в которой вы летите в космосе, полном кубов и пытаетесь стрелять в красные, чтобы изучить основы. Это, вероятно, займет у вас больше времени, чем вы думаете :). Но это многому тебя научит.
И пойти на это! Программирование 3D-графики - лучшее, что вы можете сделать для жизни. Это сложно, весело и креативно в одной упаковке.
источник
Нет ничего плохого в использовании существующего движка, все сводится к вашим целям.
Если вас больше всего интересует просто создание игр или игровой дизайн, чем быстрее вы получите код геймплея, тем лучше. Здесь отлично работает что-то вроде Unity, так как вы можете использовать свои знания C # и начать прикреплять скрипты к объектам и сразу же что-то запустить.
Если вы хотите стать программистом игры, то вам нужно понимать вещи на более низком уровне. Фреймворк, такой как XNA, является хорошей отправной точкой. Вы можете положиться на фреймворк, чтобы все заработало, а затем начать заменять части фреймворка собственным кодом, когда вы научитесь создавать каждый компонент своей игры.
источник
СОВЕТ ОТ ЛЮБИТЕЛЯ
// От нуля до любителя за годы обучения
Я бы определенно держался подальше от двигателей высокого уровня, таких как Unity или Torque2D MIT. Они отлично подходят для небольших прототипов, но я бы никогда не отнесся к ним серьезно, чтобы разработать свою собственную видеоигру. Зачем мне? Какой смысл, если это был не более чем простой римейк SideScroller или Arcade?
Большинство игровых движков, библиотек или фреймворков выполняют не более чем простейшие задачи с большим количеством раздутого кода с функциями и функциями, которые вы никогда не будете использовать.
Когда я был новичком в разработке игр много лет назад, я начинал на вершине. Двигатели очень высокого уровня. Не слишком высоко, как RPG MAKER, но определенно высоко там, как Unity и Torque. Затем я опустился до XNA и C #, потому что у него было так много ресурсов и учебных пособий. Моему основному проекту требовалась производительность, или, может быть, я просто одержим желанием добиться невероятной производительности в своем программном обеспечении, даже если это не большой проект. XNA просто не решила его, и у меня было много проблем с двигателем, который, как я читал, требовал устранения головной боли. Какой смысл использовать что-то «более высокого уровня», такое как XNA / C #, когда вы выполняете ту же работу (исправление ошибок и проблем XNA), как если бы вы запускали свой собственный движок в C ++?
После недолгого изучения я в итоге узнал о том, как создаются игровые движки, и начал изучать код самих движков. Прочитав, что говорят большинство профессионалов, и жалобы критиков игровых движков, я понял: «Зачем вообще использовать движок?»
Совершенствование моего C ++ и действительно понимание некоторых философий, используемых на этом языке, мне очень помогли. Тем не менее, я потратил так много времени, узнавая о многом, что просто хотел начать делать игру.
В итоге я получил что-то с высокой похвалой, был C ++ и очень низкий уровень: SDL. К сожалению, это была головная боль. Это настолько низкий уровень, я не вижу причин, почему бы даже использовать эту библиотеку. Я бы предпочел просто изучить OpenGL и сделать это сам с нуля. Честно говоря, это было главным образом из-за того, что мне нужно было реализовать свой собственный код, чтобы сделать что-то основное, например, перевернуть изображение (а другая реализация не работала из-за того, как я обрабатывал спрайты), что привело меня к мусорной корзине SDL навсегда. Это здорово, если вам нужен программный рендерер, но, по-моему, я бы предпочел, чтобы он стал более низким с аппаратным (OpenGL) или более высоким (SFML).
Не желая покупать еще одну книгу об Amazon и изучать еще один API, я пошел выше. SFML просто замечательный, не говоря уже о том, чтобы его высоко ценили в Интернете. Я прочитал почти бесконечное количество положительных отзывов, почти без отрицательных. Я не могу сказать то же самое для SDL. Он обрабатывает все экстремальные основы, но остальное оставляет за мной и другими библиотеками по моему выбору. С тех пор я придерживался этого.
ИМО, игровой движок просто глупый. Низкоуровневые библиотеки - лучший выбор как для опытных, так и для начинающих программистов.
Также следует отметить, что я узнал больше о концепциях программирования и отточил свои навыки разработки программного обеспечения, когда вынужден работать с вещами на более низком уровне, чем я когда-либо изучал с помощью игровых движков WYSIWYG высокого уровня.
Что дает вам что-то вроде Unity над XNA? Визуальное редактирование и костыль. Новички со временем узнают, что вам все равно придется кодировать практически всю игру, как если бы у вас был чистый C ++, а визуальные редакторы неэффективны для того, что вы могли бы создать самостоятельно.
Что дает вам что-то вроде XNA через SFML или вашу собственную реализацию OpenGL и других полезных библиотек? ИМО, absolutley ничего хорошего. Хуже производительности, C # вместо C ++, множество учебных пособий для новичков, но значительно меньший профессионализм, и некоторые избавления от головной боли, что IMO снова просто костыль для того, что вы должны просто изучить с C ++. Сначала я был напуган C ++ и любил C #, в основном из-за слухов и слухов о мнении дураков, у которых были те же проблемы, которые у меня были изначально с C ++: я просто хотел достаточно хорошего программиста. Я понял, что мне нужно изучить больше основ и обострить свои слабости, чтобы преодолеть проблемы, которые у меня были с C ++, которые C # «облегчил». Я когда-нибудь упускаю простоту некоторых вещей в C #? Даже не! Я знаю, как сделать это в C ++ без хлопот.
Если низкоуровневые библиотеки или изучение DirectX / OpenGL пугают вас, просто подождите, пока вы не начнете понимать сложность создания полноценной видеоигры.
Моя философия игровых движков может быть обобщена в двух примерах, объясняющих избыточность и бесполезность движков, за исключением отдельных случаев.
У новичков, которых пугают низкоуровневыми библиотеками, случится приступ, когда они обнаружат, что даже с высокоуровневым движком, таким как Unity, (помимо рендеринга графики, воспроизведения аудио, загрузки контента; реальных базовых вещей) это будет почти идентично созданию игры с нуля. Сложность заключается в разработке игры, а не в понимании API или разработке классов для отображения на дисплее.
Эксперты, которых не пугает сложность создания полноценной игры в чем-то вроде Unity, бесполезны для Unity, потому что время, в течение которого нужно уверенно изучать API и требования конкретного движка, вероятно, больше связано с головной болью и больше времени, чем потребуется, чтобы закодировать несколько классов, необходимых для выполнения основ.
Таким образом, двигатели бесполезны для новичков, потому что новички ничего не могут с ними сделать, потому что им не хватает инженерных навыков. Аналогично, движки бесполезны для ветеранов, потому что у них уже есть инженерные навыки, чтобы делать это без движка, и они могли бы также запустить свой более эффективный, специфический «движок», чем пройти через головную боль изучения API обоих игровых движков, функции и причуды производительности. Не говоря уже о огромном кошмаре работы с движками, к которым вы иногда не можете прикоснуться, потому что они не являются открытым исходным кодом (или даже если они есть, чтение чужого кода иногда может быть кошмаром).
Черт, даже некоторые "игровые рамки" низкого уровня "- это всего лишь несколько классов для создания окна, рендеринга на дисплей и воспроизведения аудио. Это то, что профессионал может сделать сам с нуля, используя другие библиотеки, такие как SDL / SFML или свою собственную реализацию OpenGL / DirectX / OpenAL, за долю времени, которое требуется для создания полноценной видеоигры.
TLDR;
Если вы хотите программировать, научитесь быть программистом .
Избегайте использования движков , но не будьте дураками и игнорируйте невероятно полезные библиотеки.
Если вы хотите стать дизайнером игр , попробуйте движок WYSIWYG и прокачайте эти игры!
Если вы хотите стать программистом игры , избегайте таких движков, как костыль.
Для меня использование игровых движков более высокого уровня подорвало мою способность стать программистом. В тот момент, когда я начал использовать библиотеки более низкого уровня или вообще не использовал какую-либо библиотеку, я начал так много узнавать, что быстро перешел от новичка к человеку, который теперь может создавать видеоигры без каких-либо ссылок, учебных пособий или книг рядом со мной. Просто мой компилятор и много техники и практики.
Объем обучения, который я получил из низкоуровневых библиотек за короткое время, был намного больше, чем объем, полученный за ОЧЕНЬ ДЛИННОЕ время с ДВИГАТЕЛЯМИ более высокого уровня. **
источник