Программирование игр для Windows. Советы профессионала


Автономные функции


В компьютерной игре каждую секунду происходят сотни (если не тысячи) самых разнообразных вещей и программа должна следить за множеством различных переменных и состояний. Однако большинство действий, которые происходят во время игры, не нуждаются в жестком контроле со стороны основной программы, поэтому было бы неплохо сделать некоторые функции «самодостаочными» с точки зрения инициализации, синхронизации и тому подобных действий.  Я назвал такие функции автономными. Я придумал для них такое название с тем, чтобы подчеркнуть присущую им способность совершать операции, не требуя внимания со стороны программы. Программа в течение цикла игры  должна только вызывать эти функции в нужный момент, а все остальное они выполнят сами.


Допустим, например, что мы хотим сделать функцию, которая медленно изменяет содержимое регистра определенного цвета. Этот регистр может использоваться для изображения различных мелких деталей на экране. При выполнении функции изменяется цвет регистра, и таким образом изменяется один из цветов экрана. Результат работы этой функции отражается только на изображении. Функция, решающая подобную задачу идеально приспособлена для автономной работы. В Листинге 12.3 приведен текст программы, реализующей такую функцию.

Листинг 12.3. Автономное управление светом.

void Strobe_Lights (void)

{

static clock=0,     // Функция имеет собственные часы, поэтому она

// может инициализироваться при первом вызове

first_time=1

//Проверка на первый вызов

if (first_time)

{

first_time=0; // Сброс флага первого вызова

// Инициализация

} // конец оператора if

else // не первый вызов

{

// пора ли выполнять действия?

if (++clock==100)

change color register

//сброс времени

clock=0

} // конец if

} // конец else

} // конец Strobe_Lights

Примечательно то, что функция Store_Lights() самодостаточна. Вызывающая ее функция не должна передавать ей никаких конкретных параметров для того, чтобы она могла инициализироваться и нормально работать. Более того, у этой функции есть свои локальные статические переменные, которые сохраняют свои значения даже после того как функция отработает.


Начало  Назад  Вперед



Книжный магазин