更新攝影機
最後,ThirdPersonCamera 的最後一個方法,Update。
在 BaseCamera 裡面,Update 是一個抽象方法,每當攝影機需要更新時就會呼叫。
在 Update 方法裡,會更新攝影機的屬性。
但要注意,UpdateView 和 UpdateView 這兩個方法只有在對應的屬性被 get 時,且需要更新時才會被呼叫。
他們會使用攝影機的屬性去計算 view 和 projection 的矩陣。
public override void Update(GameTime time) { float elapsedTimeSeconds = (float)time.ElapsedGameTime.TotalSeconds; // 更新跟隨的位置 UpdateFollowPosition(elapsedTimeSeconds, !isFirstTimeChase); if (isFirstTimeChase) { eyeRotate = Vector3.Zero; isFirstTimeChase = false; } // 依據旋轉速度旋轉 if (eyeRotateVelocity != Vector3.Zero) { eyeRotate += eyeRotateVelocity * elapsedTimeSeconds; eyeRotate.X = MathHelper.Clamp(eyeRotate.X, –MAX_ROTATE, MAX_ROTATE); eyeRotate.Y = MathHelper.Clamp(eyeRotate.Y, –MAX_ROTATE, MAX_ROTATE); eyeRotate.Z = MathHelper.Clamp(eyeRotate.Z, –MAX_ROTATE, MAX_ROTATE); needUpdateView = true; } } |
這裡說明一下 MathHelper.Clamp() 的功能…
public static float Clamp ( float value, float min, float max ) |
簡單來說,就是將 value 限制在 min 和 max 之間。
也就是等同於…
result = Math.Min(maxValue, Math.Max(min, value)); |
–End