DiNGS – программирование игр в домашних условиях. Часть 8.1
АрхивПрограммазм (архив)Продолжение цикла. Счетчики.
Создать игру без счетчиков можно, но… Есть причины, по которым это крайне не желательно! Счетчики применяются, чтобы: игра с одинаковой скоростью шла на Celeron 266 и на P4 3000Mh; анимация разных героев в игре различалась по скорости; перемещение объектов происходило с определенной скоростью; чтобы, к примеру, именно на 20 секунде первого уровня пошел дождь или поднялся ветер в игре.
На самом деле применение счетчиков еще более пространно, но остановимся на этом. При анимации бабочки мы видим - скорость анимации велика. Для замедления ее используются счетчики. Посмотрим использование счетчиков на примере:
//Блок инициализации переменных Speed_anim=10 //скорость анимации. Число подбирается экспериментально. I=0 //счетчик кадров анимации //Загрузка графики LOADSPRITE "babochka.bmp",0 LOADSPRITE "babochka2.bmp",1 LOADSPRITE "babochka3.bmp",2 LOADSPRITE "babochka4.bmp",3 // Начало цикла WHILE TRUE //повторять вечно. На самом деле выход по ESC SPRITE i, 320, 240, 0 //Вывести спрайт i в координаты 320х240. IF Speed_anim=10 //если скорость анимации =10 i=i+1 // показать следующий кадр Speed_anim=0 //сбросить счетчик анимации в 0 ENDIF Speed_anim=Speed_anim+1 //увеличить счетчик анимации IF i=4 THEN i=0 //см. предыдущий пример SHOWSCREEN WEND END
Действительно, мы теперь можем изменять скорость анимации. В нашей программе крутится счетчик Speed_anim. Он циклически изменяется от 0 до 10. Этого мы достигаем конструкцией вида Speed_anim=Speed_anim+1. Когда счетчик достигает значения 10, срабатывает логический оператор IF.
IF Speed_anim=10
если скорость анимации = 10 , тогда увеличиваем номер кадра картинки для отображения следующего спрайта в анимации и обнуляем счетчик Speed_anim, чтобы он опять начал потихоньку приращиваться на 1.
В итоге изменение картинки на экране происходить только когда счетчик Speed_anim достигает значения 10. Если скорость по-прежнему достаточно высока, подставьте в место 10 – 20 или даже 50. Скорость упадет. Но как не сложно заметить простое изменение одного значения заставляет нас лазить по всему тексту выискивая места кода, подлежащие изменению. Все происходить лишь из-за не совсем продуманного кода. Подсказка: значения, которые фигурируют во многих местах кода и которые могут потребовать изменение значения желательно выделять в отдельные переменные (константы).
Пример 1. Вывести в середину экрана спрайт (разрешение экрана 800х600):
SPRITE 1,400,300,0
Такой стиль написания кода не сулит ничего хорошего и требует от вас вычислений. Этого можно избежать, введя в начале программы 2 переменные содержащие максимальное значение экрана:
Max_X = 800 Max_Y = 600
Теперь запись верхнего примера будет выглядеть следующим образом:
SPRITE 1, Max_Х/2, Max_Y/2,0
Продолжение читайте завтра…