Дайте случайное направление круга после удара другого круга в p5. js - PullRequest
0 голосов
/ 13 апреля 2020

Я создаю симулятор COVID-19, где каждый круг в симуляции - это человек. Когда два человека бьют друг друга, я хочу, чтобы направление, в котором они «отскакивали» друг от друга, было случайным. В настоящее время я просто отражаю текущую скорость, что означает, что люди следуют по заранее определенному пути, даже когда подпрыгивают друг от друга.

Это моя функция "перемещения"

 move() {
        if (this.willMove) {
            this.xPos += this.xSpeed;
            this.yPos += this.ySpeed;
        }
    }

Это где я делаю свое обнаружение столкновений

collision(other) {
        let distance = dist(this.xPos, this.yPos, other.xPos, other.yPos);

        if (distance < this.personRadius + other.personRadius) {
            this.changeDirection();
            return true;
        } else {
            return false;
        }
    }

Вещи, управляющие изменением направления:

changeDirection() {
        this.mirrorXSpeed();
        this.mirrorYSpeed();
    }

    mirrorXSpeed() {
        this.xSpeed = this.xSpeed * -1;
    }

    mirrorYSpeed() {
        this.ySpeed = this.ySpeed * -1;
    }

Я попытался умножить скорость на -0,95, но это только уменьшает скорость.

Полный проект можно найти здесь: https://github.com/perkynades/Simulation-of-COVID19/tree/part1

1 Ответ

0 голосов
/ 14 апреля 2020

Это может помочь, это заставит всех людей подпрыгивать в случайном направлении при вызове.

Вам нужно будет добавить this.speed к вашему личному конструктору и убедиться, что режим угла установлен на радианы.

changeDirection() {
        //This next line will change the speed by a random amount, 
        //delete it if you don't like it,  
        //or change the range for a different behavior
        this.speed += random(1,3) * random([-1,1])


        let ang = random(PI * 2)
        this.changeXSpeed(ang);
        this.changeYSpeed(ang);
    }

    changeXSpeed(ang) {
        this.xSpeed = this.speed * cos(ang);
    }

    changeYSpeed(ang) {
        this.ySpeed = this.speed * sin(ang);
    }
}

Если вы хотите более реалистичный c отскок, я проверил бы видео о курсах Криса по Обнаружение столкновений , которое дает естественное падение при столкновении окружностей, и хотя это не все P5. js, это было очень полезно для меня, и я надеюсь, что это будет для вас тоже.

...