今天只有研究一些相關的文章與做法,並沒進行實作,所以單純的紀錄一下
雖說是今天是訂這個目標,但是這個問題在每個遊戲都很常見,例如: 好好地走在地圖上,但是突然就被拉入虛空。這個就是碰撞解析(處理)的問題。今天則是把問題縮得更小,只用在2D平面,而且僅限矩形上。
回顧一下之前利用SAT做出來的碰撞,目的是要讓角色站在地上,但是他卻陷下去了!這個就可以帶到上面說的走一走就掉入虛空的例子,後來參考Learn OpenGL - Collision Resolutiuon那一章節,這樣的情況是來源於
假設角色每一幀都會往前一個單位,而這個單位很大會受
delta time
影響,那就有可能在這一幀算到的時候,就已經陷入其他物體內了,而且這件事低FPS會比高FPS的影響來的更大。
Learn OpenGL的解決作法是,碰撞時,算出陷進去多少向量,在把這個距離回減到碰撞物體上,這樣在視覺上就可以是兩個物體最終是互相卡住的狀態。
然後,我在想,有沒其他的作法,而且應該還是會有一些沒考慮到的問題,畢竟Learn OpenGL裡的範例,每個物體都是等大小的,我的2D Platfomer之後有許多不同大小的貼圖話,可能就不是這麼簡單了。
於是我在YT上找的這個教學影片,我認為是非常好教材
這部影片不只提到了上面說的幀數的問題,補充說道,如果是低FPS的設備,那就有可能當下這幀的時候,角色已經穿過並離開這個物體了,如果在進行校正,就會把原本的角色拉回到之前還沒觸碰到的位置。
重點是,這篇有一點一滴地從點>線>面開始解說並實作,但很不幸是英文的 ~o~