英吋 XNA

XNA – 追蹤攝影機(下)

更新攝影機

最後,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

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.