Разработка игр для горя и радости. Часть 2: Вопросы и ответы

on июля 30, 2000 - 00:00

Комментарии к статье Павла Горбунова "Разработка игр для горя и радости. Теория и практика создания реал-тайм стратегий" ("ВР" №5-6, июнь, 2000)

Павел Горбунов (в дальнейшем ПГ): "Чего не ожидал, так это достаточно грамотного и прекрасного дополнения к моей статье. Мне было полезно и интересно почитать. Прошло уже немало времени с тех пор, как я написал эту статью, и я бы сам не против дополнить кое-что в ней не меньше, чем этого хочет Юрий. И если Юрий согласится, то наряду с его комментариями я "нарисую" и свои. А если он хотел дать оценку объективней, то согласиться должен".

Итак, Павел Горбунов и Юрий Заяц предлагают читателю 2 точки зрения, которые где-то различны, а где-то совпадают. Проблема создания игр не решается одним человеком, поэтому у нас должно все получиться достаточно цивилизованно.

На каком языке пишут игры под MS Windows сейчас?

"...Microsoft Visual C/C++. На других языках пишут редко..."

Конечно же, MS Visual C/C+ являет собой мощнейшее средство для разработки компьютерных игр под Windows. Однако не надо сбрасывать со счетов и такой язык программирования, как Delphi. Для многих программистов, переходящих из DOS-а в Windows, именно Delphi становится родной стихией. Причин тому много: удобный синтаксис, гибкость, читаемость кода, а также нежелание изучать Си взамен изученного в школе Pascal-я:). Подтверждение этому — не уменьшающийся трафик в Fido-конференции RU.DELPHI, в противовес конференциям по C++.

Возможно, сейчас вы скажете, что это тяжелый случай, но я знаю человека, который пишет стратегию на VB. Попробуйте, может, и Вам понравится.

 

ПГ> Юрий, видно, как и я, тоже шишек набил на этом.:-)

Действительно, с проблемой нежелания изучать Си и/или Си++ я знаком, но в жизни мне не приходилось встречать людей, которые хорошо овладели Си (Си++) и желали бы вернуться к Паскалю (ObjectedPascal). Причиной же неуменьшающегося трафика, на мой взгляд, в Fido-конференции RU.DELPHI является то, что программисты, владеющие Delphi, слабо задействованы в коммерции, имеют больше времени для переписки. Очень удивительно то, что конференции по С++ все еще существуют. Паскаль много легче изучать, чем Си, а переучиваться с Паскаля на Си сложней, чем изучать Си с чистого листа. Споры на эту тему меня утомили, а поэтому сойдемся на том, что два языка имеют права на существование.

ЮЗ> Глубоко убежден, что споры на тему "Что круче: Паскаль или Си" бессмысленны. Моя же цель: предложить как можно больше альтернатив для написания компьютерной игры. Свободу выбора никто не отменял.

 

Я настоятельно рекомендую Вам в своих играх использовать технологию DirectX.

Соответствующие библиотеки созданы практически для всех языков и, конечно же, для MSVC++ и Delphi. При этом обратите большое внимание на игровой интерфейс, ведь он будет отличаться от привычного для пользователя интерфейса "Форточек".

 

ПГ> Согласен! API DirectX просто необходимо использовать! Честно говоря, я был шокирован тем, что кто-то пытается через Delphi работать с MS DirectX. Есть только одна проблема. Примеры, насколько я знаю, которые идут под DirectX 7.0, написаны на 3-х языках: на Си, на Си++ и на VB. Я считаю, что попытка работать через Delphi с MS DirectX — не что иное, как желание найти приключений. Это было мое мнение...

ЮЗ> Необходимые библиотеки для Delphi появлялись буквально через несколько месяцев после выхода новой версии DirectX. И это не считая кустарных библиотек, реализующих только часть функций API. Ну а насчет желания найти приключений... Работа с DirectX ничем не отличается от работы в Си, если не принимать во внимание специфику языка.

 

Какие графические ресурсы использовать для создания игры?

"Использовать лучше TGA файлы, потому что они весьма просты в использовании и их поддерживает 3D Studio MAX и Photoshop".

Это все, конечно, так, но не забывайте, что для этого Вам придется писать собственный загрузчик спрайтов взамен стандартного загрузчика BMP. Скорость загрузки самих ресурсов не будет слишком низкой даже в случае использования BMP, но в данном случае решающий фактор — свободное место на винчестере пользователя. Альтернативный способ — использование распаковщиков, например unrar.dll, который вместе с фрагментом кода поставляется в комплекте с архиватором RAR. Т.е. в процессе создания игры Вы пакуете данные в архив (можно с паролем, чтобы никто не добрался), а затем распаковываете их перед началом или в процессе игры. Только следите, чтобы архив не был типа Solid, иначе не дождетесь конца распаковки.

ПГ> Что TGA пользоваться не обязательно, так это точно. Хотя, я бы не стал бы браться за BMP формат, т.к. вопрос не только в объеме, но и в формате данных. TGA может быть 16-битным, 24-битным и 32-битным (Alpha channel), что много удачней, чем то, что умеет BMP формат. Кроме того, в MS DirectX 7.0 в компоненте D3DX реализован "загрузчик" TGA:

"TGA is supported for the following cases: 16-, 24-, and 32-bpp direct color and 8-bpp palettzed. Also, 8- and 16-bpp gray scale is supported. RLE versions of the preceding TGA formats are also supported. Note that colorkeying and premultiplied alpha are not currently supported for TGA files."

Единственная проблема, которая осталась нерешенной для TGA, — это проблема с альфа-каналом и цветовым ключом.

"Многие акселераторы не поддерживают акселерацию 24-битной графики, и поэтому важно сделать еще и реал-тайм конвертор 24-битной графики в 16-битную и 32-битную".

Я бы посоветовал заранее определиться с этим параметром. Чаще всего, особенно если Вы не используете хитрые градиентные заливки, 16-битный цвет — лучший выбор. Если же его не хватает, — используйте 32-битный — все равно DX не позволяет включить разрешение с 24-битной графикой.

ПГ> DirectX не позволяет включить разрешение с 24-битной графикой? Это только на S3 карточках такое может быть. На самом деле, Voodoo Banshee, ATI Rage дают возможность работать в этих режимах. К примеру, HAL драйвер Rendition поддерживает 24-битные режимы без вопросов. Кстати, 24-битной графики достаточно будет, так как ее легко конвертировать до 32-битной и до 16-битной (механизм конвертации Юрий описал ниже). Даже BillBoarding можно делать с 24-битной графикой (примером может служить мой релиз j12 или выше на www.developers.f2s.com). Просто берем мой любимый черный цвет для прозрачности и выделяем его:

D3DDevice->SetRenderState(D3DRENDERSTATE_ALPHAREF, 0x00000000);

D3DDevice->SetRenderState(D3DRENDERSTATE_ALPHAFUNC, D3DCMP_GREATER);

D3DDevice->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, TRUE);

ЮЗ> К сожалению, данные видеокарточки — большая редкость в наших краях. Специально были проведены исследования, но ни на одной из использованных видеокарт режим 24 бита не включился: Permedia 2 V, i810 (соответственно, и на i740 он не включится), S3, TNT2 M64 (спасибо за тестирование Михаилу Баранову). Других видеокарт под рукой не оказалось. Вам не кажется странным следить за тем, чтобы игра пошла на компьютере (читай сервере) с NT и 3-м сервиспаком и не запустилась на рабочей станции с аппаратными возможностями ниже среднего?

"Кстати, у спрайтов должен быть какой-то цвет "невидимым". Я выбираю черный (Red=0,Green=0,Blue=0)".

В данном случае выбирается тот цвет, который больше не будет использоваться в игре. В основном используют т.н. Fuchsia — красно-фиолетовый (лиловый) цвет (RGB(255,0,255)). Однако Вы вольны использовать тот, который Вам нравится. Функция перевода из RGB в формат, используемый DX в реализации прозрачности, довольно проста:

function MAKE16(r,g,b:byte):word;

Begin

MAKE16:=(((r shr 3) shl 11) or ((g shr 2) shl 5) or (b shr 3));

End;

/// Код процедуры //////////////

...

Value:=MAKE16(ValueR,ValueG,ValueB);

ColorKey.dwColorSpaceLowValue:=Value;

ColorKey.dwColorSpaceHighValue:=Value;

...

В Си достаточно определить макрос типа этого:

#define MAKE16(r,g,b) ((((r)>>3)<<11) | (((g)>>2)<<5) | ((b)>>3))

ПГ> Хорошо дополнено, однако. Первый раз в жизни увидел DirectX в союзе с Delphi.:-)

Каким ПО пользоваться для создания графических ресурсов?

"Здесь совсем просто".

Да, особенно в том случае, если Вы пишете стратегию в текстовом режиме.

Не надейтесь на то, что Вы легко и быстро нарисуете всю графику. Постоянно придется вносить исправления и корректировать уже нарисованное. Графика в современных (подчеркиваю) играх — важнейший элемент, необходимый для связи игрока с виртуальным миром, поэтому "халтура не пройдет".

3D Studio MAX.

Пакет для 3d-моделирования, в руках профессионала обладающий огромными возможностями. Очень легок для осваивания. На самой большой свалке 3d-моделей (www.3dcafe.com) можно найти необходимые Вам модели для игры. Элегантный и интуитивный интерфейс. Если Ваш компьютер не обладает слишком большими возможностями (P166 и ниже), то используйте версию 1.2, в противном случае устанавливайте сразу 3.1.

Lightwave

Выбор дяди Кармака. К сожалению, к LW трудно привыкнуть после 3DS MAX, его моделлинг отличается от моделирования в максе. Отрицательная сторона — отсутствие NURBS-моделирования. Рекомендуемая версия — 6.0.

Poser

Среди профессионалов (да и не только) использование Позера (равно как и других аналогичных моделлеров) считается ламерством. Модели, созданные в нем, легко узнаются и, чаще всего, оплевываются. Единственное использование Позера — массовки. Версия — 4 (полная — на двух CD).

Остальные моделлеры, такие как Maya, SoftImage, Rhino, использовать по вкусу.

Adobe Photoshop

Профессиональный пакет для обработки графики. К сожалению, только для обработки — рисовать в нем довольно сложно, используйте лучше Corel Photo-Paint. Если Вы не можете разобраться в этом нагромождении менюшек, инструментов и слоев — используйте более простую (но не менее удобную) версию 3.0, иначе не раздумывая устанавливайте 5.5.

Corel Photo-Paint

Незаменимое средство при рисовании "с нуля". Большой выбор инструментов, кистей. Поддержка плугинов от Photoshop. Версии от 7 и выше (без особых различий). Последняя — 9.

 

MS Paint.

НАШ ВЫБОР. Без комментариев.

ПГ> Халтура не пройдет. "Здесь совсем просто" — это было лишь сравнение проблем программиста и художника. Никто и не говорит, что хороший артворк является простейшей задачей. Использование Позера в коммерческих проектах — это есть глупость, и с этим я не могу не согласиться, но ведь не каждый читатель умеет изображать рыцарей в шикарных доспехах. Позер хорош тем, что он даст возможность сделать draft privew графике и оценить правильность движения по проекту. Я рад, что Юрий дополнил список ПО новыми названиями и хотел бы сделать свой вклад: Animatek World Builder — это МОЙ ВЫБОР:-).

Какие проекции использовать?

"...как вид сверху. [...] ...геймер, увидев такое, посмеется и вернется к Age of Empires 2".

Позволю себе не согласиться с этим утверждением. Вспомним хотя бы Total Annihilation. Трехмерные юниты и не менее трехмерная, хотя и заранее просчитанная, земля. Камера строго фиксирована над головами воинов.

Интересное сочетание классического WarCraft'а и изометрии можно наблюдать в игре Lords of the Realm 2 (Властители Земель 2) — изометрическая карта при управлении страной (пошагово) и вид сверху, а ля WarCraft, во время реал-тайм битв.

Также можно использовать вид вроде С&C (к примеру, Red Alert), когда камера находится к юнитам под небольшим (10-30) градусом.

ПГ> О вкусах не спорят. Дело в том, насколько хорошо продуман артворк, а не проекция. С этим нельзя не согласиться. Мне, если честно, Warcraft2 больше по душе, нежели "мелочь" из AOE2.

Как делать графические ресурсы для изометрии?

"Не забывайте, что когда делаете Render — размеры не должны быть 640x480, 320x240, 800x600, они должны всегда находиться в пропорции один к одному (т.е. 400 на 400, 200 на 200 и так далее)."

Это не так. Viewport 3D Studio Max просто-напросто обрежет визуализируемую сцену. Вы же вольны выбирать любое необходимое Вам разрешение сцены.

При создании тайлов (бесшовные кусочки земли, воды и т.д.) сделайте обыкновенную черно-белую маску, которую наложите на viewport.

Для создания текстур Вы можете воспользоваться программой Corel Texture.

 

ПГ> Исправление полезно было услышать, но здесь не учтено то, что любое изменение Bicubic методом размера спрайта в APS приведет к его "расклеиванию по швам". Вот именно, для того чтобы сохранить всю прелесть текстуры, нужно сохранять пропорции. Кроме того, маска не снимает вопросов стыковки текстур.

ЮЗ> К счастью, при визуализации сцены заново мы получим лучший результат из-за отсутствия антиалиасинга, чем при простом изменении размеров. Маска же нужна только для того, чтобы облегчить ручную работу по обрезке тайлов.

 

Чем хорош MS DirectX? (и все прилежащие к нему вопросы)

Риторический вопрос. Тот самый Кармак не пытается лезть в Direct3D, справедливо полагая, что OpenGL для его целей — более удобный инструментарий. Вам же Direct3D может понадобиться в случае написания TA-подобной стратегии. В остальных случаях можно обойтись и DirectDraw.

DirectDraw — как всегда используем для графики.

DirectSound — возможно использование альтернативных вариантов, например библиотек для проигрывания трекерной музыки. Совместное их использование часто бывает невозможным, либо возможным только при использовании звуковых карт с аппаратным микшированием звука (карты типа Yamaha 724, Aureal Vortex 8810).

DirectInput — в стратегиях наибольшее использование получила мышь, отдельные же нажатия на клавиши можно обрабатывать и стандартными средствами Windows.

DirectPlay по вкусу, все перемешать.

ПГ> Хорошо прошелся по костям Кармака. Я стою на близкой позиции, но не стоит думать, что OpenGl незаменимый. Юрий не даст соврать, что после серьезного занятия DirectX на OpenGl уже смотреть не хочется. Direct3D IM стоит заниматься!

ЮЗ> Опять же сошлюсь на Кармака. Он говорил о том, что на одну его OGL-ную строчку на D3D их пишется три. Да и я, взвесив все За и Против, начал изучение с OpenGl.

 

Как быть с сетевой игрой?

"Стратегия без возможности сетевой игры — это не стратегия, а какая-то Role Playing Game".

Какая прелесть! Можно я эту фразу буду использовать в нужных ситуациях? Копирайты сохраню, обещаю. "3D-шутер без возможности сетевой игры — это не шутер, а какой-то Puzzle".

"...а англоязычные люди по сути своей не самый умный народ, потому что их язык примитивен".

Я тоже люблю эту страну. Павел, я с тобой!

ПГ> Шутник. Интересно, что мы будем делать с тобой в этой стране с нашими играми?

Ничего смешного нет в тех словах, т.к. на моей памяти встречались стратегии, где отсутствовал сетевой вариант. Ты думаешь, мне было не смешно?

ЮЗ> Действительно, сложившаяся тенденция заставляет программистов писать shareware только на английском языке и ориентированное только на Запад.

Что такое "Система идентификации"?

"Этот слой называется традиционно BG-layer. [...] Следующий слой отвечает за ресурсы."

На самом деле в большинстве случаев эти два слоя можно объединить.

Способ 1. Для ресурсов отводится некоторое количество идентификаторов. Деревья жестко прикреплены к фону (под ними только песок, они не могут расти в воде).

Способ 2. Background представляет собой голую степь и воду. Шахты и деревья — такие же объекты, как юниты и здания. Их свойства соответствующие.

 

ПГ> Объединять можно много чего. Шахте, к примеру, не обязательно иметь параметр скорость, т.к. она не куда не торопиться. Хотя, если переводить разговор на тему системы идентификации, то резон в объединении есть.

 

Надеюсь, я хоть немного объяснил некоторые неточности, встречающиеся в статье.

ПГ> Кое-что объяснил. Я серьезно...

ЮЗ> Надеюсь, что это правда. Жду комментариев на e-mail.

Юрий Заяц AKA Reggie

№ 7

Яндекс.Метрика