Занятие 8
Это надо знать
Возвратно-поступательное движениеИзменение размера глаз
Как сделать, чтобы комар в нашем мультфильме открывал и закрывал глаза?
Описание функции, которая рисует комара, выглядит следующим образом:
void mosquito (int x, int y, double sizeX, double sizeY, double zoomEye,
int Dwings, int turn, COLORREF color);
Операторы, которые рисуют глаза комара:
txSetFillColor (TX_WHITE);
txCircle (x - 5 * sizeX*turn, y - 10 * sizeY, 5 * sizeX * zoomEye);
txCircle (x + 5 * sizeX*turn, y - 10 * sizeY, 5 * sizeX * zoomEye);
txSetFillColor (TX_BLACK);
txCircle (x - 5 * sizeX*turn, y - 10 * sizeY, 2 * sizeX * zoomEye);
txCircle (x + 5 * sizeX*turn, y - 10 * sizeY, 2 * sizeX * zoomEye);
Рассмотрим 5 * sizeX * zoomEye, если zoomEye = 1, то глаз будет нарисован с заданным радиусом, если zoomEye = 0, то при умножении на 0, мы получим радиус 0, и глаз не будет нарисован.
Команда рисования комара:
mosquito (750 - 11*t, 480 - 6*t, 1, 1, 1, 0, -1, RGB (190, 190, 190));
За перемещение комара отвечает переменная t, которая изменяется от 0 до 100, т.е.
t = 0 1 2 3 4 5 6 7 ...
мы должны получать числа 0 1 0 1 0 1 0 1 ... а это - остатки от деления t на число 2.
Функция остатка от деления t на 2 записывается так: t%2
Команда рисования комара будет выглядеть следующим образом:
mosquito (750 - 11*t, 480 - 6*t, 1, 1, t%2, 0, -1, RGB (190, 190, 190));
Движение крыльев комара
За движение крыльев вверх-вниз отвечает параметр Dwings.
Если параметр равен 0, то крылья не перемещаются: рисуются в указанных координатах с заданными размерами. Если мы хотим крылья перемещать, то необходимо задать расстояние, на которое крылья будут опускаться.
Пусть максимально вверх крылья могут опуститься на 14 точек, тогда нам необходимо получать числа:
0 1 2 3 4 ...14, а это остатки от деления числа на 15: t%15
Если вычесть из этого выражения 5, то движение станет более плавным: t%15 - 5
Команда рисования комара, который машет крыльями, будет выглядеть следующим образом:
mosquito (100 + 5*t, 250, 1, 1, t%2, t%15 - 5, 1, RGB (190, 190, 190));
В функции
void frog (int x, int y, double sizeX, double sizeY, double zoomEye, int leftHand, int rightHand, COLORREF color);
за поднятие и опускание рук отвечают параметры: leftHand, rightHand. Если руки поднимаются на 99 точек, то можно записать t%100, но для того, чтобы левая и правая рука поднимались не одновременно и более плавно, можно записать: t%20 * 5 для правой руки, t%10 * 10 для левой руки. Изменим размер глаз лягушки: t%3.
frog (10 + 10*t, 485 - 3*t, 0.6, 0.6, t%3, t%20 * 5, t%10 * 10, RGB ( 30, 190, 50));
Лягушка прыгает
Прыжок - это возвратно-поступательное движение вверх-вниз, т.е. необходимо изменить координату у. Для плавного изменения координаты воспользуемся функцией sin(t). Для изменения амплитуды прыжка, умножим sin(t) на 10.
frog (10 + 10*t, 485 - 2*t + 10*sin(t), 0.6, 0.6, t%3, t%20 * 5, t%10 * 10, RGB ( 30, 190, 50));
Глаза елок
Для рисования нескольких елок мы используем функцию void forest (int x, int step, int t)
параметр t мы будем предавать при вызове функции:
forest (50, 150, t);
Функция, которая рисует елку:
void tree (int x, int y, double sizeX, double sizeY, int leftEye, int rightEye, COLORREF color);
Вызов функции рисования одной елки запишем так:
tree (x, 50, 1, 1, t%7, t%7, RGB (145, 210, 80)); в этом случае параметры leftEye и rightEye будут изменяться от 0 до 6, что нам даст движение зрачков левого и правого глаз елок.
Посмотреть текст программы
Результат выполнения программы
Лягушка прыгает
Прыжок - это возвратно-поступательное движение вверх-вниз, т.е. необходимо изменить координату у. Для плавного изменения координаты воспользуемся функцией sin(t). Для изменения амплитуды прыжка, умножим sin(t) на 10.
frog (10 + 10*t, 485 - 2*t + 10*sin(t), 0.6, 0.6, t%3, t%20 * 5, t%10 * 10, RGB ( 30, 190, 50));
Глаза елок
Для рисования нескольких елок мы используем функцию void forest (int x, int step, int t)
параметр t мы будем предавать при вызове функции:
forest (50, 150, t);
Функция, которая рисует елку:
void tree (int x, int y, double sizeX, double sizeY, int leftEye, int rightEye, COLORREF color);
Вызов функции рисования одной елки запишем так:
tree (x, 50, 1, 1, t%7, t%7, RGB (145, 210, 80)); в этом случае параметры leftEye и rightEye будут изменяться от 0 до 6, что нам даст движение зрачков левого и правого глаз елок.
Пример
Внесем изменения в наш мультфильм.Посмотреть текст программы
Результат выполнения программы