Ответ 1
В основном вам нужно найти вектор между точкой в центре вашего поля и точкой курсора мыши, а затем вычислить угол и преобразовать его в градусы. Затем просто примените угол через CSS:
var box=$(".box");
var boxCenter=[box.offset().left+box.width()/2, box.offset().top+box.height()/2];
var angle = Math.atan2(e.pageX - boxCenter[0], - (e.pageY - boxCenter[1]) )*(180/Math.PI);
box.css({ "-webkit-transform": 'rotate(' + angle + 'deg)'});
box.css({ '-moz-transform': 'rotate(' + angle + 'deg)'});
Что
Хорошо, давайте разделим это. Это то, что у нас есть:
Вектор AB проходит между центром поля и положением мыши. Мы пошли на расчет Θ (тета), который является углом между осью X и AB. Поскольку AB создает треугольник с осями X и Y, мы можем использовать функцию Arctan для его вычисления. Точнее, мы используем удобную функцию Arctan2, которая дает положительный угол при y > 0 и отрицательный угол, когда y < 0.
atan2 возвращает градусы в радианах, а CSS работает со степенями, поэтому мы конвертируем между ними с помощью 180/Math.PI
. (Радиан - это мера угла, который при наведении центрального угла круга перехватывает дугу, длина которой равна длине радиуса круга. - Взято из здесь)
Последнее предостережение. Поскольку в браузере ось Y инвертирована (что означает, что чем дальше вы идете по странице, тем выше значение Y), нам пришлось перевернуть ось Y: мы сделали это, добавив знак минус на члене Y:
- (e.pageY - boxCenter[1])
Надеюсь, это поможет прояснить некоторые вещи...
Здесь изолированный пример jsfiddle
Кстати, твоя игра сложная!:)