Проблема с вращающимся объектом - PullRequest
1 голос
/ 12 апреля 2011

У меня была эта проблема некоторое время, и было бы здорово, если кто-то может помочь.:)

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 мыши, как и должна, но вращая объект, его высота и ширина изменяются, поэтому объект не указывает прямо на курсор.

IsЕсть ли способ компенсировать это смещение?Или, может быть, другой подход?Заранее спасибо.

ОБНОВЛЕНИЕ: Хорошо, похоже, я не объяснил проблему правильно, извините, английский не мой родной язык.Мне нужно, чтобы объект следовал за курсором, но передний конец объекта должен находиться в той же позиции, что и курсор, а задний конец объекта должен быть в середине экрана, просто по центральной оси x.Поэтому, когда вы перемещаете мышь, передний конец объекта всегда будет указывать и находиться в положении мыши.Задняя часть должна оставаться в том же положении, но повернута.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Следующее работает для меня (оно в значительной степени идентично вашему)

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;
}

Просто убедитесь, что точка регистрации установлена ​​правильно (см. Изображение)

enter image description here

Я также загрузил SWF

http://megaswf.com/serve/1054550

0 голосов
/ 12 апреля 2011

Вам не нужно перемещать объект, если у вас есть правильная точка регистрации. Вы должны просто повернуть его в соответствии с центром сцены. Используйте это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...