|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Поворот объекта по направлению его движения, как?
Есть стрелообразный объект mouse.
Он играет роль мышки, т.е. mouse.startDrag(true), а мышку мы скрываем, т.е. Mouse.hide(). Вопрос в том, как повернуть mouse в ту сторону, в которую он движется? Т.е. скажем если я двигаю мышкой вниз, следовательно и hero движется в низ, hero должен повернуться на 90 градусов, т.е. смотреть вниз. Если я двигаю вверх, то соответственно hero смотрит вверх. Причем движение может происходить по любому направлению, следовательно ограничеваться по 4 направлениям нельзя. У меня появилась такая идея. Mouse.hide(); mouse.startDrag(true); var mouseOldX:Number = 0; var mouseOldY:Number = 0; stage.addEventListener(Event.ENTER_FRAME, rotating); function rotating(e:Event):void { var diffX:Number = mouseX - mouseOldX; var diffY:Number = mouseY - mouseOldY; var rAngle:Number = Math.atan2(diffY, diffX); mouse.rotation = rAngle * 180 / Math.PI; mouseOldX = mouse.x; mouseOldY = mouse.y; } Помогите пожалуйста. |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
двигай не по энтерфрэйму а по MouseEvent.MOUSE_MOVE
__________________
Отряд Котовскага |
|
|||||
Спасибо.
Все стало почти ОК, кроме того, что стрелка врала на 90 градусов (я просто их добавил). Теперь она поворачивается в нужную сторону, но все раво иногда дергается. Залил результат - http://dump.ru/file/3497107 Добавлено через 34 минуты Немножко поменял, определение переменных, добавил новые, и объявил ограничение по установке нового ракурса. Получилось: Mouse.hide(); mouse.startDrag(true); var mouseOldX:Number = 0; var mouseOldY:Number = 0; var diffX:Number; var diffY:Number; var restriction:Number = 1.2; stage.addEventListener(MouseEvent.MOUSE_MOVE, rotating); function rotating(e:MouseEvent):void { var resultX = mouseX - mouseOldX; var resultY = mouseY - mouseOldY; if(resultX > restriction || resultX < -restriction) diffX = resultX; if(resultY > restriction || resultY < -restriction) diffY = resultY; var rAngle:Number = Math.atan2(diffY, diffX); mouse.rotation = rAngle * 180 / Math.PI + 90; mouseOldX = mouse.x; mouseOldY = mouse.y; } Кто може подсказать ошибки, подскажите пожалуйста. Добавлено через 40 минут Сам догадался до своей ошибки. Нужно было старые координаты определять при каждом кадре, а они обновлялись в том же эвенте где и происходило все остальное. Ну и увеличил теперь немножко ограничение (restriction). Mouse.hide(); mouse.startDrag(true); var mouseOldX:Number = 0; var mouseOldY:Number = 0; var diffX:Number; var diffY:Number; var restriction:Number = 2; stage.addEventListener(MouseEvent.MOUSE_MOVE, rotating); stage.addEventListener(Event.ENTER_FRAME, oldSetting); function oldSetting(e:Event):void { mouseOldX = mouse.x; mouseOldY = mouse.y; } function rotating(e:MouseEvent):void { var resultX = mouseX - mouseOldX; var resultY = mouseY - mouseOldY; if(resultX > restriction || resultX < -restriction) diffX = resultX; if(resultY > restriction || resultY < -restriction) diffY = resultY; var rAngle:Number = Math.atan2(diffY, diffX); mouse.rotation = rAngle * 180 / Math.PI + 90; } Вот теперь стало действительно идеально, насколько это можно сделать моим способом и с моими знаниями. Может все таки заметите еще что-нибудь
__________________
Рожденный ползать, везде пролезет... |
Часовой пояс GMT +4, время: 14:56. |
|
« Предыдущая тема | Следующая тема » |
Теги |
движение , как , направление , объект , поворот |
Опции темы | |
Опции просмотра | |
|
|