В комментариях к этому посту поступили предложения о создании блогов с тематикой, посвященной созданию игр, у меня есть некоторый опыт и я готов им поделиться.
Первую игру я делал с одноклассником (он тоже есть на стопгейме под ником Tiranys). Геймплей заключался в отстреливании рук и ног от тела, причём вместо лица можно было вставить фотографию. Игра была написана на Visual Basic, и выглядела ужасно. Здесь мы переходим к теории.
Не считайте меня графодрочером, но без приятной и быстрой графики игре не обойтись. В моём первом блине коме этого не было — все текстуры на экране мерцали, «а почему?» спросите вы, а потому, что в игре не было двойной буферизации. Что же это значит?
Рассмотрим два способа обновления сцены на экране (изначально в сцене уже присутствуют объекты, и нам надо их передвинуть):
1)
— стереть первый объект
— нарисовать на его месте фон
— нарисовать первый объект на новом месте
— повторить всё это со следующими объектами
Этот метод порочен тем, что глаз успевает заметить как мы стираем объект, перерисовываем фон и опять рисуем объект (3 операции рисования на объект).
2)
— рассчитать новые координаты всех объектов
— перерисовать фон
— вывести все объекты с новыми координатами
Это и есть двойная буферизация — сначала готовится кадр, а потом он выводится целиком (1 операция рисования), тут уже глаз ничего не успевает заметить.
Используя двойную буферизацию мы получим быструю графику только для малых разрешений, и вряд ли для 3D. Проблема в том, что если не использовать DirectX или OpenGl, все операции рисования будет выполнять процессор, и он с этим справляется плохо. В моей первой игре дело так и обстояло.
Графические API
Итак, если хотите делать игру, изучайте OpenGl или DirectX, без них вам удастся реализовать разве что квесты (я не ручаюсь за гениев оптимизации, которые умеют(?) рисовать быструю и сложную 3d графику на процессоре). Кроме того, они и буферизацию за вас сделают, и отсортируют модели по глубине и ещё много чего.
Теперь начинающий игродел стоит перед выбором что круче — DX или OGL. Это всё равно, когда вы станете гуру и будете знать тонкости каждой API, тогда и выберете, а сейчас возможностей и того и другого вам хватит с головой. Так что используйте то чем владеете (но зачем тогда вы это читаете), либо то, что понравится.
Также обстоит дело и с языком программирования — используйте ваш любимый.
Мне нравится C# + SlimDX/XNA (SlimDX и XNA — обёртки над DX, для .NET)
Краткий итог.
Изучите графическое API, без них вам придётся очень тяжко.
P.S. Я ничего не сказал про готовые движки, так как сам ими не пользуюсь, но это тоже хороший вариант для старта.
Лучшие комментарии
Как это знакомо до боли.
atomgribКак по мне, так подход «наверняка» не очень уж и профессионален. Хотя это дело каждого. Но вот с фактом того, что у пользователя уже стоит XNA Framework не согласен. Основываясь на личном опыте, могу сказать, что найти машину с данными библиотеками — не просто. Приходится тянуть из интернета. А это лишнее время и лишние мегабайты.
Хотя, в целом, если проект стоящий, то неважно какие ран-таймы необходимы — это уже доказали такие игры как Terraria и, если не ошибаюсь, Magicka. Для казуальных же игр, я бы выбрал что-нибудь другое.
atomgribОт меня так девушка ушла и я почти работу потерял(((
У меня и Tiranys'a есть блог, и я написал на нём несколько туторов по SlimDX — там начинается с подключения SlimDX к проекту и заканчивается анимированными спрайтами.
Если будет интересно можно написать уроки по 3D и XNA, но они и так есть в рунете, не говоря уже о прекрасных курсах на английском.
XNA тоже в свое время очень интересовала — она верно помогала мне на курсовых работах и прототипировании 2D приложений. Но, увы, мне она подходила только для личного использования — мысль о распространении готового проекта только пугала. И дело даже не столько в платформе .NET и виртуальной машине, сколько в самой XNA. По итогу, готовый проект может занимать полтора десятка мегабайт, в то время как с самой игрой придется распространять XNA Redist и, не дай бог, .NET Framework.
Пока нет СтартАпа рассказывать про двойную буферизацию — как-то поверхностно. Большинство так не сможет ничего сделать.
PS: Но с меня, конечно же, плюшка, да.
blogs.stopgame.ru/topic/32823
Хотелось бы что-нибудь такое по кодингу. Эффект будет мощнее.
msdn.microsoft.com/en-us/library/aa363858(v=vs.85) — собственные майкрософтовские манулы) Ничего более понятного и полного/пошагового я не видел.