這裡是鐵匠史密斯,How is it going?
昨日知道如何旋轉玩家方向 fPlayerA
但是目前只使用常數 0.1f
來增加角度,是轉動得非常快的!
我們需要讓玩家旋轉方向的速度隨著影格刷新速率(frame rate)來調節
至今我們對遊戲世界的**方向定義是什麼呢? 我們直接上圖: **
對應整個座標系,並在 Day 13 | Ray Casting : 光如何前進? Part 2 進行調整後,得出:
Frame rate簡單來說就是影格速率 = fps (frame per second)
代表著: 電腦一秒可以顯示幾個影格(frame) [frame/ s]
這個單位相當於頻率,那週期呢? 我們先上圖:
假設電腦** 1 秒可以產生5個影格**,則
f = 5 [frame/ s]
: ** 1 秒
可以產生多少影格?**T = 1 / f = 1 / 5 [s/frame]
: 每走 1格影格
花了幾秒鐘?
那,這跟我們的旋轉角色方向的速率有什麼關係呢?
假設我們每個迴圈,都按著 A
, 持續遞增 0.1 [rad]
,每個迴圈代表 1 frame,如果我們的電腦:1 秒能生成 5
個影格 (frame) -> f = 5 [frame/s]
代表玩家 1
秒內就轉了 0.1 [rad/frame]* 5[frame/s] = 0.5[rad / s]
!
直接上計算圖:
那要如何避免呢? 我們可以利用 T = 1/f
的特性來讓旋轉速率下降,所以,我們可以另外乘上T
作為調節的參數(權重)使得新的旋轉角度速率為0.1 * 5 * T = 0.1 * 5 * 0.2 = 0.1 [rad]
無論 f = 5、60 或 1000
,最終旋轉角度仍然約是 0.1 [rad/s]
,因為 T
會自動抵消 f
帶來的差異。
這樣的話,旋轉速率就不再被電腦的硬體效能(影格速率 f
)所限制了
今日講解了旋轉角度的定義,明日直接上code來看看旋轉的速率吧~
繼續走下去~