C++之3D對戰游戲編程學習(http://www.ixueyun.com/lessons/detail-lessonId-687.html)
學習地址:http://www.ixueyun.com/lessons/detail-lessonId-687.html
課程概述: 本課程主要是以對戰游戲為背景介紹3D對戰網絡游戲常用的開發技術以及C++高級編程技巧,有了這些知識,就可以開
發出中小型游戲項目或3D工業仿真項目;
本課程分為三個部分:
1、 實現基本通信框架,包括對游戲的需求分析、設計及開發環境和通信框架的搭建;
2、 實現網絡底層操作,包括創建線程池、序列化網絡包等;
3、 實戰演練,實現類似于CS反恐精英的3D對戰網絡游戲;
相關圖片:
課程詳細大綱
第一部分 實現基本通信框架
第一&二講:3D對戰網絡游戲需求分析
一、導入
a)
該項目是以多玩家扮演的不同角色間的對戰情形為背景實現的一個基于C/S架構的3D對戰網絡游戲的簡單框架;
二、學習目標
a) 項目簡介
b)
游戲服務器端功能需求
c) 網絡底層接口需求
d) 游戲客戶端界面功能需求
e) 3D場景模塊接口需求
三、教學過程描述
a)
首先介紹了游戲背景,然后分別從服務器端和客戶端對游戲做出了整體的功能需求;
b)
從玩家的角度介紹了游戲客戶端的界面功能需求;
c)從開發者的角度介紹了關于網絡底層模塊以及場景模塊的接口需求;
四、練習與作業
a)
熟悉UML的基本使用
b) 思考針對本節的需求如何對該服務器端進行總體設計?
c) 熟悉3D場景渲染的基礎知識
d)
思考如何針對服務器和客戶端的需求對該網絡游戲框架進行設計?
五、小結
a) 介紹了對戰游戲項目的游戲背景;
b)
從不同的角度介紹了關于該游戲項目的功能需求以及接口需求;
第三&四&五講:3D對戰網絡游戲系統設計
一、上節回顧
a)
項目簡介;
b) 游戲客戶端和服務器端的功能需求;
c) 網絡底層和3D場景模塊的接口需求;
二、學習目標
a)
對3D對戰網絡游戲進行總體設計和概要設計;
b) 游戲服務器端詳細設計;
c) 游戲客戶端詳細設計;
三、教學過程描述
a)
根據項目的需求分析,本節以模塊功能圖以及包圖分別對該項目的各個模塊進行了總體設計和概要設計;
b)對網絡底層、服務器端數據存儲、游戲計算邏輯等相關功能進行了詳細設計;
c)
對客戶端界面以及3D場景模型進行了詳細設計;
四、練習與作業
a) 熟悉UML包圖的使用方法;
b)
了解網絡編程的常用模型以及需要考慮的問題;
c) 熟悉c++ boost庫的使用;
d)
思考如何將設計模式中的工廠模式應用到網絡包的創建中?
e) 了解并熟悉OpenGL的相關知識及使用;
f)
了解并熟悉Qt相關知識及應用;
五、小結
a) 以包圖的形式對3D對戰網絡游戲進行了總體設計和概要設計;
b)
以類圖的形式介紹了游戲服務器端以及游戲客戶端的詳細設計;
第六講:系統開發環境與軟件版本控制
一、
上節回顧
a) 以包圖的形式對3D對戰網絡游戲進行了總體設計和概要設計;
b)
以類圖的形式介紹了游戲服務器端以及游戲客戶端的詳細設計;
二、 學習目標
a) 介紹系統開發環境;
b)
介紹軟件版本控制相關知識;
三、 教學過程描述
a)
系統開發環境中主要介紹了開發工具以及常用的開發技術(如Qt、boost等),同時也簡單的介紹了關于開發環境的搭建;
b)
介紹軟件版本控制相關知識,主要提到了關于SVN的使用;
四、 練習與作業
a) 配置開發環境;
b)
配置SVN本地管理軟件版本的環境;
五、小結
a) 介紹了系統開發環境以及常用的開發技術;
b)
介紹了SVN的配置及使用;
第七講:搭建C/S架構的基本通信框架
一、上節回顧
a)
介紹了系統開發環境以及常用的開發技術;
b) 介紹了SVN的配置及使用;
二、學習目標
a) 項目源代碼及文件管理;
b)
搭建網絡通信框架;
三、教學過程描述
a) 主要介紹了如何管理項目源代碼及相關文檔才能合理的體現代碼的組織結構;
b)
以流程圖的形式展現了網絡通信框架的基本工作流程;
四、練習與作業
a) 熟悉代碼中涉及到的boost相關技術點;
b)
思考基本異步機制的網絡通信環境應該如何搭建?
五、小結
a) 介紹了項目源代碼及文件管理;
b)
搭建基本的網絡通信框架;
第二部分 實現網絡底層操作
第八講:實現網絡底層操作(構建消息體)
一、上節回顧
a)
項目源代碼及文件管理;
b) 搭建網絡通信框架;
二、學習目標
a) 構建消息體;
b)
測試消息體;
三、教學過程描述
a) 首先介紹了網絡通信中消息結構的定義;
b) 其次介紹了關于消息體的處理流程;
c)
結合網絡通信框架對消息體進行了測試;
四、練習與作業
a) 思考如何使用內存池來創建消息體以滿足大流量的網絡包數據的處理?
b)
思考如何管理多線程環境下的消息數據?
c) 了解數據校驗的相關知識,并思考如何應用到網絡通信?
五、小結
a)
首先介紹了消息體的結構以及消息結構;
b)
通過示例演示了管理消息體的測試;
第九講:實現網絡底層操作(構建并發線程池)
一、上節回顧
a)
首先介紹了消息體的結構以及消息處理流程;
b) 通過示例演示了管理消息體的測試;
二、學習目標
a) 線程池簡介;
b)
建立并發線程池;
三、教學過程描述
a) 首先介紹關于線程池的原理以及線程池的優點;
b)
通過示例介紹了建立并發線程池的操作;
四、練習與作業
a)
思考有哪些其它的線程調度算法,以及如何將這些算法應用到本節的線程池中?
五、小結
a) 首先介紹了線程池簡介;
b)
然后通過示例演示了關于并發線程池的構建;
第十講:實現網絡底層操作(建立阻塞隊列)
一、上節回顧
a)
線程池簡介;
b) 建立并發線程池;
二、學習目標
a) 建立阻塞隊列;
b)
應用生產者/消費者模式;
三、教學過程描述
a)
首先介紹針對多線程下的數據讀寫,采用條件變量管理并發的手段,這樣就可以被多個線程使用,同時采用類模板實現多種類型的數據存儲;
b)
介紹了如何將阻塞隊列應用于生產者/消費者模式;
四、練習與作業
a)
根據本節的內容,使用睡眠功能實現一個線程調度器,可以滿足定時調度線程的功能;
五、小結
a) 建立阻塞隊列;
b)
應用生產者/消費者模式;
第十一&十二講:實現網絡底層操作(構建TCP通信會話端)
一、上節回顧
a)
建立阻塞隊列;
b) 應用生產者/消費者模式;
二、學習目標
a) TCP通信會話端功能簡介;
b) 實現數據異步讀寫;
c)
實現線程調度器;
d) 實現TCP通信連接;
三、教學過程描述
a)
首先介紹TCP通信會話端的主要功能是處理網絡通信,并實現數據收發的核心功能,然后介紹了相關的異步處理流程;
b)然后介紹了線程調度器是以線程的睡眠功能實現函數的定時調用的目的,主要用于客戶端定時發起連接的操作等相關功能;
四、練習與作業
a)
根據本節中的safe_atom設計方法與思路,實現其它類似的多線程環境安全的容器類,比如vector、map等;
b)
編寫測試代碼測試本節中的異步讀寫類;
c) 在本節的基礎上實現數據的通信(類似于之前同步機制下的回顯功能);
五、小結
a)
簡單介紹了TCP通信會話端的功能,然后實現了數據的異步讀寫操作;
b)
實現了線程調度器,并且實現了TCP通信連接;
第十三講:實現網絡事件的分派處理
一、上節回顧
a)
簡單介紹了TCP通信會話端的功能,然后實現了數據的異步讀寫操作;
b) 實現了線程調度器,并且實現了TCP通信連接;
二、學習目標
a)
實現網絡回調事件;
b) 測試網絡回調事件;
三、教學過程描述
a)
首先介紹對網絡回調事件進行了分類,包括網絡連接或斷開的網絡事件以及接收數據和發送數據的網絡事件;
b) 然后介紹了關于設計網絡回調事件操作的設計思路以及測試網絡回調事件的思路;
四、練習與作業
a)
實現多個客戶端連接一個服務器的功能,同時將客戶端實現為一個可以根據輸入發送數據的流程,并且服務器可以將某一個客戶端的輸入回顯給所有客戶端(類似于聊天功能);
五、小結
a)
首先介紹對網絡回調事件進行了分類;
b)
然后介紹了關于設計網絡回調事件操作的設計思路以及測試網絡回調事件的思路;
第十四&十五講:實現支持序列化與反序列化的網絡包
一、上節回顧
a)
實現網絡回調事件;
b) 測試網絡回調事件;
二、學習目標
a) 序列化簡介;
b) 實現序列化接口;
c)
測試序列化接口;
d) 應用序列化網絡包;
e) 測試網絡通信;
三、教學過程描述
a)
首先介紹了關于序列化以及反序列化的相關功能;
b) 通過思考如何實現序列化與反序列化網絡包的作用等相關問題實現了關于序列化的相關操作;
c)
在實現的基礎上并對序列化相關接口進行了測試和應用的操作;
四、練習與作業
a)
根據serial_packet的定義,思考如何在網絡數據收發過程中使用,以及如果將網絡包類型以網絡包的類名來進行識別,應該怎樣做?
b)
思考游戲中涉及的數據,建立相應的序列化網絡包結構;
c)
思考如何簡化序列化網絡包的分派處理?
第十六&十七講:實現網絡包的分派處理
一、上節回顧
a)
序列化簡介;
b) 實現序列化接口;
c) 測試序列化接口;
d) 應用序列化網絡包;
e)
測試網絡通信;
二、學習目標
a) 實現動態創建網絡包;
b) 測試網絡包創建工廠;
c) 實現線程安全的容器;
d)
實現網絡包分派處理;
三、教學過程描述
a)
首先介紹了工廠模式,工廠模式就是為創建一組相關或相互依賴的對象提供一個接口,而且無需指定它們的具體類;
d)
介紹了管理測試網絡包創建工廠的測試思路;
c) 介紹了關于實現線程安全的容器以及網絡包分派處理的設計思路;
四、練習與作業
a)
根據本節中網絡包分派處理的相關知識,思考關于網絡包動態創建部分的優點及不足,以及針對不足的地方有什么樣的改進方法?
b)
思考如何通過快速檢測網絡連接狀態等相關方法以提高網絡包分派處理的效率?
c) 思考如何測試網絡底層的穩定性等相關問題?
五、小結
a)
介紹了工廠模式;
d) 介紹了管理測試網絡包創建工廠的測試思路;
c)
介紹了關于實現線程安全的容器以及網絡包分派處理的設計思路;
第十八講:實現網絡底層操作(網絡連接狀態檢測,心跳包的設計)
一、上節回顧
a)
實現動態創建網絡包;
b) 測試網絡包創建工廠;
c) 實現線程安全的容器;
d) 實現網絡包分派處理;
二、學習目標
a)
心跳檢測簡介;
b) 實現網絡連接狀態檢測;
三、教學過程描述
a) 介紹了關于心跳包的相關概念及其作用;
b)
介紹了實現網絡連接狀態的設計思路;
四、練習與作業
a)
實現網絡連接狀態檢測的具體操作,主要處理建立網絡連接但未進行數據通信的會話端的相關問題;五、小結
a) 心跳檢測簡介;
b)
實現網絡連接狀態檢測;
第十九講:實現服務器和客戶端的外部網絡接口
一、上節回顧
a) 心跳檢測簡介;
b)
實現網絡連接狀態檢測;
二、學習目標
a) 設計網絡底層接口;
b) 實現網絡底層接口;
三、教學過程描述
a)
介紹了關于設計網絡接口以及簡化外部調用的思路;
b) 介紹了如何實現服務器端以及客戶端對外的網絡接口基本一致?
四、練習與作業
a)
了解動態鏈接庫的相關知識,思考如何將網絡底層 封裝成動態鏈接庫的方式使用?
五、小結
a) 設計網絡底層接口;
b)
實現網絡底層接口;
第二十講:實現網絡層封裝(DLL)
一、上節回顧
a) 設計網絡底層接口;
b)
實現網絡底層接口;
二、學習目標
a) 動態鏈接庫簡介;
b) 封裝網絡底層操作;
三、教學過程描述
a)
介紹了關于動態鏈接庫的功能以及動態鏈接庫的功能;
b) 介紹了關于封裝網絡底層操作的設計思路;
四、練習與作業
a)
在本節的基礎上測試網絡底層操作,包括快速發送大量數據的操作等;
b) 了解和熟悉qt以及opengl的相關基礎知識;
五、小結
a)
動態鏈接庫簡介;
b)
封裝網絡底層操作;
第三部分 實戰演練(實現類似于CS反恐精英的3D網絡對戰游戲)
第二十一講:設計游戲通信協議(基本協議類型的劃分)
一、上節回顧
a)
動態鏈接庫簡介;
b) 封裝網絡底層操作;
二、學習目標
a) 設計基本通信協議;
b)
實現基本通信協議;
三、教學過程描述
a) 介紹了基本通信類型的劃分,并分別介紹了通信協議的設計,包括請求協議、回復協議等;
b)
介紹了關于實現基本通信協議的方案;
四、練習與作業
a) 思考本游戲中還有哪些通信協議?
b)
思考通信協議的設計需要考慮哪些問題,以及如何解決或避免影響設計的相關問題?
五、小結
a) 設計基本通信協議;
b)
實現基本通信協議;
第二十二講:實現游戲登錄界面
一、上節回顧
a) 設計基本通信協議;
b)
實現基本通信協議;
二、學習目標
a) 設計游戲登錄界面;
b) 實現游戲登錄操作;
三、教學過程描述
a)
介紹了如何根據需求分析及詳細設計來設計游戲登錄界面的思路;
b) 介紹了關于實現游戲登錄操作的相關方法;
四、練習與作業
a)
結合本節的內容,實現登錄界面的記住密碼功能及自動登錄功能;
b)
思考針對游戲客戶端的登錄操作,服務器端應該有哪些對應的響應操作?
五、小結
a) 設計游戲登錄界面;
b)
實現游戲登錄操作;
第二十三講:實現服務器端數據存儲
一、上節回顧
a) 設計游戲登錄界面;
b)
實現游戲登錄操作;
二、學習目標
a) 設計數據存儲功能;
b) 實現客戶端數據信息的存儲;
三、教學過程描述
a)
介紹了關于數據存儲以及數據管理的設計思路;
b) 介紹了關于客戶端數據信息存儲的相關流程;
四、練習與作業
a)
在游戲客戶端實現類似于ServerDataManager類的操作對客戶端的數據進行管理;
五、小結
a) 設計數據存儲功能;
b)
實現客戶端數據信息的存儲;
第二十四講:實現游戲大廳框架
一、上節回顧
a) 設計數據存儲功能;
b)
實現客戶端數據信息的存儲;
二、學習目標
a) 設計游戲大廳界面;
b) 實現游戲大廳基本操作;
三、教學過程描述
a)
介紹了游戲大廳的顯示功能以及相關的大廳操作;
b) 介紹了服務器端如何實現有玩家登錄或斷開連接時對客戶端的實時更新?
四、練習與作業
a)
思考如何設計游戲分組的界面以及游戲分組涉及哪些具體的操作?
b) 完善本節中部分輔助信息的顯示功能;
五、小結
a)
設計游戲大廳界面;
b) 實現游戲大廳基本操作;
第二十五&二十六講:實現游戲分組
一、上節回顧
a)
設計游戲大廳界面;
b) 實現游戲大廳基本操作;
二、學習目標
a) 設計游戲分組界面;
b) 實現分組界面操作;
c)
實現分組界面管理;
d) 實現數據交互操作;
三、教學過程描述
a) 介紹了游戲分組界面的顯示功能以及相關的操作;
b)
介紹了如何實現單個分組的操作,以滿足多個分組時的統一操作?
c) 介紹了如何在游戲大廳中實現添加分組的靈活性及分組界面布局的管理?
四、練習與作業
a) 思考如何在游戲大廳中對分組界面進行管理?
b) 思考服務器端針對游戲分組有哪些響應和操作?
c)
結合游戲大廳及游戲分組的內容,思考如何實現進入游戲的相關邏輯操作?
d) 熟悉QGLWidget的相關操作;
五、小結
a)
設計游戲分組界面;
b) 實現分組界面操作;
c) 實現分組界面管理;
d)
實現數據交互操作;
第二十七講:設計3D游戲界面
一、上節回顧
a) 設計游戲分組界面;
b)
實現分組界面操作;
c) 實現分組界面管理;
d) 實現數據交互操作;
二、學習目標
a) 設計3D界面顯示內容;
b)
實現3D界面窗口管理;
三、教學過程描述
a) 介紹了如何根據需求分析及前期設計思考3D游戲界面中包含哪些基本的顯示內容?
b)
介紹了如何在Qt窗口中初始化OpenGL操作?
四、練習與作業
a) 完善游戲分組的相關處理,并思考如何設計游戲開始等相關邏輯操作?
b)
熟悉OpenGL的機制;
五、小結
a) 設計3D界面顯示內容;
b)
實現3D界面窗口管理;
第二十八講:設計游戲模式及玩家角色
一、上節回顧
a) 設計3D界面顯示內容;
b)
實現3D界面窗口管理;
二、學習目標
a) 設計游戲模式;
b) 設計玩家角色;
三、教學過程描述
a)
介紹了如何實現需求分析中提到的至少五個玩家同時在線的需求?
b) 介紹了如何滿足玩家動態加入游戲分組的操作?
c)
介紹了如何設計玩家的角色以滿足游戲的豐富性?
d) 介紹了玩家角色包含的屬性?
四、練習與作業
a)
思考如何具體的完成游戲角色的劃分?
b) 測試游戲服務器與游戲客戶端已完成的功能,并針對不足的地方進行修改和完善;
五、小結
a)
設計游戲模式;
b) 設計玩家角色;
第二十九講:測試游戲服務器端和客戶端基本通信
一、上節回顧
a)
設計游戲模式;
b) 設計玩家角色;
二、學習目標
a) 測試游戲基本通信;
b)
完善界面狀態更新;
三、教學過程描述
a)
介紹了游戲服務器端和客戶端的基本通信應該包含的測試內容?
b)介紹了游戲服務器端和客戶端的交互過程中存在的狀態更新;
四、練習與作業
a)
繼續思考并完善狀態更新的操作;
b) 思考如何簡化界面狀態更新的操作;
c)
了解界面設計的方法,熟悉MVC模式的基本含義及使用;
五、小結
a) 測試游戲基本通信;
b)
完善界面狀態更新;
第三十&三十一講:實現基于OpenGL的3D場景渲染框架
一、上節回顧
a)
測試游戲基本通信;
b)
完善界面狀態更新;
二、學習目標
a)OpenGL簡介;
b)OpenGL使用示例;
c)實現場景渲染框架;
d)測試場景渲染框架;
三、教學過程描述
a)
介紹了OpenGL的概念、特點及工作方式;
b)通過win32控制臺的應用程序實現基本的OpenGL圖形的渲染操作和流程;
c)
介紹了如何將之前介紹的OpenGL渲染的相關內容結合起來實現場景渲染框架的具體操作?
d)
介紹了如何測試關于游戲場景的顯示模塊及游戲場景的渲染操作?
四、練習與作業
a)
加深理解OpenGL的使用,熟悉前面提到的關于OpenGL的主要知識點,重點關注坐標變換的相關知識;
b)
熟悉OpenGL中關于貼圖的相關知識;
c) 修改本節中融合部分的相關參數,對比不同的融合因子的融合效果;
d)
思考如何在本節中將光標的位置始終設置在準心的位置;
五、小結
a)OpenGL簡介;
b)OpenGL使用示例;
c)實現場景渲染框架;
d)測試場景渲染框架;
第三十二講:實現3D場景中的文字顯示
一、上節回顧
a)OpenGL簡介;
b)OpenGL使用示例;
c)實現場景渲染框架;
d)測試場景渲染框架;
二、學習目標
a)3D場景文字顯示簡介;
b)實現3D場景文字顯示;
三、教學過程描述
a)
介紹了OpenGL中紋理映射以及顯示列表等相關概念;
b)介紹并實現3D場景中的文字顯示;
四、練習與作業
a)
實現中文字體的顯示;
b)
實現位圖字體的顯示;
五、小結
a)3D場景文字顯示簡介;
b)實現3D場景文字顯示;
第三十三講:實現游戲中輔助信息的顯示
一、上節回顧
a)3D場景文字顯示簡介;
b)實現3D場景文字顯示;
二、學習目標
a)顯示不同顏色的文字;
b)實現游戲輔助信息顯示;
三、教學過程描述
a)
介紹了如何在OpenGL中實現不同顏色的文字顯示,以及如何簡化顏色設置步驟?
b)介紹實現游戲輔助信息的顯示內容;
四、練習與作業
a)
根據本節的內容,思考如何實現將字體的顯示位置設置為鼠標在屏幕上的位置?
b)
思考在OpenGL中還有哪些功能可以使用類似于ColorProxy類的方法實現以簡化使用步驟?
五、小結
a)顯示不同顏色的文字;
b)實現游戲輔助信息顯示;
第三十四講:實現游戲場景中的天空盒
一、上節回顧
a)顯示不同顏色的文字;
b)實現游戲輔助信息顯示;
二、學習目標
a)天空盒簡介;
b)實現游戲背景顯示;
三、教學過程描述
a)
介紹了天空盒的原理;
b)介紹了如何管理貼圖的加載?如何確定貼圖顯示的坐標? 如何將視點限制在場景中?
四、練習與作業
a)
根據本節中提到的地圖文本信息,思考并調研游戲地圖數據編輯的相關方法,作為本節的延伸,實現本游戲基本數據的編輯功能;
五、小結
a)顯示不同顏色的文字;
b)實現游戲輔助信息顯示;
第三十五&三十六講:加載并顯示MD2動畫模型
一、上節回顧
a)天空盒簡介;
b)實現游戲背景顯示;
二、學習目標
a)MD2動畫模型簡介;
b)MD2動畫模型加載;
c)實現MD2模型顯示;
d)實現MD2模型動畫效果;
三、教學過程描述
a)
介紹了MD2模型的概念;
b)介紹了MD2模型文件結構
c)介紹了MD2模型加載步驟及常用操作;
d)介紹了如何將針對MD2模型的相關操作應用到游戲場景中以實現MD2的顯示?
e)介紹了如何將游戲場景中的MD2模型以動畫的效果進行顯示,以及如何設置動畫顯示的幀數?
四、練習與作業
a) 將本節中的相關算法封裝成一個類以滿足關于MD2動畫模型的相關操作;
b)
使用本節的算法加載MD2動畫模型并將模型顯示在游戲場景中;
c)
整理MD2模型以動畫效果進行顯示的相關操作,思考如何提高3D模型的顯示效率;
d)
了解關于3DS模型的相關知識,實現3DS模型的加載以及顯示;
五、小結
a)MD2動畫模型簡介;
b)MD2動畫模型加載;
c)實現MD2模型顯示;
d)實現MD2模型動畫效果;
第三十七&三十八講:加載并顯示MDL動畫模型
一、上節回顧
a)MD2動畫模型簡介;
b)MD2動畫模型加載;
c)實現MD2模型顯示;
d)實現MD2模型動畫效果;
二、學習目標
a)MDL動畫模型簡介;
b)MDL動畫模型加載;
c)封裝MDL模型操作;
d)實現MDL模型顯示;
三、教學過程描述
a)
介紹了MDL模型的概念以及相對于MD2模型的優勢;
b)介紹了MDL模型文件結構
c)介紹了如何將MDL的相關操作封裝以滿足對戰游戲場景中關于MDL模型加載的操作?
e)
介紹了實現MDL模型的實現思路;
四、練習與作業
a)
下載關于MDL模型的制作工具,并通過本節的MDL相關算法加載MDL模型以加速對MDL;
b)
調研并熟悉關于SMD文件的相關知識;
c)調整本節中MDL模型的位置以及上一節中MD2模型的位置,思考如何實現MDL的射擊效果以及MD2中槍倒下的效果?
五、小結
a)MDL動畫模型簡介;
b)MDL動畫模型加載;
c)封裝MDL模型操作;
d)實現MDL模型顯示;
第三十九&四十講:實現模型在3D場景中漫游
一、上節回顧
a)MDL動畫模型簡介;
b)MDL動畫模型加載;
c)封裝MDL模型操作;
d)實現MDL模型顯示;
二、學習目標
a)實現3D向量基本操作;
b)設計3D場景漫游功能;
c)完善3D場景漫游功能;
d)實現3D場景漫游操作;
三、教學過程描述
a)
介紹了在關于向量的應用中,向量一般包括哪些基本的計算或操作?
b)介紹了關于3D場景漫游功能的設計思路;
c)介紹了在上節的攝像機的基礎上,如何通過鼠標和鍵盤的操作來實現場景的漫游功能?
c)
介紹了如何在游戲場景中初始化攝像機的相關參數以及實現視點按鼠標的位置進行移動的操作?
四、練習與作業
a)
如何使用本節中實現的3D向量進行攝像機移動時的坐標變換相關功能?
b)
思考如何在3D向量中實現計算兩向量的水平方向的夾角以及垂直方向上的夾角?
c)
思考如何在游戲場景中生成隨機的視點位置,同時該視點是在非障礙物范圍內(即一個合法的顯示范圍矩形內,該功能主要滿足多玩家初始位置的隨機性)?
五、小結
a)實現3D向量基本操作;
b)設計3D場景漫游功能;
c)完善3D場景漫游功能;
d)實現3D場景漫游操作;
第四十一講:實現玩家發射子彈的動作
一、上節回顧
a)實現3D向量基本操作;
b)設計3D場景漫游功能;
c)完善3D場景漫游功能;
d)實現3D場景漫游操作;
二、學習目標
a)設計玩家數據管理邏輯;
b)實現玩家發射子彈的動作;
三、教學過程描述
a)
介紹了根據游戲及玩家角色相關的介紹,思考游戲進行中的玩家實時數據包括哪些內容?
b)
介紹了關于實現玩家發射子彈的動作的設計思路;
四、練習與作業
a)
思考如何在本節的基礎上豐富子彈發射的動作(該部分內容可先參考關于模型數據包含哪些動作)?b)
思考如何進行子彈與模型之間的碰撞檢測?
五、小結
a)設計玩家數據管理邏輯;
b)實現玩家發射子彈的動作;
第四十二講:實現子彈與模型的碰撞檢測算法
一、上節回顧
a)設計玩家數據管理邏輯;
b)實現玩家發射子彈的動作;
二、學習目標
a)實現3D向量夾角計算;
b)實現碰撞檢測算法;
三、教學過程描述
a)
介紹了如何計算三維空間中的兩個向量之間的夾角?
b)介紹了如何精確的實現子彈與敵人的人物模型之間的碰撞檢測(敵人的人物模型即加載的MD2模型)?
四、練習與作業
a) 修改本節中的碰撞檢測算法,完善人物模型在障礙物背后時的碰撞檢測(本節中沒有考慮子彈與障礙物的碰撞檢測算法);
b)
實現人物模型之間的碰撞檢測;
五、小結
a)實現3D向量夾角計算;
b)實現碰撞檢測算法;
第四十三講:實現子彈與模型的碰撞效果
一、上節回顧
a)實現3D向量夾角計算;
b)實現碰撞檢測算法;
二、學習目標
a)實現子彈爆炸的效果;
b)實現模型倒下的效果;
三、教學過程描述
a)
介紹了如何使用類似于繪制準心的方法實現繪制子彈爆炸的效果?
b)
介紹了如何使用游戲場景中的MD2模型模擬被擊中然后倒下的效果?
四、練習與作業
a)
整理本節中的模型操作,思考如何更方便快捷的管理模型的不同動作的顯示?
b)
思考游戲中的音效應該如何實現?
五、小結
a)實現子彈爆炸的效果;
b)實現模型倒下的效果;
第四十四講:實現游戲場景中的音效
一、上節回顧
a)實現3D向量夾角計算;
b)實現碰撞檢測算法;
二、學習目標
a)實現射擊聲音效果;
b)實現聲音管理邏輯;
三、教學過程描述
a)
介紹了如何在游戲中控制發射子彈時的發出的聲音效果,以及實現聲音的播放?
b) 介紹了使用OpenAL實現聲音管理的邏輯處理;
五、
練習與作業
a) 整理本節中的模型操作,思考如何更方便快捷的管理模型的不同動作的顯示?
b)
思考游戲中的音效應該如何實現?
五、小結
a)實現射擊聲音效果;
b)實現聲音管理邏輯;
第四十五&四十六講:實現對戰游戲的邏輯處理
一、上節回顧
a)實現射擊聲音效果;
b)實現聲音管理邏輯;
二、學習目標
a)
實現隨機生成玩家信息
b) 定義實時數據網絡包結構
c) 服務器端實時數據處理
d) 客戶端實時數據處理
三、教學過程描述
a)
介紹了如何在對戰游戲中生成隨機并且合法的玩家位置等相關信息?
b) 介紹了玩家的實時數據信息以及如何組織并初始化相關的信息?
c)
介紹了服務器端接收到玩家的實時數據后應如何處理以滿足各玩家的實時更新?
d) 介紹了客戶端實時數據處理的操作;
四、 練習與作業
a) 思考如何分別實現游戲服務器端以及游戲客戶端對實時數據的處理?
b) 思考如何修改本節中的包結構以滿足多種游戲實時狀態的改變?
c)
思考對戰游戲的系統測試方案,并修改相關的缺陷和不足;
d) 優化游戲界面
五、小結
a) 實現隨機生成玩家信息
b)
定義實時數據網絡包結構
c) 服務器端實時數據處理
d)
客戶端實時數據處理
第四十七講:系統測試
一、上節回顧
a) 實現隨機生成玩家信息
b)
定義實時數據網絡包結構
c) 服務器端實時數據處理
d) 客戶端實時數據處理
二、學習目標
a) 系統測試簡介
b)
游戲測試方案
三、教學過程描述
a) 介紹了系統測試的定義、系統測試的內容、以及系統測試的分類等相關知識;
b)
介紹了測試本游戲的模塊劃分;
四、 練習與作業
a) 思考如何根據本節中提出的測試方案及相關的方法對系統進行測試;
b)
修改本游戲項目中的缺陷與不足,并完善相應的功能;
五、小結
a) 系統測試簡介
b)
游戲測試方案
第四十八講:游戲開發相關技術介紹
一、上節回顧
a) 系統測試簡介
b)
游戲測試方案
二、學習目標
a) 游戲基本分類
b) 游戲架構設計
三、教學過程描述
a) 介紹了關于游戲的大體分類;
b)
介紹了游戲架構設計的相關內容,包括游戲策劃、游戲模型、以及音效設計等;
四、練習與作業
a)
了解關于MMP類型的游戲;
b) 了解并熟悉游戲腳本的應用(如Python等);
五、小結
a) 游戲基本分類
b)
游戲架構設計
第四十九講:總結課程
一、上節回顧
a)
游戲基本分類
b) 游戲架構設計
二、學習目標
a) (總結)游戲分析與設計
b) (總結)實現網絡底層操作
c)
(總結)實現3D對戰網絡游戲
三、教學過程描述
a) 總結了游戲分析與設計相關的知識點;
b) 總結了實現網絡底層操作相關的知識點;
c) 總結了實現3D對戰網絡游戲相關的知識點;
四、
練習與作業
a) 整理并封裝游戲中關于3D場景模塊的功能,實現3D場景模塊的獨立性(類似于網絡底層dll);
五、小結
a)
(總結)游戲分析與設計
b) (總結)實現網絡底層操作
c) (總結)實現3D對戰網絡游戲
視頻課程請點擊:《基于C/S架構的3D對戰網絡游戲開發視頻教程》