У меня есть спрайт-анимация, небольшая пушка, визуализированная с помощью 3D-приложения. У меня ровно 360 кадров для поворота на 360 градусов. Каждое изображение имеет размер 100x100 пикселей.
Итак, в основном я пытаюсь сделать следующее: когда я нажимаю в любом месте страницы, ствол пушки должен вращаться, чтобы указывать на курсор мыши, возможно, это звучит просто, но я не могу заставить его работать очень хорошо, возможно, из-за недостатка моих математических навыков: P
То, что у меня сейчас есть, выглядит примерно так
/* This is my div with the cannon background image (360 images stitched into one) each "image area" is 100x100px */
obj.cannon = $('#cannon');
/* Get the X/Y of the cannon loc in the dom */
var cannonX = $(obj.cannon).offset().left;
var cannonY = $(obj.cannon).offset().top;
/* Get radians using atan2 */
var radians = Math.atan2(e.pageY-cannonY, e.pageX-cannonX);
/* Convert to degrees */
var degrees = radians * (180/Math.PI);
И вот где я нахожусь, я имею в виду, поскольку ширина изображения составляет 100 пикселей, и мне нужно переместить положение фона на 100 пикселей, чтобы сместить пушку на один градус вправо, потому что 360 изображений * 100 пикселей = 36000 пикселей в целом. Таким образом, сшитый спрайт имеет ширину 36000 пикселей.
Итак
Вставьте здесь странные вычисления, основанные на текущем backgroundPosition изображения-спрайта, и примените новое backgroundPosition в зависимости от того, где вы щелкнули курсором мыши, затем используйте своего рода setTimeout (animateIt, speed); "анимировать" фоновую позицию на новую позицию.
function animateIt(){
if(newpos!=targetpos) { //Use < > here if we need to add or remove
newpos+=100; //Until we arrive at the new backgroundPosition
$(obj.cannon).css({backgroundPosition: newpos+'px' });
setTimeout(animateIt, speed);
}
}
Я здесь на правильном пути, правильно ли я думаю об этом? Я чувствую себя глупо, это должно быть просто, но сейчас у меня выпадение мозга, я думаю = P. Моя проблема в том, что я не знаю, как правильно получить «новую целевую фоновую позицию», а затем анимировать ее ++ или - на основе текущей фоновой позиции: /