Я пытаюсь повторить этот эффект: http://hakim.se/experiments/html5/trail/03/Поворот холста объекта вокруг курсора мыши
У меня есть это как конструктор частиц:
function Particle(x, y) {
this.x = x;
this.y = y;
this.radius = 4;
this.color = '#f0f';
this.speed = 15;
this.angle = 0;
}
И я использую этот цикл, чтобы оживить все частицы экземпляры:
for (var i = 0, len = particles.length; i < len; i++) {
var dx = mouse.x - particles[i].x,
dy = mouse.y - particles[i].y,
angle = Math.atan2(dy, dx);
particles[i].vx = Math.cos(angle) * particles[i].speed;
particles[i].vy = Math.sin(angle) * particles[i].speed;
particles[i].x += particles[i].vx;
particles[i].y += particles[i].vy;
particles[i].draw(ctx);
}
частицы следуют за мышью, но достичь курсора и начать мерцающие вокруг него, которая не является желаемым поведение. Я хотел бы окружить курсор, как в примере. Интересная часть состоит в том, что если я установил значение particle.speed на что-то вроде 30 и добавлю 1000 к углу, частицы вращаются вокруг курсора, но действительно быстрые и быстрые испортит эффект ...
Вы можете увидеть живой пример здесь: http://codepen.io/gbnikolov/pen/EwafI
Все предложения являются более прием, заранее спасибо!
P.S. Я знаю, что код для заостренного примера легко найти, но я относительно новичок в javascript, и я не так хорошо разбираюсь в коде других людей и не могу понять логику позади него.
Итак, должен ли я генерировать другой набор невидимых целей, которые вращаются вокруг курсора и устанавливают их как цель для частиц? Я буду решать скорость частиц и изменение направления, как только я заставляю их вращаться вокруг курсора ... –
Да. В настоящее время ваша цель - mouse.x/mouse.y. Но это должно быть что-то вроде mouse.x + Math.cos (time/factor) * radius/mouse.y + Math.sin (time/factor) * радиус. Вы можете получить время с обратного вызова requestAnimationFrame, должен быть первым аргументом. Попробуйте коэффициент = 2 * Math.PI/4000 для вращения каждые 4 секунды. Я также заметил, что вы не используете время вообще, поэтому фактическая скорость зависит от частоты обновления браузера. Вы должны определить разницу во времени между двумя вызовами и принять во внимание скорость частицы на кадр. –
Спасибо за комментарий, @Tim, но можете ли вы объяснить это уравнение немного подробнее? Почему я должен использовать время и фактор? –