天天看点

[Silverlight动画]转向行为 - 寻找行为

寻找行为只是把机车移动到指定点。就像这样:

首先,通过目标位置和机车位置相减,计算出一个能使机车准确到达目标的期望速度。这个速度向量的含义是“如果想到达目的地,需要以如此方向,移动这般快才行”。

当然,现实不会让你想去哪儿就能一下子过去的。为此,多尝试几次后会找出一个不错的算法。在这里,我们通过单位化期望速度并乘以最大速率来实现。这样做,仍然能得到一个指向目标的向量,其含义则是“不要想着会瞬间移动,以最快速度向正确方向迈进吧。”

有了期望速度,显然还要考虑机车现有的速度。通过两者相减,得到一个向量,其含义是“尽最大可能以最大速率面向正确方位。”

这个向量还会叠加给转向力。记得update函数中,_steeringForce总是被限制在最大力度以内。所以,虽然仍旧没有朝着想要的准确方向走,却在最大力度和最大速率的限制下尽了最大的可能。

现在给出寻找行为的一个例子:

这是一个非常简单的例子。仅仅是让场景上一个有转向行为的机车在每帧去寻找鼠标。试着改变机车的最大速率和最大力度,或者改变其质量(mass)来感受一 下这些因素对转向行为的影响。同样也可以试试用一个固定点代替鼠标,或者更刺激一点,创建另一个机车作为目标。这样Rendering函数中就会有 类似的代码:

myStar.seek(new Vector2D(mouseX, mouseY));

myStar.update();

到此,应该已经见识了转向机车如何寻找鼠标或者另一辆机车,当对这些工作有了很好的理解后,我们进入下一个行为:避开。 

继续阅读