![]() |
![]() ![]() |
![]() |
ShpateL |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Собственно сабж. Если кто-то играл в Фрилансер, то вспомнят, что космический корабль управлялся мышью: мышь повернете влево, корабль полетит влево и наоборот. Сейчас пишу подобную 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*). ![]() В общем спасите меня от разрыва мозгов, можно ли избавиться от глюка в этом алгоритме или есть алгоритм получше? Заранее спасибо ![]() |
ShpateL |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: ![]() ![]() ![]() |
Все, тему можно удалять. Лег спать в пол-четвертого, но разобрался...
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 23:00 |