iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
自我挑戰組

翻車機率極高的2D平台遊戲(2D Platformer)製作系列 第 30

[Day 30] 再訪碰撞偵測與解析(二) - 初步碰撞解析

今天只有研究一些相關的文章與做法,並沒進行實作,所以單純的紀錄一下

今日目標

  • 角色移動不穿過其他物件

MISSION FAILED! 要解決的問題不是那麼簡單!

雖說是今天是訂這個目標,但是這個問題在每個遊戲都很常見,例如: 好好地走在地圖上,但是突然就被拉入虛空。這個就是碰撞解析(處理)的問題。今天則是把問題縮得更小,只用在2D平面,而且僅限矩形上。

回顧一下之前利用SAT做出來的碰撞,目的是要讓角色站在地上,但是他卻陷下去了!這個就可以帶到上面說的走一走就掉入虛空的例子,後來參考Learn OpenGL - Collision Resolutiuon那一章節,這樣的情況是來源於

假設角色每一幀都會往前一個單位,而這個單位很大會受delta time影響,那就有可能在這一幀算到的時候,就已經陷入其他物體內了,而且這件事低FPS會比高FPS的影響來的更大。

Learn OpenGL的解決作法是,碰撞時,算出陷進去多少向量,在把這個距離回減到碰撞物體上,這樣在視覺上就可以是兩個物體最終是互相卡住的狀態。

然後,我在想,有沒其他的作法,而且應該還是會有一些沒考慮到的問題,畢竟Learn OpenGL裡的範例,每個物體都是等大小的,我的2D Platfomer之後有許多不同大小的貼圖話,可能就不是這麼簡單了。

於是我在YT上找的這個教學影片,我認為是非常好教材

這部影片不只提到了上面說的幀數的問題,補充說道,如果是低FPS的設備,那就有可能當下這幀的時候,角色已經穿過並離開這個物體了,如果在進行校正,就會把原本的角色拉回到之前還沒觸碰到的位置。

重點是,這篇有一點一滴地從點>線>面開始解說並實作,但很不幸是英文的 ~o~

今天先這樣,明天還會繼續


上一篇
[Day29] 再訪碰撞偵測與解析(二) - AABB碰撞偵測
下一篇
[Day31] 再訪碰撞偵測與解析(三) - 解析很複雜!
系列文
翻車機率極高的2D平台遊戲(2D Platformer)製作33

尚未有邦友留言

立即登入留言