平臺遊戲中走與跳的實現
平臺遊戲中,如何在動作操作方面達到《Celeste》,《死亡細胞》等作品那樣的效果(手感),單純使用物理引擎是比較難做到的,因為我們需要一些反常識的運動效果,而這些效果可能是多種運動組成的,為了更精細的控制物理運動,需要對每一種動作的物理運動做特定的建模與調參。
本文會針對平臺類的遊戲,針對走路,和跳躍這兩個行為,從實現原理上做一些解釋,為了更清晰的表述,文中會使用虛擬碼來解釋。讀完文章,你會了解走,跳的一種實現思路。話不多說,讓我們開始吧。
簡化:
平臺類遊戲,最常見的物體會有,地板,牆,角色這三種,首先我們需要簡化其幾何模型,因為這會大大提高後邊物理計算的效率,也更直觀,更容易理解。
遊戲迴圈:
遊戲迴圈,幾乎所有的遊戲都有一個叫遊戲迴圈的部分,這部分程式碼會被一遍一遍的執行,直到遊戲結束。功能上通常包括收集使用者的輸入,更新所有物體的狀態,渲染成圖等。邏輯如圖
每一個Update函式負責改變遊戲內所有物體的資訊,後邊的Render會根據資料生成一張圖片,也就是常說的一幀。這篇文章所討論的問題就是:在Update函式中,如何計算出每一幀玩家的位置。
走:
從上圖中可以看出來,物體當前幀的位置可以根據上一幀的位置來計算出來。
第3行用來計算偏移距離,即:偏移距離=運動速度x時差。
第4行用來計算當前幀物體的位置,即:當前幀物體的位置=上一幀物體的位置+偏移距離。
利用上邊的實現,我們已經可以使角色運動起來了。
加入牆體:
當加入牆體後,需要對牆體做特殊處理,以保證角色不會直接穿過牆體。
用線段A去和外圍的世界做碰撞檢測,如果有交點,那麼則代表碰撞到物體,需要修正偏移距離。線段A的一個端點可以選擇上一幀物體的中心,另一個端點可以根據當前速度,時差來計算出。那麼,程式碼就變成了這樣:
新加入的程式碼:使用線段與場景內的物體進行求交檢測,如果有交點,更新偏移距離。利用上述程式碼,角色將會被牆壁擋住。
處理坑:
如果用上述程式碼來讓角色走過一個坑洞時,角色會並不會掉落下去,而是直接走過,所以需要特殊處理有坑洞的情況。思路是,首先檢測坑洞,如果沒有檢測到,則保持水平行走,如果檢測到坑洞,則切換物體為掉落狀態。
檢測坑洞具體的方法是向下做一個線段進行碰撞檢測,如果沒有碰撞到物體,代表下邊就是一個坑了。貼出加入坑洞處理的程式碼。
第3行新增了狀態檢測,角色的狀態除了走路之外,還會有跳躍,衝刺……等其它狀態,所以在此我們新增一個變數state用來追蹤當前玩家的狀態,以區分和管理角色的行為。
第10-14行:利用垂直線段向下進行碰撞檢測,如果有交點,那麼修改垂直偏移距離。
第16行:如果檢測到坑洞,則改變角色當前狀態為“下落”
下落狀態:
下落是從跳躍的最高點處開始向下,直到落地的這個間隔。或者是在走路時遇到坑洞後,掉落的這個過程。下落過程中,處理情況和行走是非常的相似的。
第16行,在行走的過程中,如果向下方的碰撞測試沒有檢測的地面,這時需要改變為下落狀態。
第20-23行,在下落的過程中,檢測橫向的牆面,如果有碰撞,需要修正偏移的距離。
第25-30行,在下落的過程中,如果向下方的碰撞測試,檢測到了地面,需要修正垂直偏移距離。
起跳:
起跳是從離開地面到最高點這段過程,當收到玩家指定時,進入跳躍狀態,程式碼如下:
第39-41行,在起跳的過程中,如果達到了跳躍的最高高度,那麼應該切換到下落狀態。
第43-49行,和前邊的程式碼行為是類似的。
總結:
通過上述的描述,我們已經可以實現出平臺遊戲中走與跳的行為了,並且可以方便的擴充套件出更多的運動效果,比如:
- 走路的滑動
- 落地彈一下
- just-in-time jump
- 碰到牆上反彈
- 走路時加速
- 加速跳
- ……
為了用盡量短小的篇幅說明問題,文中刪減了一些和物理實現無關的問題,比如動畫管理切換,使用者輸入採集等……文中的截圖,均是採用上述方法實現的。
感謝:文中設定和動畫由畫師AOMZER友情提供
作者:黑小兔
來源:騰訊遊戲學院
原地址:https://gameinstitute.qq.com/community/detail/132969
相關文章
- 為你的 Python 平臺類遊戲新增跳躍功能Python遊戲
- 解謎遊戲:在虛擬與現實之間反覆橫跳遊戲
- 位元組跳動打遊戲,抖音平臺當先鋒?遊戲
- NVIDIA RTX與蒸汽平臺破局中國遊戲市場遊戲
- 元境雲遊戲技術讓遊戲全平臺暢玩成為現實遊戲
- LIBGDX遊戲引擎平臺介紹與搭建遊戲引擎
- 直播平臺開發,實現點選跳轉外部連結時的跳轉步驟
- 遊戲中的陰影實現遊戲
- 位元組跳動遊戲業務新動作,上線休閒遊戲分發平臺遊戲
- 手遊折扣平臺 遊戲打折扣的平臺推薦遊戲
- 印度遊戲平臺Dream11如何伸縮擴充套件他們的遊戲中臺?遊戲套件
- 廣州遊戲公司轉型中的憂患與現實遊戲
- 皇家遊戲平臺 16606959990遊戲
- 試著跳一下?講講遊戲中的“跳躍”遊戲
- 稱霸遊戲研發與發行平臺後,Valve踏足“遊戲PC”遊戲
- 遊戲陪玩平臺原始碼開發,依賴收集和觸發的實現遊戲原始碼
- 小鎮青年的網遊實踐與現實生活:從“遊戲即生活”到“遊戲只是遊戲”遊戲
- GOG打造PC玩家遊戲聚合平臺 囊括所有平臺及主機遊戲Go遊戲
- 走進遊戲中的美術:遊戲美術風格介紹遊戲
- 億級流量實驗平臺設計與實現
- 現在的中國遊戲圈,能有多現實?遊戲
- 遊戲論·現實的媒介:MOBA遊戲與一個世界的症狀遊戲
- 跳躍遊戲遊戲
- 位元組跳動,跳動的“遊戲夢”遊戲
- 雷亞新遊《MO : Astray 細胞迷途》:解謎、戰鬥雜糅的畫素平臺跳躍遊戲AST遊戲
- 「windows平臺」IATHook&原理與實現(4)WindowsHook
- [Leetcode]44.跳躍遊戲Ⅰ&&45.跳躍遊戲ⅡLeetCode遊戲
- 進退兩難的雲遊戲平臺遊戲
- 如何用遊戲化思維構建 "好玩" 的遊戲平臺遊戲
- 人民網“遊戲適齡提示”平臺正式上線 首批21款遊戲參與遊戲
- 位元組跳動資料平臺技術揭祕:基於 ClickHouse 的複雜查詢實現與優化優化
- 微軟:我們對於 PC 平臺遊戲的計劃與方向微軟遊戲
- 遊戲平臺採集資料遊戲
- 在 Pygame 遊戲中放置平臺GAM遊戲
- 如何實現遊戲陪玩系統中語音的錄製與播放?遊戲
- 洪增林:網易遊戲統一資料流平臺架構與實踐遊戲架構
- 整合App Store與Game Center,蘋果也想做遊戲平臺?APPGAM蘋果遊戲
- GRPC 多平臺實現RPC