当限制向量myVector.limit(10);时,可以为Y值赋予“优先级”吗? IE从向量上的X减去,但不触摸Y?
我正在考虑使用以下伪代码

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


这是一个“好”主意还是解决这个问题的更好方法?

编辑:

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

最佳答案

我们无法告诉您这是否是一个好主意,因为它实际上取决于您要尝试执行的操作。

我要说的是,您的方法无法处理将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值的操作。也许使用除法来找出给定y值的x值将为您提供目标幅度?

但是就像我说的,您的工作真正取决于您的目标是什么。

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

换句话说,要跟踪您的前进方向以及前进的速度。然后,您可以使用cos()sin()来计算X速度和Y速度。然后,您只需要限制整体速度,而不是分别限制Y速度。

关于vector - 优先考虑向量的Y值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39712053/

10-10 09:48