#flash #actionscript-3
#вспышка #actionscript-3
Вопрос:
У меня была эта проблема некоторое время, и было бы здорово, если бы кто-нибудь мог помочь. 🙂
http://img31.imageshack.us/i/problemsc.jpg (иллюстрация проблемы)
Итак, у меня есть этот объект с точкой регистрации в середине внизу. Я хочу, чтобы этот объект следовал за мышью, но оставался в центре экрана при вращении. Вот что я использовал :
dx = mouseX - this.x ;
dy = mouseY - this.y ;
radians = Math.atan2(dy, dx);
angle= radians * 180/Math.PI;
this.rotation = angle 90;
this.y = mouseY this.height;
Проблема с этим кодом заключается в том, что при перемещении мыши от центра, например, угол не равен 90 градусам, возникает смещение между курсором мыши и объектом. Отслеживая, я обнаружил, что он следует за положением мыши y, как и должно быть, но при вращении объекта его высота и ширина меняются, поэтому объект не направлен прямо на курсор.
Есть ли способ компенсировать это смещение? Или, может быть, другой подход? Заранее спасибо.
ОБНОВЛЕНИЕ: Хорошо, кажется, я неправильно объяснил проблему, извините, английский не является моим родным языком. Мне нужно, чтобы объект следовал за курсором, но передняя часть объекта должна находиться в том же положении, что и курсор, а задняя часть объекта — в середине экрана, как раз по центральной оси x. Таким образом, при перемещении мыши передняя часть объекта всегда будет указывать на положение мыши и находиться в нем. Серверная часть должна оставаться в том же положении, но повернутой.
Ответ №1:
У меня работает следующее (оно практически идентично вашему)
import flash.events.MouseEvent;
const RAD_TO_DEG:Number = 180/Math.PI;
const OFFSET:Number = 90;
var angle:Number;
var radians:Number;
stage.addEventListener(MouseEvent.MOUSE_MOVE, moveIt, false, 0, true);
function moveIt(e:MouseEvent):void {
radians = Math.atan2(mouseY - mc.y, mouseX - mc.x);
angle = radians * RAD_TO_DEG;
mc.rotation = angle OFFSET;
}
Просто убедитесь, что у вас правильно установлена точка регистрации (см. Изображение)
Я также загрузил SWF-файл
Ответ №2:
Вам не нужно перемещать объект, если у вас есть правильная точка регистрации. Вы должны просто повернуть его в соответствии с центром сцены. Используйте это:
this.rotation = (Math.atan2(stage.mouseY - stage.stageHeight/2, stage.mouseX - stage.stageWidth/2) / Math.PI) * 180
Вы можете загрузить образец fla отсюда:
http://rapidshare.com/files/457051556/rotation_mouse.fla
Комментарии:
1. Привет, спасибо за предложение, я проверил ваш пример, но это не то, что я ищу. Мне нужно, чтобы объект всегда начинался с курсора мыши и заканчивался в середине экрана, именно так мне нужно перемещать объект….
2. вы можете переместить объект, но для поворота объекта на основе центра сцены и к его точке регистрации вам нужно использовать эту формулу. проверьте этот fla: [ссылка] rapidshare.com/files/457056048/rotation_mouse2.fla