#javascript #vector #p5.js
Вопрос:
У меня есть объект под названием Boid, который имеет положение и вектор скорости (направление движения). При обновлении позиции я хочу применить фактор, который пользователь может контролировать. Однако следующий сценарий не работает:
let speedFactor = 0.1; //ranges from 0 to 2 class Boid { constructor(x, y) { this.position = createVector(x, y); this.velocity = p5.Vector.random2D(); } update() { this.position.add(this.velocity * speedFactor); // doesn't work } }
Я также пытался использовать такие вещи , как speedFactor = createVector(0.1, 0.1)
или = [0.1, 0.1]
, но это не работает.
Если я использую this.velocity.mult(speedFactor)
, это повлияет на вектор скорости, чего я не хочу (например , потому что, если speedFactor == 0
, this.velocity
все испортится). Я попытался создать копию вектора скорости , чтобы преодолеть это с помощью Object.assign({}, this.velocity)
или JSON.parse(JSON.stringify(this.velocity))
, но почему-то это тоже не работает.
Большую часть времени я получаю ошибку p5.Vector.prototype.mult: x, y, or z arguments are either undefined or not a finite number
.
Что было бы лучше всего сделать здесь?
Ответ №1:
Скопируйте вектор, затем умножьте его обычным mult
методом
let speedFactor = 0.1; //ranges from 0 to 2 class Boid { constructor(x, y) { this.position = createVector(x, y); this.velocity = p5.Vector.random2D(); } update() { this.position.add(this.velocity.copy().mult(speedFactor)); } }