当限制向量myVector.limit(10);
时,可以为Y值赋予“优先级”吗? IE从向量上的X减去,但不触摸Y?
我正在考虑使用以下伪代码
if(myVector.mag()>=10)
{
myVector.x--;
}
这是一个“好”主意还是解决这个问题的更好方法?
编辑:
我正在做的是试图限制汽车上坡时的速度。通过限制X,我希望防止它“跳”上山。
最佳答案
我们无法告诉您这是否是一个好主意,因为它实际上取决于您要尝试执行的操作。
我要说的是,您的方法无法处理将PVector
限制为小于y
值的情况。
但是可以肯定的是,没有什么可以阻止您分别处理x
和y
值。您可以考虑使用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/