|
-- 會員 / 註冊 --
|
|
|
|
游戲編程權威指南(第4版) ( 簡體 字) |
作者:[美] Mike McShaffry 麥克沙福瑞 David “Rez” Graham 格雷海姆 | 類別:1. -> 遊戲 -> 遊戲程式 |
譯者: |
出版社:人民郵電出版社 | 3dWoo書號: 43683 詢問書籍請說出此書號!【缺書】 NT售價: 495 元 |
出版日:3/1/2016 |
頁數:666 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787115410344 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: |
內容簡介: 游戲編程的用戶需求和發展速度近年來很快,閱讀游戲開發類圖書的需求也越來越大。本書是一本游戲開發指南,是開發、部署、運行商業游戲的讀物。 全書分為4個部分共24章。首部分是游戲編程基礎,主要介紹了游戲編程的定義、游戲架構等基礎知識。第二部分是讓游戲跑起來,主要介紹了初始化和關閉代碼、主循環、游戲主題和用戶界面等。第三部分是核心游戲技術,主要介紹了一些更為復雜的代碼示例,如3D編程、游戲音頻、物理和AI編程等。第四部分是高級知識和綜合應用,主要介紹了網絡編程、多道程序設計和用C#創建工具等,并利用前面所講的知識開發出一款簡單的游戲。 本書適合游戲開發人員、游戲架構設計人員和游戲引擎用戶參考閱讀,也適合想要進入游戲開發領域的讀者閱讀。 |
目錄:第1章 什么是游戲編程 1 1.1 好的方面 1 1.1.1 工作 2 1.1.2 游戲玩家 2 1.1.3 同事 3 1.1.4 工具—軟件開發工具包(SDK) 4 1.1.5 硬件 5 1.1.6 平臺 6 1.1.7 展會 9 1.2 不好的地方 9 1.2.1 游戲編程很難 10 1.2.2 零碎文件 10 1.2.3 那不是bug—而是特性 11 1.2.4 工具 12 1.3 黑暗的一面 13 1.3.1 命中移動的目標 13 1.3.2 加班模式(和加班大餐) 13 1.3.3 呸!胡扯 15 1.3.4 操作系統地獄 15 1.3.5 雇員流動的性質 16 1.4 這一切都是值得的,對嗎 16 第2章 游戲中有什么 18 2.1 游戲架構 18 2.2 使用游戲架構 20 2.3 應用層 22 2.3.1 讀取輸入 22 2.3.2 文件系統和資源緩存 22 2.3.3 內存管理 23 2.3.4 初始化、主循環和關閉 23 2.3.5 其他應用層代碼 24 2.4 游戲邏輯 25 2.4.1 游戲狀態和數據結構 25 2.4.2 物理學和碰撞 26 2.4.3 事件 26 2.4.4 進程管理器 27 2.4.5 命令解釋器 28 2.5 人類玩家的游戲視圖 28 2.5.1 圖形顯示 29 2.5.2 音頻 30 2.5.3 用戶界面表示 31 2.5.4 進程管理器 31 2.5.5 選項 31 2.5.6 多人游戲 31 2.6 AI代理的游戲視圖 31 2.7 網絡游戲架構 32 2.7.1 遠程游戲視圖 33 2.7.2 遠程游戲邏輯 33 2.8 必須使用DirectX嗎 34 2.8.1 DirectX的設計理念 34 2.8.2 Direct3D或OpenGL 35 2.8.3 DirectSound還是 35 2.8.4 DirectInput或自己實現 36 2.9 其他內容 36 2.10 補充書目 36 第3章 拯救了我的編碼趣聞和風格 37 3.1 通用編碼風格 38 3.1.1 大括號 38 3.1.2 一致性 39 3.2 智能代碼設計實踐 40 3.2.1 避免隱藏代碼和重要操作 41 3.2.2 類結構:保持簡單 42 3.2.3 繼承VS.組合 42 3.2.4 變壞的虛函數 43 3.2.5 使用接口類 44 3.2.6 考慮使用工廠 45 3.2.7 封裝變化的組件 46 3.2.8 使用流來初始化對象 46 3.3 智能指針和裸指針 47 3.3.1 引用計數 48 3.3.2 C++的shared_ptr 49 3.4 正確使用內存 52 3.4.1 了解不同類型的內存 53 3.4.2 優化內存訪問 55 3.4.3 內存對齊 56 3.4.4 虛擬內存 57 3.4.5 編寫自己的內存管理器 58 3.5 各種有用的東西 59 3.5.1 一個很棒的隨機數生成器 60 3.5.2 集合的偽隨機遍歷 61 3.5.3 內存池 62 3.6 開發出適合自己的風格 67 3.7 補充書目 68 第4章 生成游戲 69 4.1 一個小動機 69 4.2 創建項目 70 4.2.1 生成配置 70 4.2.2 創建堅不可摧的目錄結構 71 4.2.3 將游戲引擎和工具放在何處 73 4.2.4 設置Visual Studio生成選項 74 4.2.5 多平臺項目 76 4.3 源代碼庫和版本控制 77 4.3.1 微軟Visual SourceSafe的相關歷史 79 4.3.2 Subversion和TortoiseSVN 79 4.3.3 Perforce軟件的Perforce 80 4.3.4 Avid的AlienBrain 81 4.3.5 使用源代碼控制分支 81 4.4 生成游戲:一門黑色藝術 84 4.4.1 自動化生成 85 4.4.2 生成計算機 85 4.4.3 自動化生成腳本 85 4.5 創建生成腳本 87 4.5.1 標準生成 87 4.5.2 里程碑生成 88 4.5.3 多個項目和共享代碼 90 4.5.4 最后的建議 91 第5章 游戲初始化和關閉 92 5.1 初始化101 92 5.2 C++初始化的一些陷阱 93 5.3 游戲的應用層 95 5.3.1 WinMain:Windows入口點 95 5.3.2 應用層:GameCodeApp 97 5.3.3 InitInstance():檢查系統資源 97 5.3.4 檢查游戲的多個實例 98 5.3.5 檢查硬盤空間 99 5.3.6 檢查內存 99 5.3.7 計算CPU速度 100 5.3.8 你擁有的是個垃圾袋嗎 101 5.3.9 初始化資源緩存 101 5.3.10 加載文本字符串 102 5.3.11 腳本管理器和事件系統 104 5.3.12 初始化DirectX并創建 窗口 104 5.3.13 創建游戲邏輯和游戲視圖 105 5.3.14 設置游戲保存目錄 105 5.3.15 預加載從緩存中選定的 資源 106 5.4 收尾工作:干凈漂亮地退出 107 5.4.1 我怎樣才能離開呢 107 5.4.2 強制關閉模態對話框 109 5.4.3 關閉游戲 110 5.4.4 游戲機怎么樣 110 5.5 進入和退出 111 第6章 游戲主體和組件架構 112 6.1 初次嘗試創建游戲主體 112 6.2 組件架構 115 6.3 創建主體和組件 116 6.4 定義主體和組件 120 6.5 存儲并訪問主體 122 6.6 將它們組合起來 123 6.7 數據共享 124 6.7.1 直接訪問 125 6.7.2 事件 125 6.7.3 兩全其美 126 第7章 主循環的控制 127 7.1 組織主循環 127 7.1.1 硬編碼的更新 127 7.1.2 多線程主循環 128 7.1.3 一種混合技術 129 7.1.4 簡單的協同式多任務處理器 131 7.1.5 非常簡單的進程示例:DelayProcess 135 7.1.6 Process派生類的使用 137 7.2 良好地適應操作系統 137 7.3 使用DirectX 11框架 138 7.3.1 渲染和呈現顯示 138 7.3.2 用于更新和渲染的回調函數 139 7.4 我現在可以制作游戲了嗎 141 第8章 游戲數據的加載與緩存 142 8.1 游戲資源:格式和存儲要求 143 8.1.1 3D對象網格和環境 143 8.1.2 動畫數據 145 8.1.3 地圖/關卡數據 146 8.1.4 紋理數據 146 8.1.5 位圖顏色深度 147 8.1.6 聲音和音樂數據 149 8.1.7 視頻和預渲染的過場動畫 150 8.2 資源文件 152 8.2.1 將資源打包到一個文件中 153 8.2.2 打包資源的其他好處 153 8.2.3 數據壓縮和性能 154 8.2.4 Zlib:開源壓縮 154 8.3 資源高速緩存 158 8.3.1 IResourceFile接口 161 8.3.2 ResHandle:跟蹤加載的資源 161 8.3.3 IResourceLoader接口和DefaultResourceLoader 163 8.3.4 ResCache:簡單的資源高速緩存 163 8.3.5 將資源緩存入DirectX等 169 8.3.6 世界設計和高速緩存預測 170 8.4 我的緩存不夠用了 173 第9章 輸入設備編程 174 9.1 獲取設備狀態 174 9.2 使用XInput或DirectInput 177 9.3 一些安全提示 179 9.4 使用雙軸控制器 182 9.4.1 捕獲桌面上的鼠標 182 9.4.2 使用鼠標拖拽 184 9.5 使用游戲控制器 186 9.5.1 非靈敏區 187 9.5.2 正常輸入 189 9.5.3 單桿、雙桿、紅色拉桿和藍色拉桿 190 9.5.4 增加控制值 190 9.6 使用鍵盤 191 9.6.1 Mike的鍵盤窺探器 191 9.6.2 GetAsyncKeyState()和其他函數 195 9.6.3 處理Windows中的Alt鍵 195 9.7 什么?沒有跳舞毯 195 第10章 用戶界面編程 197 10.1 DirectX的文本助手和對話框資源管理器 197 10.2 人類的游戲視圖 198 10.3 WASD移動控制器 206 10.4 屏幕元素 208 10.5 自定義的MessageBox對話框 210 10.6 模態對話框 215 10.7 控件 218 10.8 控件識別 219 10.9 命中測試和焦點順序 221 10.10 控件狀態 222 10.11 更多控件屬性 223 10.11.1 熱鍵 223 10.11.2 工具提示 223 10.11.3 上下文相關幫助 224 10.11.4 可拖拽 224 10.11.5 聲音和動畫 224 10.12 最后的用戶界面提示 225 第11章 游戲事件管理 226 11.1 游戲事件 226 11.1.1 事件和事件數據 227 11.1.2 事件監聽器委托 230 11.1.3 事件管理器 231 11.1.4 示例:將所有內容整合在一起 238 11.2 哪些游戲事件是重要的 239 11.3 事件和進程的區別 241 11.4 補充書目 241 第12章 使用Lua編寫腳本 242 12.1 游戲編程語言的簡史 242 12.1.1 匯編語言 243 12.1.2 C/C++ 244 12.1.3 腳本語言 245 12.2 使用腳本語言 246 12.2.1 快速原型法 246 12.2.2 專注于設計 247 12.2.3 速度和內存成本 247 12.2.4 它們之間的界限是什么 247 12.3 腳本語言集成策略 248 12.3.1 自己進行編寫 248 12.3.2 使用現有的語言 248 12.3.3 選擇一種腳本語言 249 12.3.4 Python 249 12.3.5 Lua 249 12.4 Lua速成課程 250 12.4.1 注釋 250 12.4.2 變量 250 12.4.3 函數 252 12.4.4 表 253 12.4.5 流程控制 255 12.4.6 操作符 257 12.4.7 接下來是什么 257 12.5 Lua中的面向對象編程 258 12.5.1 元表 259 12.5.2 創建一個簡單的類抽象 261 12.6 內存管理 263 12.7 將Lua綁定到C++ 263 12.7.1 Lua C API 263 12.7.2 tolua++ 263 12.7.3 luabind 264 12.7.4 LuaPlus 264 12.8 LuaPlus速成課程 264 12.8.1 LuaState 264 12.8.2 LuaObject 265 12.8.3 表 266 12.8.4 全局 267 12.8.5 函數 268 12.8.6 從Lua調用C++函數 269 12.9 將所有內容整合在一起 271 12.9.1 管理Lua狀態 271 12.9.2 腳本導出 273 12.9.3 進程系統 274 12.9.4 事件系統 282 12.9.5 腳本組件 287 12.10 Lua開發和調試 289 12.11 結語 289 12.12 補充書目 289 第13章 游戲音頻 290 13.1 聲音的工作原理 290 13.1.1 數字錄音和重現 291 13.1.2 聲音文件 293 13.1.3 線程和同步的簡介 293 13.2 游戲語音系統架構 294 13.2.1 聲音資源和句柄 295 13.2.2 IAudioBuffer接口和AudioBuffer類 303 13.2.3 IAudio接口和Audio類 305 13.2.4 DirectSound實現 308 13.2.5 聲音進程 317 13.2.6 啟動音效 321 13.3 其他技術難題 322 13.3.1 聲音和游戲對象 322 13.3.2 定時和同步 322 13.3.3 混合問題 324 13.4 一些隨記 326 13.4.1 數據驅動的聲音設置 326 13.4.2 背景環境聲音和音樂 327 13.4.3 語音 328 13.5 結語 330 第14章 3D圖形基礎 331 14.1 3D圖形流水線 331 14.2 3D數學101 332 14.2.1 坐標和坐標系 333 14.2.2 向量數學 335 14.3 C++數學類 340 14.3.1 向量類 340 14.3.2 矩陣數學 341 14.3.3 四元數數學 351 14.3.4 變換 358 14.3.5 幾何體 360 14.3.6 光照、法線和顏色 361 14.3.7 材質 363 14.3.8 貼有紋理的頂點 365 14.3.9 紋理 365 14.3.10 二次采樣 365 14.3.11 mip映射 367 14.3.12 ID3D11Device和ID3D11DeviceContext簡介 367 14.3.13 在D3D11中加載紋理 368 14.3.14 三角形網格 370 14.4 你還在嗎 373 第15章 3D頂點和像素著色器 374 15.1 頂點著色器和著色器語法 375 15.2 編譯頂點著色器 379 15.3 頂點著色器的C++輔助類 380 15.4 像素著色器 386 15.5 像素著色器的C++輔助類 387 15.6 使用著色器輔助類進行渲染 390 15.7 著色器—這只是一個開始 391 15.8 補充書目 391 第16章 3D場景 392 16.1 場景圖基礎 392 16.1.1 ISceneNode接口類 392 16.1.2 SceneNodeProperties和 RenderPass 394 16.1.3 SceneNode—一切都是從這里開始的 396 16.1.4 Scene類 401 16.2 特殊的場景圖節點 408 16.2.1 獨立渲染通道的實現 408 16.2.2 一個簡單的攝像機 411 16.2.3 在場景中放入燈光 413 16.2.4 天空的渲染 416 16.2.5 在場景中使用網格 420 16.3 遺漏的內容 424 16.4 還沒滿足 425 16.5 補充書目 425 第17章 碰撞和簡單的物理學 426 17.1 物理學中的數學知識 427 17.1.1 米、英尺、肘尺還是Kellicam 427 17.1.2 距離、速度和加速度 427 17.1.3 質量、加速度和力 428 17.1.4 轉動慣量、角速度和扭矩 431 17.1.5 距離和交集的計算 431 17.2 選擇一種物理SDK 432 17.3 對象屬性 434 17.4 碰撞體 435 17.4.1 良好的碰撞幾何體的要求 436 17.4.2 可見幾何體VS碰撞幾何體 437 17.4.3 人類角色的碰撞體 437 17.4.4 特殊對象:樓梯、門道和樹 439 17.5 碰撞系統的使用 439 17.6 集成一個物理SDK 441 17.6.1 Bullet SDK的組件 444 17.6.2 初始化 445 17.6.3 關閉 446 17.6.4 物理系統的更新 447 17.6.5 創建簡單的物理對象 449 17.6.6 凸面網格的創建 451 17.6.7 觸發器的創建 452 17.6.8 力和力矩的應用 453 17.6.9 物理調試渲染器 454 17.6.10 接收碰撞事件 455 17.6.11 物理SDK集成的最后內容 457 17.7 等一下,我還有話要說 458 第18章 游戲AI簡介 459 18.1 AI技術 459 18.1.1 硬編碼AI 460 18.1.2 隨機化 461 18.1.3 加權隨機 462 18.2 有限狀態機 463 18.3 決策樹 467 18.4 模糊邏輯 471 18.5 效用理論 474 18.6 以目標為導向的行動計劃 477 18.7 路徑查找 478 18.7.1 A* (A-Star) 479 18.7.2 動態規避 481 18.8 補充書目 482 第19章 多玩家游戲的網絡編程 483 19.1 互聯網的工作原理 483 19.1.1 Winsock還是Berkeley 484 19.1.2 Internet地址 484 19.1.3 域名系統 486 19.1.4 有用的程序和文件 487 19.2 套接字API 488 19.2.1 套接字效用函數 488 19.2.2 域名服務(DNS)函數 490 19.2.3 套接字初始化和關閉 491 19.2.4 創建套接字和設置套接字選項 491 19.2.5 服務器函數 495 19.2.6 套接字讀取和寫入 498 19.3 使用套接字制作一款多玩家游戲 499 19.3.1 數據包類 500 19.3.2 核心套接字類 501 19.3.3 用于監聽的套接字類 506 19.3.4 套接字管理器類 508 19.4 核心客戶端類 515 19.5 核心服務器端類 516 19.6 將套接字連接到事件系統中 517 19.7 如果真的這么簡單就好了 522 第20章 多道程序設計簡介 523 20.1 多道程序設計是什么 523 20.2 創建線程 525 20.3 進程同步 527 20.3.1 測試與置位、信號量和互斥 528 20.3.2 Windows臨界區 528 20.4 有趣的線程問題 530 20.5 線程安全 531 20.6 GameCode4中的多線程類 531 20.6.1 RealtimeProcess類 532 20.6.2 從實時進程發送事件 534 20.6.3 接收實時進程中的事件 537 20.7 Zip文件的后臺解壓縮 538 20.8 進一步工作 540 20.9 關于硬件 541 20.10 關于未來 541 20.11 補充書目 542 第21章 “茶壺大戰”游戲 543 21.1 制作游戲 544 21.2 核心類的創建 545 21.2.1 茶壺大戰的應用層 545 21.2.2 游戲邏輯 546 21.2.3 人類玩家的游戲視圖 553 21.3 游戲事件 556 21.4 游戲玩法 556 21.4.1 關卡的加載 557 21.4.2 主體管理器 558 21.4.3 發送和接收事件 560 21.4.4 進程 562 21.5 留給讀者的練習 563 第22章 C#中簡單的游戲編輯器 565 22.1 為什么要使用C# 565 22.2 如何將編輯器組合起來 565 22.3 編輯器架構 566 22.3.1 應用層 566 22.3.2 編輯器的邏輯類 567 22.3.3 編輯器視圖 568 22.3.4 訪問游戲引擎的函數 569 22.3.5 創建DLL 578 22.3.6 編輯器架構的封裝 578 22.4 C#編譯器應用程序 579 22.4.1 托管代碼和非托管代碼之間的區別 580 22.4.2 NativeMethods類 581 22.4.3 Program類 582 22.4.4 MessageHandler類 583 22.5 C#編輯器用戶界面 585 22.5.1 EditorForm類 585 22.5.2 ActorComponentEditor類 595 22.6 后續工作 603 22.7 補充材料 604 第23章 對游戲進行調試和分析 605 23.1 處理錯誤的藝術 606 23.2 調試基礎 607 23.2.1 調試器的使用 609 23.2.2 安裝Windows符號文件 611 23.2.3 對全屏游戲進行調試 612 23.2.4 遠程調試 613 23.2.5 對小存儲器轉儲文件(Minidump)進行調試 615 23.3 圖形調試和著色器調試 616 23.4 調試技術 617 23.4.1 調試是一次實驗 617 23.4.2 重現bug 619 23.4.3 降低復雜度 620 23.4.4 設置下一條語句 620 23.4.5 匯編級調試 621 23.4.6 給代碼添加調料 623 23.4.7 提取調試信息 624 23.4.8 Lint和其他代碼分析器 625 23.4.9 Nu-Mega的BoundsChecker和運行時分析器 625 23.4.10 消失的bug 625 23.4.11 調整數值 626 23.4.12 caveman調試 626 23.4.13 當一切方法都失敗時 627 23.5 創建錯誤日志系統 628 23.6 不同類型的bug 633 23.6.1 內存泄漏和堆損壞 634 23.6.2 游戲數據損壞 637 23.6.3 堆棧損壞 638 23.6.4 剪切和粘貼bug 639 23.6.5 空間不足 639 23.6.6 只在發布模式(Release Mode)中出現的bug 640 23.6.7 惹是生非的多線程 640 23.6.8 奇怪的bug 641 23.7 性能分析 642 23.7.1 性能的測量 642 23.7.2 代碼的優化 642 23.7.3 折中方案 643 23.7.4 過度優化 644 23.8 結束小思 644 23.9 補充書目 644 第24章 駛向結束 645 24.1 問題的整理 645 24.1.1 質量 646 24.1.2 代碼 650 24.1.3 內容 653 24.2 應付大麻煩 655 24.2.1 項目進度嚴重拖延 655 24.2.2 人事相關問題 661 24.2.3 競爭對手會置你于死地 662 24.2.4 到底有沒有出路 663 24.2.5 最后一個建議: 不要驚慌 664 24.3 光明就在前方—畢竟這不是一場訓練 664 24.3.1 測試存檔 664 24.3.2 補丁build或產品演示 665 24.3.3 事后分析 665 24.3.4 如何利用你的時間 666 |
序: |
|