Программирование с нуля - это совсем просто! 157) Программирование 3D-игр: Вывод текста и время
Школа программирования
157) Программирование 3D-игр: Вывод текста и измерение времени
Последний выпуск по 3D-играм, был N 154.
Вывод текста
Функция вывода текста на экран Text применяется достаточно часто, но не столько в интересах игрового дизайна, сколько в целях вывода временных сообщений, интересных в основном разработчику. Дело в том, что данная функция рисует строку в заданной позиции экрана одним из стандартных шрифтов Windows и не умеет делать красивые графические надписи. Вообще универсального средства вывода каких-то оригинальных графических текстов не существует, поэтому реализовывать ее обычно приходится вручную.
Команда Text имеет такие параметры: координаты начала выводимой строки (x и y), сама строка, и два необязательных логических параметра. Они, будучи установленными в True, указывают, что текст в заданных позициях надо выводить не с начала, а центрировать по середине.
Следующий пример
Graphics 800,600,16
while not KeyHit(1)
Text 400,100,"Привет тебе!",True,False
Wend
выводит на экран строку, которая выравнивается по позиции 400 (центр экрана) так, чтобы ее середина соответствовала 400-му пикселу.
Данная функция входит в набор функций, ориентированных на двумерную графику, однако с не меньшим успехом может применяться и в 3D-приложениях.
Измерение времени
Важная функция Millisecs() без параметров выдает текущее время по системному таймеру, выраженное в милллисекундах. С помощью этой функции обычно строятся различные схемы управления частотой показа кадров и анимированных элементов. Основываются они на таком алгоритме.
В некоторую переменную заносится текущее время:
FirstTime = Millisecs()
Реальное значение времени при этом знать не требуется. Далее, по ходу работы программы текущее время сравнивается со значением этой переменной, и если разница больше некоторого порога (в миллисекундах, сотых долях секунды), выполняется новое действие.
Например, мы хотим после старта программы пять секунд показывать одно сообщение, а потом - другое:
Graphics 800,600,16
SetBuffer BackBuffer()
FirstTime = Millisecs()
while not KeyHit(1)
Cls
If (Millisecs()-FirstTime) < 5000 then
Text 400,100,"Привет тебе!",True,False else
Text 400,100,"Время вышло.",True,False end if
Flip
Wend
Схожая схема применяется во многих механизмах формирования анимированных изображений. Вывод конкретного кадра мультипликации всегда требуется синхронизировать с каким-то временным промежутком (если показывать кадры без задержки друг за другом, то они могут просто слиться в слишком быструю анимированную последовательность). Следующий алгоритм показывает, как можно задавать требуемое число кадров в секунду (точнее, нужную задержку между кадрами в миллисекундах):
Graphics 800,600,16
SetBuffer BackBuffer()
FirstTime = Millisecs()
N = 0
while not KeyHit(1)
Cls
if MilliSecs() > FirstTime + 250 then
FirstTime = Millisecs()
N = N + 1 if N >= 12 then N = 0
end if
; рисуем N-й кадр
; ...
Text 400,100,N
Flip
Wend
Здесь переменная N хранит номер условного кадра, который в текущий момент времени должен выводиться на экран.
Величина 250 - число миллисекунд (четверть секунды), через которые должны сменяться кадры. Как только этот порог превышен, переменная FirstTime вновь получает значение текущего таймера, а значение номера кадра увеличивается на 1 и при необходимости корректируется (в примере принято, что число кадров изменяется в диапазоне от 0 до 11). Два оператора модификации значения N можно записать и так:
N = (N + 1) Mod 12
где Mod - операция Бейсика по вычислению остатка от деления.
Задание.
Модифицируйте данную программу так, чтобы она показывала кадры не через заданные промежутки времени, а максимально возможное число раз (без заданной продолжительности пауз). Дополните ее функцией подсчета и показа текущего числа кадров в секунду (так называемый популярный показатель FPS, frames per sec, характеризующий производительность компьютера и графической платы).
Общий алгоритм расчета FPS такой:
- измеряем периоды времени длинной в секунду (1000 мс);
- за каждый период подсчитываем число выполненных операций Flip (фактически - число
показанных кадров);
- этот счетчик по достижении каждого периода 1000 мс записываем в другую переменную, которую постоянно показываем с помощью Text, а сам счетчик в этот момент обнуляем.
(c) 2004-2007 Сергей Бобровский : bo собака russianenterprisesolutions.com
Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.