28 августа 2012 28.08.12 14 3267

Как делать игры

+10

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

Первую игру я делал с одноклассником (он тоже есть на стопгейме под ником 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. Я ничего не сказал про готовые движки, так как сам ими не пользуюсь, но это тоже хороший вариант для старта.


Лучшие комментарии

что что в игре не было двойной буферизации

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

Как по мне, так подход «наверняка» не очень уж и профессионален. Хотя это дело каждого. Но вот с фактом того, что у пользователя уже стоит XNA Framework не согласен. Основываясь на личном опыте, могу сказать, что найти машину с данными библиотеками — не просто. Приходится тянуть из интернета. А это лишнее время и лишние мегабайты.

Хотя, в целом, если проект стоящий, то неважно какие ран-таймы необходимы — это уже доказали такие игры как Terraria и, если не ошибаюсь, Magicka. Для казуальных же игр, я бы выбрал что-нибудь другое.
А меня это не пугает, всё равно, у пользователя наверняка уже стоит редист.
Как это знакомо до боли.

От меня так девушка ушла и я почти работу потерял(((
Я не хотел сразу переходить к коду, скорее обрисовать ситуацию.
У меня и Tiranys'a есть блог, и я написал на нём несколько туторов по SlimDX — там начинается с подключения SlimDX к проекту и заканчивается анимированными спрайтами.
Если будет интересно можно написать уроки по 3D и XNA, но они и так есть в рунете, не говоря уже о прекрасных курсах на английском.
Тут все комментарии от людей, которые уже разбираются в предмете. А новички есть?
C# — единственный язык за последнее время, который мне был по душе. Нет, я не буду спорить по поводу C++ и его гибкости — сам частенько его использую, но нет ничего лучше для прикладного программирования, чем C#.

XNA тоже в свое время очень интересовала — она верно помогала мне на курсовых работах и прототипировании 2D приложений. Но, увы, мне она подходила только для личного использования — мысль о распространении готового проекта только пугала. И дело даже не столько в платформе .NET и виртуальной машине, сколько в самой XNA. По итогу, готовый проект может занимать полтора десятка мегабайт, в то время как с самой игрой придется распространять XNA Redist и, не дай бог, .NET Framework.
Оно, конечно, здорово, но от конкретики далековато.

Я бы сначала рассказал, где чего откуда взять, как воткнуть библиотеки DXSDK. Преимущество тех или иных функций. И на каком нибудь примере, расписал бы пошагово, что как создается и куда вставляется, и скринами обозначил бы нажимаемые кнопочки. Ввел бы понятие дебага, отладки, функций для работы с видеокартами/как вообще инициализировать DXшное окно например, куда тыкаться чтоб запустить шейдерный конвеер видеокарты аппаратно. Да тот же ваш, пример, с отстрелом кусочков картинки. В общем тут на целый цикл, где каждая статья раз в 15 больше того, что я прочитал.


Пока нет СтартАпа рассказывать про двойную буферизацию — как-то поверхностно. Большинство так не сможет ничего сделать.

PS: Но с меня, конечно же, плюшка, да.
Я считаю, что б не суметь повторить этот тутор — надо быть безруким.
blogs.stopgame.ru/topic/32823
Хотелось бы что-нибудь такое по кодингу. Эффект будет мощнее.
А ты сделай свои, с шахматами и поэтессами. Полный, грамотный пошаговый тутор — всегда на вес золота. Самый лучшие, например, по С++ — до сих пор
msdn.microsoft.com/en-us/library/aa363858(v=vs.85) — собственные майкрософтовские манулы) Ничего более понятного и полного/пошагового я не видел.
Читай также