![]() |
|
||||||||||
|
|||||
|
[+1 02.07.09]
Регистрация: Jun 2009
Сообщений: 39
|
Всех с Новым Годом!
Столкнулся с проблемой при повороте объекта. При нажатии кнопки влево, вверх, вправо или вниз, объект должен повернуться по короткой дуге. Т.е., если нажата клавиша влево, то целевой угол (targetAngle) равен -90 градусов и объект (body), повёрнутый на 80 градусов должен повернуться против часовой стрелки на угол currentAngle. У меня есть метод для поворота объекта: currentAngle - угол, на который будем поворачивать объект. targetAngle - угол, к которому будем стремиться (0, 90, -90, 180). body - тело, которое будем поворачивать. public function rotate(currentAngle:Number, targetAngle:Number, body:DisplayObject):void { var angle:Number = ???????; if (angle < 180) body.rotation += currentAngle; else body.rotation -= currentAngle; //Корректировка if (body.rotation > targetAngle - currentAngle && body.rotation < targetAngle + currentAngle) body.rotation = targetAngle; } |
|
|||||
|
Что-то Вы сами все себе усложнили, плюс описали в примере значения всех переменных кроме той, которая у Вас вызывает вопрос.
Попробуйте пересмотреть проблему. P.S. И кстати, почему переменная, означающая "угол, на который будем поворачивать объект", называется currentAngle? Вы точно не запутались? ![]()
__________________
Дело не в тебе |
|
|||||
|
[+1 02.07.09]
Регистрация: Jun 2009
Сообщений: 39
|
Задам вопрос по-другому:
Как сделать, чтобы в событии ENTER_FRAME объект поворачивался в нужную сторону через меньший угол? Н-р: если объект повёрнут на 100гр. как сделать, чтобы при нажатии кнопки "влево", он начал поворачиваться по часовой стрелке, пока не достигнет угла -90гр., а при нажатии кнопки вверх - против часовой, пока не достигнет угла 0гр. |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 1,195
|
Надо привести оба угла (в градусах) в диапазон значений 0..360, вычесть из второго первый, снова привести результат в диапазон 0..360, и потом если результат меньше или равен 180, то крутить в одну сторону, если больше - в другую.
|
|
|||||
|
[+1 02.07.09]
Регистрация: Jun 2009
Сообщений: 39
|
VVall, big thanks.
Вот рабочий метод, может кому пригодиться ) public function rotate(currentAngle:Number, targetAngle:Number, body:DisplayObject):void { var angle:Number = targetAngle - body.rotation; while (angle < 0) angle += 360; while (angle > 360) angle -= 360; trace (angle); if (angle > 180) body.rotation -= currentAngle; else body.rotation += currentAngle; if (body.rotation > targetAngle - currentAngle && body.rotation < targetAngle + currentAngle) body.rotation = targetAngle; } |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|