2014-10-31 3 views
0

Я пытаюсь повторить этот эффект: 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, и я не так хорошо разбираюсь в коде других людей и не могу понять логику позади него.

ответ

0

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

Есть также некоторые другие вещи, которые оригинал делает, и вы не:

  • в оригинале, скорость частицы зависит от расстояния до цели
  • , кажется, они не могут изменить направление мгновенно, но изменить направление их движения относительно медленно.
+0

Итак, должен ли я генерировать другой набор невидимых целей, которые вращаются вокруг курсора и устанавливают их как цель для частиц? Я буду решать скорость частиц и изменение направления, как только я заставляю их вращаться вокруг курсора ... –

+0

Да. В настоящее время ваша цель - mouse.x/mouse.y. Но это должно быть что-то вроде mouse.x + Math.cos (time/factor) * radius/mouse.y + Math.sin (time/factor) * радиус. Вы можете получить время с обратного вызова requestAnimationFrame, должен быть первым аргументом. Попробуйте коэффициент = 2 * Math.PI/4000 для вращения каждые 4 секунды. Я также заметил, что вы не используете время вообще, поэтому фактическая скорость зависит от частоты обновления браузера. Вы должны определить разницу во времени между двумя вызовами и принять во внимание скорость частицы на кадр. –

+0

Спасибо за комментарий, @Tim, но можете ли вы объяснить это уравнение немного подробнее? Почему я должен использовать время и фактор? –

Смежные вопросы