Помощь - Поиск - Пользователи - Календарь
Полная версия: Преследование мыши
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
ShpateL
Собственно сабж. Если кто-то играл в Фрилансер, то вспомнят, что космический корабль управлялся мышью: мышь повернете влево, корабль полетит влево и наоборот. Сейчас пишу подобную 2д игру, проблема именно в сабже. Вот алгоритм на псевдокоде:

Код

Получить координаты мыши и записать в mouse_x, mouse_y;
Посчитать угол между "носом" самолета и курсором мыши через арксинус по формуле:
sin(mouse_А):=(mouse_x-plane_x)/sqrt(sqr(mouse_x-plane_x)+sqr(mouse_y-plane_y));
mouse_A=arcsin(вон той всей штуки);
ЕСЛИ курсор мыши находится в I-IV четвертях (синус положительный), ТО угол таким и остаётся,
ИНАЧЕ mouse_A=-mouse_A+PI (синус отрицательный);

//Теперь у нас есть угол между носом самолета и курсором
//Осталось угол самолета увеличить или уменьшить до угла mouse_A

ЕСЛИ mouse_А<plane_A, ТО plane_A=plane_A-0.01 ИНАЧЕ  plane_A=plane_A+0.01;

Возникает такой глюк: корабль нехочет поворачиваться на 270*. Как только я хочу, чтобы он повернулся с 269 на 271 он вместо 2* делает полный оборот (358*). lol.gif
В общем спасите меня от разрыва мозгов, можно ли избавиться от глюка в этом алгоритме или есть алгоритм получше? Заранее спасибо yes2.gif
ShpateL
Все, тему можно удалять. Лег спать в пол-четвертого, но разобрался...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.