Мнение новичка на этом форуме но не новичка в программировании. Хочу сказать что это мое мнение и никому я ничего не навязываю даже если кому то покажется что я хвалю C# и XNA. Вначале хочется сказать несколько слов о C++ и C# да простят меня за оффтоп. В С++ все намного сложнее чем на C#. Очистка памяти целиком ложится на программиста. Почти полное отсутствие Intellisense(знающие люди поймут что без этого кодинг превращается в мучение с копанием в MSDN). Попрограммировав немного на Dx9 и попробовав Dx10 я понял что на чистом нативном API ничего особенного не сделаешь. А OpenGL просто ужасен, когда программируешь на на нем чувствуешь что работаешь с примитивной рисовалкой т.к все функции реализованы в этих расширениях а работать с ними это верх маразма тем более по непонятной причине он у меня тормозит. Вконец измучавшись над тем чтобы сделать на C++ Directx чтото вроде Boulder dash я бросил этот язык(я вначале изучал C#) и обратил внимание на XNA. Но сначала я хочу досказать мысль которая будет полезна тем кто выбирает язык. Вот некоторые из проблем что мучали меня в C++ и которые отсутствуют в NET и C# - Отсутствие иерархичности в библиотеках совершенно дикие и непонятные различные названия функций - То что функции располагаются не в удобных классах а в хедер файлах - Отсутствие Intellisense и в следствие этого необходимость лазать в справку постоянно - Необходимость контроля над памятью и указатели - Уродские синтаксические конструкции вроде ((*void)&ptr) вслдествии этого необходимость серьезно вчитываться в код - Сложности в том что называется Generic в C# а в С++ - template - Библиотеки и муки с ними (кто пробовал тот знает) - Постоянные муки с компиляцией чужого кода (да эти unidentifited symbols by Linker) - Ощущение что ООП(полиморфизм,интерфейсы и прочее) сделаны там только для галочки - Необходимоть помнить огромное кол-во всего и вся Из единственных плюсов C++ могу выделить разве что быстродействие и ощущение себя крутым когда пишешь нечто вроде malloc(*mydata) + &foo ? 0 : 1. А вот несколько слов о движках и почему мне нравится программирование на API а не готовых движках Разумеется мое мнение касается движков которые берут на себя все функции игры а не скажем физический движок. 1 - Нежелание разбираться в нем из-за ощущения что он неподойдет для целей которые мне захочется реализовать 2 - Нежелание осознавать что я использую чей-то движок с лицензией. 3 - Даже если движок бесплатный то есть ощущение что он неполноценный (XNA это не касается потому что это не движок а API) 4 - Я ненавижу ограничения движка (но меня устраивают ограничения в XNA) 5 - Ну и уже тем более мне не хочется использовать такие вещи как GameMaker для создания игр (см п 4) XNA Сам XNA это не просто голая библиотека - но целый SDK то есть в комплекте поставляется несколько утилит, при установке в Visual Studio устанавливается плагин и шаблоны проектов. А сама библиотека называется XNA Framework и это не движок а API. Именно Application Programming Interface ! Почему же это все таки не движок ? Первое - В нем нету всяких редакторов уровней,моделей и скриптов. Да в нем есть некоторые функции движка в частности особенности загрузки Контента(т.е текстур,моделей и прочего) Второе - Там нет уже готовых классов для казалось бы банальных вещей присущих любому движку - камеры для обзора, графических примитивов(вроде куба или сферы) для рисования, менеджеров сцены и объектов, модели со скелетной анимацией. Все это придется писать самим для своих нужд используя функционал XNA. Там есть Content pipeline который при компиляции сериализует эти файлы в расширение xnb. Это сделанно в частности для единобразия и кроссплатформенности. Движок вашей игры делается над XNA. Т.е вы в своей игре пишете классы которые используют этот API. Но (тем кто заинтересовался) не расстраивайтесь там есть и множество классов для ваших нужд, например SpriteBatch - для рисования спрайтов и текста. Вспомогательные математические классы особенно нужны и поэтому в XNA они присутствуют и вам не нужно изобретать велосипед. Для простой 2д игры особых знаний не требуется - только загрузка текстур из готовой папочки Content и вызов функции Draw класса SpriteBatch. Помимо этого чтобы например изменить разрешение экрана, переключить в полноэкранный режим, проверить пересечения объекта и скажем. сферы все это как и многое другое делается одной строчкой. В этом, я согласен XNA похож на движок. Теперь о кроссплатформенности. Напоминаю XNA кроссплатформенен для продуктов Microsoft. Последнии версии поддерживают Windows XP SP4,Windows Vista SP2,Windows 7,XBOX360,Windows phone 7 и Zune. Также существует Mono XNA позволяющее разрабатывать на Linux,iPhone и пр.(пока что не поддерживает 3д насколько я помню). Еще существует порт на silverlight позволяющая делать игры для броузера(тоже пока 2д) - пруфлинк Вернемся к функциям XNA. Он построен на Directx9 (но все уже идет к тому чтобы перейти на более высокие версии(надеюсь DX11)). Он поддерживает практически все функции Directx9 и позволяет использовать собственные шейдеры. Также если функционала например Content pipeline не хватает его можно расширить - например - создать текстурный контур объекта из текстуры, или изменить цвет вначале загрузки объекта, или загрузить модель со анимацией. Для этого используется шаблон Content pipeline extension и подключается как библиотека к основному проекту. Хочу заметить что XNA нельзя в полной мере назвать враппером над Directx9 т.к много из тех функций что разработчики посчитали сложными, малопонятными и некроссплатформенными подверглись удалению и видоизменению. Для программиста Чтобы использовать XNA(последней версии) достаточно установить Visual Studio 2010 (можно Express C# качается вот отсюда - http://www.microsoft.com/express/Downloads/) XNA 4.0 (если вам не нужна платформа windows phone 7 качайте - http://go.microsoft.com/fwlink/?LinkId=197288) (если нужна то http://go.microsoft.com/fwlink/?LinkId=201927) Для конечного пользователя. Сейчас XNA 4.0 для запуска игр на PC у конечного пользователя должно быть установлена Directx9 - ну вы знаете где его скачать он везде есть. Net Framework 4.0 XNA Redistributable 4.0 Для запуска игр на XBOX требуется регистрация на creators.xna.com/ и платная подписка. Стоимость может варьироваться от региона к региону. Также походу дела Россия не является страной в которой запущен XBOX Live. Соответвенно даже если вы игру на своей приставке и запустите то продать ее вам не получится. Походу дела в XBox уже есть библиотеки с поддержкой XNA. Для windows phone 7 - тоже вроде никаких библиотек на него устанавливать не надо. Чтобы распространять тоже требуется платить (для студентов по программе DreamSpark несколько игр бесплатно) Чтобы соединится с Windows phone 7 или XBox нужно использовать утилиту Microsoft Connect которая поставляется с XNA. Плюсы XNA -вся мощь и плюсы NET и C# -легкие и удобные классы для различных нужд -множество уже готовых движков(откройте хотя бы codeplex) -отличная документация (не впример врапперу SlimDx или DirextxSDK) -множество примеров, обучалок на англоязычных сайтах(гуглите) -бесплатная лицензия EULA. Т.е можно разработать коммерческую игру и продавать без проблем. Минусы XNA -ограничение Directx9(пока) -несколько меньшее быстродействие по сравнению с SlimDX и уж тем более нативного Dx9 на C++.Но уверяю, в грамотно разработанной игре это даже не будет заметно. -отсутствие хэндлов(т.е указателей IntPtr на нативные интерфейсы в классах где они внутренне используются). -некоторых вещей из dx9 нету (но их можно реализовать другими путями) -документация не включает в себя шейдеры HLSL (скачайте DirectxSDK и используйте документацию оттуда) Особенности некоторых компонентов XNA Framework -Microsoft.Xna.Framework.Net - предназначена для XBOX360 и сервиса Live. Для мульиплеера лучше использовать стороннии библиотеки -Microsoft.Xna.Framework.Input - не соединяется с DirectInput т.е нет поддержки джойстика. Внутренне использует простые API функции из windows.h для клавиатуры и мыши и xinput.h для XBOX геймпада. Если вам нужна мощь вашего джойстика,руля,педалей итп - совет - создайте для этого библиотеку и вставьте DirectInput из SlimDX(он опенсорсный). -Microsoft.Xna.Framework.GamerServices - предназначена для XBOX360. Не поставляется в redistributable для windows поэтому использование в большинстве случаев ненужно. -Microsoft.Xna.Framework.Sound - звук легко использовать, есть 3d, но присутствует поддержка только двух колонок(вроде) т.е нет 5.1 или 8 каналов. Как связаться с разработчиками XNA Прежде всего заглянуть на http://forums.create.msdn.com/forums/ и спросить там(на англ языке конечно) Там они часто тусуются. Если вам хочется внести предложение или рассказать о найденной ошибке - гоу сюда connect.microsoft.com/site226/Feedback (нужна бесплатная Live регистрация) Если вас заинтресовало как внутри XNA устроено ? Используйте Reflector и загляните внутрь XNA Framework ! Если вы не знаете как например сделать какую либо вещь на ней - прежде всего загляните на http://create.msdn.com/en-US/education/catalog/ Хоть поиск там и кривой но обучалок там много и из различных компонентов этих обучалок можно вполне сделать игру ! Русскоязычных сайтов - Очень мало. единственный это - xnadev.ru - мне кажется что особо умных программистов там нет. Поэтому, вперед, изучать англ.яз и смотреть http://forums.create.msdn.com/forums/ Напоследок почитать о XNA можно в блоге одного из главных разрабов - blogs.msdn.com/b/shawnhar/
"Дать слепым - зрение,глухим - слух,немощным - поддержку,бедным - еду и лекарства, возможность творить - тем кто этого жаждет" - все это первоочередные задачи человечества,науки и техники.
Сообщение отредактировал ChaosDev - Суббота, 27.11.2010, 14:04 |