优先考虑向量的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
值的情况。
但是可以肯定的是,没有什么能阻止您分别处理 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
值的操作。也许使用除法来计算给定 x
值的 y
值会给你什么目标幅度?
但是就像我说的,你做什么真的取决于你的目标是什么。
编辑:您还可以考虑更改存储运动的方式。不是存储 X 速度和 Y 速度,而是存储角度和速度。
换句话说,跟踪你前进的方向,以及你前进的速度。然后你可以用cos()
和sin()
算出X速度和Y速度。那么你只需要限制整体速度,而不是单独限制Y速度。
当限制矢量时myVector.limit(10);
你能给Y值"priority"吗? IE 从矢量上的 X 中减去但不触及 Y?
我正在考虑使用以下伪代码
if(myVector.mag()>=10)
{
myVector.x--;
}
这是一个 "good" 想法还是有更好的方法来解决这个问题?
编辑:
我正在做的是试图限制汽车上坡时的速度。通过限制 X,我希望防止它 "jumping" 上山。
我们无法告诉您这是否是个好主意,因为这实际上取决于您要做什么。
我会说你的方法无法处理你想将 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
值的操作。也许使用除法来计算给定 x
值的 y
值会给你什么目标幅度?
但是就像我说的,你做什么真的取决于你的目标是什么。
编辑:您还可以考虑更改存储运动的方式。不是存储 X 速度和 Y 速度,而是存储角度和速度。
换句话说,跟踪你前进的方向,以及你前进的速度。然后你可以用cos()
和sin()
算出X速度和Y速度。那么你只需要限制整体速度,而不是单独限制Y速度。