10. Движение по траектории

Занятие 10


Это надо знать

Траектория - это линия, вдоль которой движется тело.
Путь - это сумма длин всех участков траектории, последовательно проходимых телом при движении.

Создадим движение шарика в окне:


Схематически движение шарика можно изобразить следующим образом:

dt = t2 – t1 - промежуток времени, за который тело проходит один участок траектории.

Для расчета координаты точки (x, y)  воспользуемся формулами:

x = x + Vxdt
y = y + Vydt

Vx           - скорость по х
Vy           - скорость по y
dt         - промежуток времени

 Шарик должен отражаться от стенок окна и продолжать движение.
Если шарик отражается от вертикальной стены, то  Vx   = - Vx .

Если шарик отражается от горизонтальной стены, то  Vy   = - Vy .



Для организации действий, зависящих от какого-либо условия используется условный   оператор if .

Общий вид оператора if:

if (условие)
    {
    операторы, которые должны выполниться, если условие истинно
    };
else
    {
    операторы, которые должны выполниться, если условие ложно
    }

еlse может отсутствовать, если в нем нет необходимости, т.е.

if (условие)
    {
    операторы, которые должны выполниться, если условие истинно
    }



Создадим функцию движения тела (шарика) в окне.


Примечание:
Обозначение клавиш:

VK_BACK
BACKSPACE key
VK_TAB
TAB key
VK_RETURN
ENTER key
VK_SHIFT
SHIFT key
VK_CONTROL
CTRL key
VK_MENU
ALT key
VK_PAUSE
PAUSE key (пробел)
VK_ESCAPE
ESC key
VK_END
END key
VK_HOME
HOME key
VK_LEFT
LEFT ARROW key
VK_UP
UP ARROW key
VK_RIGHT
RIGHT ARROW key
VK_DOWN
DOWN ARROW key
VK_0
0 key
VK_1
1 key
VK_2
2 key
Аналогично для цифр
VK_A
A key
VK_B
B key
VK_C
C key
Аналогично для букв
Движение при помощи клавиш

Для управления объектом клавишами "ВПРАВО", "ВЛЕВО", "ВНИЗ", "ВВЕРХ", "ПРОБЕЛ" можно использовать команды:

if (GetAsyncKeyState (VK_RIGHT))   vx++;                 // движение вправо
if (GetAsyncKeyState (VK_LEFT))      vx--;                   // движение влево
if (GetAsyncKeyState (VK_DOWN))    vy++;                 // движение вниз
if (GetAsyncKeyState (VK_UP))           vy--;                   // движение вверх
if (GetAsyncKeyState (VK_SPACE))    vx = vy  = 0;      // останавливаем движение, нажимая на пробел


Пример

Движение лягушки в окне.

Посмотреть текст программы

Результат работы программы


Домашнее задание

Создать движение по траектории своего героя в окне.