当限制向量myVector.limit(10);
时,你可以给出" priority"到Y值? IE从矢量上的X减去但不触及Y?
我在考虑使用以下伪代码
if(myVector.mag()>=10)
{
myVector.x--;
}
这是一个好的"想法还是有更好的方法来解决这个问题?
编辑:
我正在做的是试图限制汽车上坡时的速度。通过限制X我希望防止它只是"跳跃"上山。
答案 0 :(得分:2)
我们无法告诉您这是否是一个好主意,因为这实际上取决于您尝试做什么。
我会说,您的方法无法处理您希望将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速度。