优先考虑向量的Y值

Give priority to the Y value of a vector

当限制矢量时myVector.limit(10);你能给Y值"priority"吗? IE 从矢量上的 X 中减去但不触及 Y? 我正在考虑使用以下伪代码

if(myVector.mag()>=10)
{
myVector.x--;
}

这是一个 "good" 想法还是有更好的方法来解决这个问题?

编辑:

我正在做的是试图限制汽车上坡时的速度。通过限制 X,我希望防止它 "jumping" 上山。

我们无法告诉您这是否是个好主意,因为这实际上取决于您要做什么。

我会说你的方法无法处理你想将 PVector 限制为小于 y 值的情况。

但是可以肯定的是,没有什么能阻止您分别处理 xy 值。您可以考虑使用 map()constrain() 函数。

//limits your `y` value to be between 0 and 10
myVector.y = constrain(myVector.y, 0, 10);

另一个提示是查看 PVector#limit() 函数后面的 the source code,这很简单:

 public PVector limit(float max) {
    if (magSq() > max*max) {
      normalize();
      mult(max);
    }
    return this;
  }

这一切所做的就是使 PVector 的大小等于您传递给 limit() 函数的任何值。您可以执行类似于 y 值的操作。也许使用除法来计算给定 x 值的 y 值会给你什么目标幅度?

但是就像我说的,你做什么真的取决于你的目标是什么。

编辑:您还可以考虑更改存储运动的方式。不是存储 X 速度和 Y 速度,而是存储角度和速度。

换句话说,跟踪你前进的方向,以及你前进的速度。然后你可以用cos()sin()算出X速度和Y速度。那么你只需要限制整体速度,而不是单独限制Y速度。