Как заставить объект частиц следовать движению мыши - PullRequest
0 голосов
/ 22 октября 2019

Я хочу, чтобы объект частицы просто следовал положению mouseX и mouseY при движении. Могу ли я как-нибудь заменить значения "origin" на mouseX и Y?

  void run() {
    update();
    display();
  }

  // Method to update position
  void update() {
    velocity.add(acceleration);
    location.add(velocity);
    lifespan -= 2.0;
  }

    // Method to display
  void display() {
    stroke(0, lifespan);
    strokeWeight(2);
    fill(127, lifespan);
    ellipse(location.x, location.y, 12, 12);
  }

  // Is the particle still useful?
  boolean isDead() {
    if (lifespan < 0.0) {
      return true;
    } else {
      return false;
    }
  }
 }

Ответы [ 3 ]

1 голос
/ 23 октября 2019

Этот пример еще проще и понятнее - надеюсь, он поможет.

float x;
float y;
float easing = 0.05;

void setup() {
  size(640, 360); 
  noStroke();  
}

void draw() { 
  background(51);

  float targetX = mouseX;
  float dx = targetX - x;
  x += dx * easing;

  float targetY = mouseY;
  float dy = targetY - y;
  y += dy * easing;

  ellipse(x, y, 66, 66);
}
1 голос
/ 22 октября 2019

Взгляните на этот пример:

PVector pos;
PVector vel;
PVector acc;

void setup()
{
  size(400, 400);
  pos = new PVector(width / 2, height / 2);
  vel = new PVector(0, 0);
  acc = new PVector(0, 0);
}

void draw()
{
  background(255);
  followMouse();
  update();
  ellipse(pos.x, pos.y, 10, 10);
}

void followMouse()
{
  PVector mouse = new PVector(mouseX, mouseY);
  //calculating what acceleration would be needed to instantly reach the mouse
  acc = mouse.sub(pos);
  //reducing the acceleration to not reach the mouse instantly
  acc.mult(0.1);
}

void update()
{
  vel.add(acc);
  //dampening the velocity, so the ball gets slower when close to the mouse
  vel.mult(0.8);
  pos.add(vel);
}
0 голосов
/ 29 октября 2019

Функция обработки lerp() подходит для этого (поскольку вы ищете частицу в направлении lerp к курсору мыши).

posX = lerp(posX, mouseX, 0.5);
posY = lerp(posY, mouseY, 0.5);

Последний параметр (здесь 0,5)) - это величина для интерполяции между двумя значениями, где 0,1 очень близко к текущей позиции частицы;0.5 находится посередине между положением частицы и положением курсора и т. Д.


Lerp - сокращение от линейной интерполяции. Вы можете найти другие формы интерполяции (или ослабления), которые более подходят для моделирования движения вашей частицы, например, из коллекции ускорения ручки:

Source: https://www.kasperkamperman.com/blog/penner-easing-functions-processing/

...