1. 程式人生 > >FPS遊戲初開發--邏輯分析總結

FPS遊戲初開發--邏輯分析總結


(圖片來自網路,侵權可刪)

FPS遊戲,即First-person Shooting Game,第一人稱射擊遊戲,說到FPS遊戲,相信大家第一個想到都是經典的CS,近幾年優秀的FPS遊戲也是不少,比如CS續作CSGO,騰訊搞的CODOL,育碧的彩虹六號,暴雪的守望先鋒,以及藍洞的絕地求生(糾正一哈,這個應該來說是第三人稱,嚴格來說不算FPS遊戲)。

FPS遊戲的玩法大多都是一把槍,對敵人進行射擊,沒有太多的動作,行為方式看起來都比較簡單(這裡小編再吃一哈書,守望先鋒的行為方式可太多太難了),於是抱著這種心情,小編也開始自己開發簡單的FPS遊戲,結果在開發的過程中發現其實也沒那麼簡單,最後也是花了近一個月時間才算是完成。

那我們先來簡單的分析一下FPS遊戲有哪些需要我能完成的動作:

1.射擊:

射擊是這種遊戲的最核心的玩法,當然是必不可少的。

2.換彈:

射擊消耗的是子彈,那麼也就是說我們再彈夾內子彈消耗殆盡的時候,我們需要做的操作就是換彈夾,這也是必不可少的。

3.換槍:

小編這裡開發的專案復刻的是CS這個遊戲,也就是說我們可能手上不止一把槍,那麼換槍操作也是必不可少的。

4.死亡:

我們的血量不是無限的,所以在被命中受傷的時候如果血量到0以下了我們就會死亡,這也是必不可少的。

好了,可能用心的朋友發現我們上面每說一條都會說必不可少這個詞語,對,沒錯,其實完成一個FPS遊戲我們還可以對其 加入一些更多的操作,比如跳躍,甚至是像COD和絕地求生一樣貼近牆面時的翻牆動作,這些小編這裡就不再對其邏輯進行贅述了,有興趣的小夥伴可以自己去試試。

現在我們就開始進行開發,這幾個動作我們要如何進行處理呢?其實很簡單,給我們每個角色兩個變數,一個血量,一個子彈數,然後當角色開始射擊的時候,消耗子彈,當子彈打完的時候進行換彈操作,被命中后角色開始減血量,當減到0以下就死亡,之後角色就不能做任何動作,過一會兒銷燬角色。

聽起來是不是很簡單?小編一開始就是這樣想的,因為是自己開發,小編也沒有做寫文案,做測試,備份,版本控制這些開發常規操作,提著鍵盤就開始幹……然後一執行,一萬個BUG……

這裡我們先說下射擊,小編在對射擊的處理時,命中的判定是看準心位置的,換個說法,其實命中判定是看目標是否在我角色攝像頭的真中心,而不是看目標是否在我槍前面。其實這個問題是很多遊戲中都有,我們射擊時子彈到底應該是從槍口出還是從攝像頭中心出,這個問題當我們在牆邊時尤為體現的突出,有時候在角色面前有一個和搶高度等高的牆面,但是我們第一人稱的視角的準心並沒有被牆面擋住,那麼這時要怎麼處理呢?這裡我們可以看看目前一些比較優秀的FPS是如何處理的,首先是彩虹六號,這個遊戲很多網友都在調侃它是用瞄具在射擊,只要我們能瞄到的地方就能達到,不管是否槍口被牆面堵住;再來就是絕地求生,這個遊戲當我們在牆體前面時,也就是準心和槍不在同一個位置的時候,會有一個收槍的動作,所以我們在牆體前時,會出現我們能看見目標,卻不能射擊的情況。

舉這兩個例子,小編就是想說明對這個子彈出點的說明,當然出於真實,小編更傾向於後者,這個小夥伴可以根據實際情況進行調整。

講完射擊我們再來看下另外兩個操作,換彈和換槍,因為沒有做過多的考慮,小編的這兩個操作也就完成了動作,結果……我在射擊的時候按了一下換彈,發現居然槍還在開槍……按理來說我們一按換彈,開槍就應該會停止才對,不止如此,在換槍的時候也是這樣……

當然這還算比較好解決的,我們只需要在換槍和換彈的時候呼叫一下我們開發的鬆開左鍵的操作,也就是停止射擊。

這兩個操作這就好了嗎?我們再仔細分析,換槍操作是隨時都能按的,但是換彈操作是隨時都能按的嗎?當然不是,如果我們正在換彈或者正在換槍,這個過程肯定是不能再進行換槍操作的,否則一直按R就會一直播放換彈的鬼畜動畫……行吧,小編又加上了對換槍和換彈的時間判斷來處理這個問題,說到換槍可以隨時按這裡,小編又發現了一個BUG,因為小編在對換彈的操作編寫的時候的邏輯是先把子彈換好再進行換彈的動作,那麼當我們用換槍的動作終止換彈時應該就沒有換好子彈,行吧,這其實也算比較好解決的,只需要把子彈這個變數更新填滿這個操作換到動畫放完時就行了。

好,這下看起來沒什麼問題了,於是又執行測試,這時小編又發現了一個不得了的BUG……因為小編拿子彈數作為角色的變數,所以當小編在換槍操作的時候發現,子彈數居然沒變!!!按理來說,每一把槍的子彈應該都是獨立的,換槍應該子彈換為當前槍的子彈數。

這個就沒有那麼好處理了,因為我們要對整個專案的角色和槍進行重構……

到了這裡原本小編覺得一週可能完成的工作終於也是在一個月內完成了,到了這裡我們簡單的FPS遊戲就算是完成了,當然只是完成了最簡單的一些操作離真正的FPS還是蠻遙遠的,開發這個專案,因為小編想的太少,導致整個過程變的比想象中複雜了很多,希望大家以我為鑑,在開始開發前多想想就能在開發過程中省下很多不必要的事。

相關推薦

FPS遊戲開發--邏輯分析總結

(圖片來自網路,侵權可刪)FPS遊戲,即First-person Shooting Game,第一人稱射擊遊戲,說到FPS遊戲,相信大家第一個想到都是經典的CS,近幾年優秀的FPS遊戲也是不少,比如CS

設計模式遊戲完美開發的學習總結

一、State模式 GOF的解釋”:讓一個物件的行為隨著內部狀態的改變而變化,而該物件也像是換了類一樣”。 書中用State模式實現了場景的轉換。 這是State模式的結構圖。 /// <summary> 2

h5鬥牛源碼 鬥牛遊戲源碼開發代碼總結

正常 dpa style 根據 document com case canvas 公司 1. 布局的時候,如果一個h5.zhengtuwl.com你想讓他的寬高保持一定比例,而不隨屏幕變化,寬高設置的時候,使用同一個單位都是CSS3的單位,低版本不兼容 <spa

人生如夢遊戲間,RPG遊戲開源開發講座 JAVA篇 1 ——風雲

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

抖音同款口紅機 微信口紅機 線上遊戲口紅機開發程式碼 分析

       目前火熱的口紅機遊戲,需要在裝置前參與,然後成功後即可贏得口紅,目前我們將它搬到了線上。每個人都可以遠端玩這樣的口紅機遊戲了。直接在手機微信裡試玩,成功後,後臺即可記錄你的中獎結果。口紅直接快遞到家!       客戶的需

cocos2d-x實現一個PopStar(消滅星星)遊戲邏輯分析及原始碼

前言 說起PopStar這個遊戲,或許很多人都不知道是啥,但是如果說起消滅星星的話,可能就會有很多人恍然大悟,原來是它。那麼,這個消滅星星長得什麼樣子呢?我們用一張圖來看看: emmm,是的,具體來說,長得就是這樣,我們通過點選圖片上某一個顏色的星星塊,如果,這個顏色塊周圍存在和他相

遊戲 sdk 開發總結

前言 歷時 2 個月的時間,終於完成了第一個作品,開發過程中產品的邏輯介面經歷了多次改動,而程式碼保持了簡潔清晰,真的學到蠻多東西. 目錄 sdk 開發的不同點 螢幕適配 混淆 自定義控制元件 Gradle 設定 sdk 開發的不同點 sdk 和普通 ap

2019網易遊戲測試開發實習電話面試總結

主要分為三次考核來記錄 線上筆試 這次一共五道題,前三道題很簡單,後面兩道暫時沒想到怎麼做。但是總是有一些case過不去,所以費了很多時間,印象最深的是尋找最長的迴文子串,這個很明顯要使用DP去做,但是卻告訴我記憶體超出限制,我也沒想到其他的方法了,也許

微信小程式開發分析總結

本文主要記錄一下初次開發小程式一些注意事項,小程式開發語言,對小程式的稽核要求,小程式的特點,開發特點,後面會再寫下是否有三方好用的工具,及開發中遇到的js,html,css 相關的問題及解決方法。畢竟借小程式寫js,html,css,感謝小程式,讓我深深

H5遊戲開發的架構總結(一) 客戶端

【客戶端】 1.關於遊戲引擎 在15年3月開始準備做h5遊戲的時候,首先遇到的問題就是引擎選型的問題。 當時市面上的2d引擎主要有3個:白鷺egret,layabox和cocos2d-js。 一方面,是因為我以前用cocos2d-x(c++)做了一年多的手遊客戶端,所以,很

H5遊戲開發的架構總結(二) 伺服器端

【伺服器端】 1.關於Go語言 我們的H5遊戲伺服器框架是用Go語言開發的。以前做頁遊的時候是用的php和python,都是動態語言。在上線之後,高併發的時候,單機有效能問題,一直沒有好的解決辦法! 13年的時候我原來的領導開始轉用Go來開發手遊的伺服器端,所以我也跟著轉型

VR初學者——FPS遊戲開發

一些在學習中不認識的函式 EllipsoidParticleEmitter 橢圓體粒子發射器 用法eg: EllipsoidParticleEmitter epe;//這裡申明瞭一個粒子特效 Animation.CrossFade 動畫的淡入淡出

asp.net常見問題分析,網站開發常見問題總結,ningxi_部落格

flex佈局方式特別適用於想要居中的功能,但有幾個點容易誤解、理解誤區: 1、flex的主軸預設是水平線,但會根據flex-direction設定而變;(即:主軸可以是垂直線) 2、justify-content設定主軸上的對齊方式,從第1點可以理解,這個主軸對齊可以

實時對戰遊戲PVP開發之PUN使用中常見問題總結

PUN在使用過程中常遇到的問題和疑問,本篇文章可以幫你解決PUN使用和選擇的疑問,順利完成PVP實時對戰遊戲開發。哪款Photon產品適合我?這是一個難以回答的問題,因為它取決於你正在製作的遊戲和你的專案的具體情況。 不過,可以推薦以下內容幫你進行選擇:如果您仍然有疑問,請隨

2048遊戲程式碼邏輯分析

從主類開始走:   -->MainActivity-->找到一些控制元件-->點選開始按鈕時執行GameView中的startGame()方法                                                  

android開發佈局優化—include、merge、viewstub原始碼分析總結

儘管Android SDK為開發者提供了各種各樣的小部件來提供小型且可重用的互動元素,但開發者可能仍然需要重新使用特殊佈局的較大元件。這就是我們所謂的佈局複用。要有效地重新使用完整的佈局,可以使用和標籤在當前佈局中嵌入另一個佈局。 重複使用佈局非常有用,因為它

【VS開發】static、extern分析總結

       對於寫了很多小程式的人,可能static和extern都用的很少,因為static和extern通常在工程量很大時候才能體現優勢很必要性,這就不奇怪linux核心程式碼中“氾濫”著這兩個關鍵詞,而且據我所知,這也是面試經常被問道的,因為這涉及到的底層多一

動態規劃分析總結——怎樣設計和實現動態規劃算法

基於 進一步 使用 sdn 能夠 疑惑 樓梯 -1 們的 進行算法設計的時候,時常有這種體會:假設已經知道一道題目能夠用動態規劃求解,那麽非常easy找到對應的動態規劃算法並實現;動態規劃算法的難度不在於實現,而在於分析和設計—— 首先你得知道這道題目須要用動態規劃來求

移動端h5開發相關內容總結css篇--自己總結

pan class 寬度 absolute html ive min-width 百分比 number 原文參考http://mp.weixin.qq.com/s/Nho2DHj-Y59j2F62vpN9jQ1.開發移動端,頭部必要的配置<meta name="vie

開機邏輯分析

ice else println ddp files extern hand val conf 增加暗碼命令切換開關機logo功能u-boot logo顯示原理:1.————Little Kernel會在platform_early_init階段首先會獲取lcm param