Проблема с вращающимся объектом

#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-файл

http://megaswf.com/serve/1054550

Ответ №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