Ну,
я рискну порассуждать о том, как делаются игры action от первого лица. Впрочем,
вид сбоку или сверху на героя (в Duke3D или Blood) - это все одна суть. Просто
передвигаемся в этом случае уже смотря на героя со стороны, а не из его "глаз". Сама плоскость, на которую проецируются объекты сцены - это и есть экран монитора. Естественно, он играет роль глаза. Ну, а так как даже при небольшом разрешении (320х240 пикселов) точек получается много, а следовательно, прорисовка (и обсчет) займет больше времени, то во-первых, оставляли именно такое разрешение для первых игр, чтобы очеспечить более-меннее приемлимое число кадров в секунду, а во вторых, этот размер можно не только менять, но и счтать каждую точку как четыре - получается 160х120точек - размер экрана остается тот же, а точка занимает 4 пиксела. Но в принципе, и 320х240 прекрасно тянуло и на 486 машинах. Итак, игра началась. Что в петле делается: каждый объект имеет какие-то свойства, которые могут меняться от разных обстоятельств. К примеру, первым объектом на очереди будет герой, перед ним стоит монстр, вы нажали кнопку - стреляем. Клавиатурный обработчик, ясное дело, "сидит" на прерывании, забрасывает в стек нажатие клавиш (и отпускание тоже) - они поднимают разные глобальные или локальные "флажки". Кроме изменения состояния объекта "герой" (нужно же ведь гранатометом дернуть - там на много кадров анимации) необходимо создать объект "ракета" и поставить его в общий цикл на обработку. Сделали. Проверяется стек клавиш - допустим, при этом была нажата еще и клавиша "вбок" - меняем позицию героя относительно текущей. Не забыть отнять у объекта "герой" единичку из переменной "количество ракет"... и т.п. С остальными объектами - то же самое. Только монстрами управляет
компьютер - там некоторый AI заставляет их совершать те или иные действия. После
того, как у ракеты на следующем цикле прибавятся координаты (она же летит) происходит
обязательная проверка на совпадение координат с другими объектами. Причем проверка
нетривиальная - иначе комп только на то время и тратил бы, что сравнивал координаты
всех объектов друг с другом. Допустим, ракета попала в монстра - т.к. известно,
сколько ракета должна отнять жизни у монстра и сколько у данного типа монстра
ее на данный момент есть, происходит удаление объекта "ракета", изменение
свойств монстра, создание объекта "взрыв" и еще кучка разных мелочей.
Если жизни у монстра было на один несильный чих, то в свойства монстру заносится
- "умирающий" - на следующем цикле петли будет развиваться в течении
нескольких кадров сценарий "умирающий монстр". После чего объект "монстр_такой-то"
примет свойство "труп" - но не уничтожится как объект - как вы помните,
во 2-м Doome Archvile мог восстанавливать монстров - просто свойство "труп"
убиралось у объекта вместе с кое-какими добавками. Все, один цикл всех подвигали, поизменяли свойства объектов и
пр. - подошли к прорисовке (цикл обработки еще не закончился). На экране надо
показать сцену. В первом и втором Doom'ах как вы помните, существуют плоскости,
которые имеют различные свойства - прозрачность, текстуру и т.д. Обсчет текстур
является достаточно ресурсоемкой задачей - это ведь картинки, их надо рисовать
в разных проекциях. В Doom все движущиеся объекты сделаны спрайтами - на несколько
позиций - 8 штук (вид с разных боков). К тому же, объект может стрелять (еще
8 штук), двигать конечностями (еще...) и т.д. Объемы уходят большие. Зато -
быстро. Ничего считать не надо - только рисуй и все. С другой стороны - детализация
и реалистичность - не та, которую хотелось бы. Как вы помните, на лежащее оружие
в Doom можно было смотреть только с одной его стороны - потому что спрайт был
всего один. (в Blood сделали побольше - там с этим порядок). Что с сетевой игрой: особых сложностей нет. Скажем, две машины соединены по Ethernet'у друг с другом. Уровень (лабиринт) должен быть у каждого, естественно, один и тот же (быть в памяти и обрабатываться петлей). Просто для каждого игрока его оппонент будет таким же объектом, как скажем, монстр. А координаты его (ну, и не только координаты) будут приходить по сетке. Вот и все. Выстрелил оппонент - объект "ракета" создается на обеих машинах, собственно, как и все остальные - уровень должен же быть одинаков во всех деталях для обоих игроков. пожалуй, на сегодня хватит.... Кучу замечаний и добавлений сюда. |
Вот реклама должна быть, хотя бы интересная, что ли... Я уже делал большую статью
в "Pro-писи", где рассуждал о заправках картриджей и о самих картриджах,
ну... если кто не читал, я сделал небольшую врезку о Magicap. Между прочим, для
некоторых это явилось таким откровением, что до сих пор не нарадуются :)
|
|
Вышла новая версия русифицирующего блока (lng) для Winamp - работает
с версиями 2.20 и выше - переведен раздел TIPS, размер 14кб вместо 140кб, приятный
сюрприз при нажатии кнопки "Регистрация". А на странице http://www.chat.ru/~f13/amp
теперь всегда будет последняя версия. прислал Fedor S. Pushkin |
линк прислал Fedor S. Pushkin |
Целая система спутников Iridium (спутниковые телефоны, сотовая связь, пейджеры). Их 66 штук на орбитах вертится (высоты от 500 до 700км). Но самое интересное, что эти спутники своими частями (конкретно - антенной) могут отражать солнечный свет. Получаются вспышки в небе. Особенно хорошо видно, естественно, ночью. Причем яркость этаких солнечных зайчиков (почему этаких... это и есть солнечные зайчики) ярче видимой светимости Венеры в 30 раз(!). Отбрасывание таких бликов объясняется особым покрытием антенн (всего их - 3, каждая около 188см длиной и 86см шириной). Это 4см толщины алюминиевые пластины, покрытые серебром. На страничке, где рассказывается подробно про сам эффект и вообще, про внешнее устройство спутников, с каких космодромов они были запущены, положение на орбитах и пр., есть программка, которая берется предсказать, когда и где сверкнет очередной спутник. линк прислал Alexander Petroff |
|
[ Архив+поиск ]-[ все комментарии ]-[ Жизнь ТАМ ] |
|