[Silverlight动画]转向行为 - 转向机车
轉向機車類繼承機車類并增加轉向行為。每個行為都被定義成公開函數,在每幀或者一段時間間隔內調用以實現對應的轉向力。通常所有轉向力在調用之后再調用機車的update函數。
轉向函數都是這樣工作的:不管什么時候調用了一個轉向函數,都會計算轉向力,這個力用來確定機車是順時針旋轉還是逆時針旋轉。比如,seek(尋找)函數會 計算出一個力,確保機車能從當前方向直接面向目標點。這或許會受到不止一個擁有轉向行為的機車的影響,起初的尋找點,會在考慮避開或躲避后而改變。當這些 力疊加后,update函數才被調用,最終把一切都反應在機車上,并導致其速度的改變(方向和大小)。
public class SteeredVehicle:Vehicle{private double _maxForce = 1;private Vector2D _steeringForce;public SteeredVehicle(){_steeringForce = new Vector2D(0, 0); }public double maxForce{get{return _maxForce;}set{_maxForce = value;}}public override void update(){_steeringForce.truncate(_maxForce);_steeringForce = _steeringForce.divide(_mass);_velocity = _velocity.add(_steeringForce);_steeringForce = new Vector2D(0, 0);base.update();}}立刻進入眼簾的是_steeringForce屬性,它是一個2D向量。該屬性作為每個行為疊加后的轉向合力。同時留意此處還有一個_maxForce屬 性,因為現實中不會有什么旋轉是一瞬間完成的,所以要對旋轉力加以限制,使其在一幀里的大小不會太離譜。可以通過公maxForce賦值對maxForce的修正,會使機車旋轉更急劇,移動更快速,走位更準確,或是出現一個很牛x的大甩尾。
現在,讓我們解剖update函數。先假設有一堆轉向行為已經被調用,那么此時的_steeringForce屬性即是一個有意義的向量。第一個 truncate(截斷)函數是不讓_steeringForce超過最大作用力。然后除以(divide)機車的質量(mass)。在現實中,越重的物 體有著越大的動力,旋轉的角度也越大,而較輕的物體則旋轉更快速。接著把轉向力疊加于機車的當前速度上,再把_steeringForce設回零向量,以 便于下一輪作用力的疊加。最終調用父類已經實現的update函數。
該是了解行為實現的時候了,從尋找(seek)行為開始。每個行為都是轉向機車類的一個公開函數,某些行為會需要新的屬性和額外的函數。
總結
以上是生活随笔為你收集整理的[Silverlight动画]转向行为 - 转向机车的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今天微软的office 2010终于发布
- 下一篇: 用什么来评价