作 者:[美] Robert Nystrom 尼斯卓姆 著 GPP翻譯組 譯
定 價:69
出 版 社:人民郵電出版社
出版日期:2016年09月01日
頁 數:306
裝 幀:簡裝
ISBN:9787115426888
前EA傑出遊戲工程師經驗凝結4大類13種遊戲編程模式精彩呈現多數遊戲程序員所面臨的挑戰就是實現他們的遊戲。許多遊戲在其高度復雜的代碼庫中折戟沉沙,沒能問世。本書是為解決此問題而生。本書作者在多年的遊戲開發工作中,收集了許多已經證實的設計模式來幫助解構、重構以及優化遊戲。通過閱讀本書,你將深刻理解經典的設計模式是如何應用於遊戲之中的,學會如何編寫一個健壯的遊戲循環、如何應用組件來組織實體,並利用CPU緩存來提升遊戲性能。本書包含的4大類13種遊戲編程模式包括:序列型模式● 雙緩衝● 遊等
●目錄篇 概述章 架構,性能和遊戲 31.1 什麼是軟件架構 31.1.1 什麼是好的軟件架構 31.1.2 你如何做出改變 41.1.3 我們如何從解耦中受益 51.2 有什麼代價 51.3 性能和速度 61.4 壞代碼中的好代碼 71.5 尋求平衡 81.6 簡單性 91.7 準備出發 9第2篇 再探設計模式第2章 命令模式 132.1 配置輸入 142.2 關於角色的說明 162.3 撤銷和重做 182.4 類風格化還是函數風格化 212.5 參考 22第3章 &nbs模式 233.1 森林之樹 233.2 一千個實例 253.3 &nbs模式 263.4 扎根之地 263.5 性能表現如何 303.6 參考 31第4章 觀察者模式 334.1 解鎖成就 334.2 這一切是怎麼工作的 344.2.1 觀察者 354.2.2 被觀察者 354.2.3 可被觀察的物理模塊 374.3 它太慢了 384.4 太多的動態內存分配 394.4.1 鏈式觀察者 394.4.2 鏈表節點池 424.5 餘下的問題 434.5.1 銷毀被觀察者和觀察者 434.5.2 不用擔心,我們有GC 444.5.3 接下來呢 444.6 觀察者模式的現狀 454.7 觀察者模式的未來 46第5章 原型模式 475.1 原型設計模式 475.1.1 原型模式效果如何 505.1.2 生成器函數 515.1.3 模板 515.1.4 頭等公民類型(First-class types) 525.2 原型語言範式 525.2.1 Self 語言 535.2.2 結果如何 545.2.3 JavaScript如何 555.3 原型數據建模 57第6章 單例模式 616.1 單例模式 616.1.1 確保一個類隻有一個實例 616.1.2 提供一個全局指針以訪問專享實例 626.2 使用情境 636.3 後悔使用單例的原因 656.3.1 它是一個全局變量 656.3.2 它是個畫蛇添足的解決方案 666.3.3 延遲初始化剝離了你的控制 676.4 那麼我們該怎麼做 686.4.1 看你究竟是否需要類 686.4.2 將類為單一實例 706.4.3 為實例提供便捷的訪問方式 716.5 剩下的問題 73第7章 狀態模式 757.1 我們曾經相遇過 757.2 救星:有限狀態機 787.3 枚舉和分支 797.4 狀態模式 827.4.1 一個狀態接口 827.4.2 為每一個狀態定義一個類 837.4.3 狀態委托 847.5 狀態對像應該放在哪裡呢 847.5.1 靜態狀態 847.5.2 實例化狀態 857.6 進入狀態和退出狀態的行為 867.7 有什麼收獲嗎 887.8 並發狀態機 887.9 層次狀態機 897.10 下推自動機 917.11 現在知道它們有多有用了吧 92第3篇 序列型模式第8章 雙緩衝 958.1 動機 958.1.1 計算機圖形繫統是如何工作的(概述) 958.1.2 幕,場 968.1.3 回到圖形上 978.2 模式 988.3 使用情境 988.4 注意事項 988.4.1 交換本身需要時間 988.4.2 我們必須有兩份緩衝區 998.5 示例代碼 998.5.1 並非隻針對圖形 1028.5.2 人工非智能 1028.5.3 緩存這些巴掌 1068.6 設計決策 1078.6.1 緩衝區如何交換 1078.6.2 緩衝區的粒度如何 1098.7 參考 110第9章 遊戲循環 1119.1 動機 1119.1.1 CPU探秘 1119.1.2 事件循環 1129.1.3 時間之外的世界 1139.1.4 秒的長短 1139.2 模式 1149.3 使用情境 1149.4 使用須知 1149.5 示例代碼 1159.5.1 跑,能跑多快就跑多快 1159.5.2 小睡一會兒 1159.5.3 小改動,大進步 1169.5.4 把時間追回來 1189.5.5 留在兩幀之間 1199.6 設計決策 1209.6.1 誰來控制遊戲循環,你還是平臺 1219.6.2 你如何解決能量耗損 1219.6.3 如何控制遊戲速度 1229.7 參考 1230章 更新方法 12510.1 動機 12510.2 模式 12710.3 使用情境 12810.4 使用須知 12810.4.1 將代碼劃分至單幀之中使其變得更加復雜 12810.4.2 你需要在每幀結束前存儲遊戲狀態以便下一幀繼續 12810.4.3 所有對像都在每幀進行模擬,但並非真正同步 12910.4.4 在更新期間修改對像列表時必須謹慎 12910.5 示例代碼 13010.5.1 子類化實體 13210.5.2 定義實體 13210.5.3 逝去的時間 13510.6 設計決策 13610.6.1 update方法依存於何類中 13610.6.2 那些未被利用的對像該如何處理 13710.7 參考 137第4篇 行為型模式1章 字節碼 14111.1 動機 14111.1.1 魔法大戰 14111.1.2 先數據後編碼 14211.1.3 解釋器模式 14211.1.4 虛擬機器碼 14511.2 字節碼模式 14511.3 使用情境 14511.4 使用須知 14611.4.1 你需要個前端界面 14611.4.2 你會想念調試器的 14711.5 示例 14711.5.1 API 14711.5.2 指令集 14811.5.3 棧機 14911.5.4 組合就能得到行為 15311.5.5 一個虛擬機 15511.5.6 語法轉換工具 15511.6 設計決策 15711.6.1 指令如何訪問堆棧 15711.6.2 應該有哪些指令 15811.6.3 值應當如何表示 15811.6.4 如何生成字節碼 16111.7 參考 1622章 子類沙盒 16312.1 動機 16312.2 沙盒模式 16512.3 使用情境 16512.4 使用須知 16512.5 示例 16612.6 設計決策 16812.6.1 需要提供什麼操作 16812.6.2 是直接提供函數,還是由包含它們的對像提供 16912.6.3 基類如何獲取其所需的狀態 17012.7 參考 1733章 類型對像 17513.1 動機 17513.1.1 經典的面向對像方案 17513.1.2 一個類的類 17713.2 類型對像模式 17813.3 使用情境 17913.4 使用須知 17913.4.1 類型對像必須手動跟蹤 17913.4.2 為每個類型定義行為更困難 17913.5 示例 18013.5.1 構造函數:讓類型對像更加像類型 18113.5.2 通過繼承共享數據 18313.6 設計決策 18513.6.1 類型對像應該封裝還是暴露 18613.6.2 持有類型對像如何創建 18713.6.3 類型能否改變 18713.6.4 支持何種類型的派生 18813.7 參考 189第5篇 解耦型模式4章 組件模式 19314.1 動機 19314.1.1 難題 19414.1.2 解決難題 19414.1.3 寬松的末端 19414.1.4 捆綁在一起 19514.2 模式 19614.3 使用情境 19614.4 注意事項 19614.5 示例代碼 19714.5.1 一個龐大的類 19714.5.2 分割域 19814.5.3 分割其餘部分 20014.5.4 重構Bjorn 20214.5.5 刪掉Bjorn 20414.6 設計決策 20614.6.1 對像如何獲得組件 20614.6.2 組件之間如何傳遞信息 20714.7 參考 2105章 事件隊列 21115.1 動機 21115.1.1 用戶圖形界面的事件循環 21115.1.2 中心事件總線 21215.1.3 說些什麼好呢 21315.2 事件隊列模式 21515.3 使用情境 21515.4 使用須知 21515.4.1 中心事件隊列是個全局變量 21615.4.2 遊戲世界的狀態任你掌控 21615.4.3 你會在反饋繫統循環中繞圈子 21615.5 示例代碼 21715.5.1 環狀緩衝區 21915.5.2 彙總請求 22215.5.3 跨越線程 22315.6 設計決策 22415.6.1 入隊的是什麼 22415.6.2 誰能從隊列中讀取 22415.6.3 誰可以寫入隊列 22515.6.4 隊列中對像的生命周期是什麼 22615.7 參考 2276章 服務定位器 22916.1 動機 22916.2 服務定位器模式 23016.3 使用情境 23016.4 使用須知 23116.4.1 服務必須被定位 23116.4.2 服務不知道被誰定位 23116.5 示例代碼 23116.5.1 服務 23116.5.2 服務提供器 23216.5.3 簡單的定位器 23216.5.4 空服務 23316.5.5 日志裝飾器 23516.6 設計決策 23616.6.1 服務是如何被定位的 23616.6.2 當服務不能被定位時發生了什麼 23916.6.3 服務的作用域多大 24016.7 其他參考 241第6篇 優化型模式7章 數據局部性 24517.1 動機 24517.1.1 數據倉庫 24617.1.2 CPU的托盤 24717.1.3 等下,數據即性能 24817.2 數據局部性模式 24917.3 使用情境 24917.4 使用須知 25017.5 示例代碼 25017.5.1 連續的數組 25117.5.2 包裝數據 25517.5.3 熱/冷分解 25817.6 設計決策 26017.6.1 你如何處理多態 26017.6.2 遊戲實體是如何定義的 26117.7 參考 2638章 髒標記模式 26518.1 動機 26518.1.1 局部變換和世界變換 26618.1.2 緩存世界變換 26718.1.3 延時重算 26818.2 髒標記模式 26918.3 使用情境 26918.4 使用須知 27018.4.1 延時太長會有代價 27018.4.2 必須保證每次狀態改動時都設置髒標記 27118.4.3 必須在內存中保存上次的衍生數據 27118.5 示例代碼 27118.5.1 未優化的遍歷 27218.5.2 讓我們“髒”起來 27318.6 設計抉擇 27518.6.1 何時清除髒標記 27518.6.2 髒標記追蹤的粒度多大 27618.7 參考 2769章 對像池 27719.1 動機 27719.1.1 碎片化的害處 27719.1.2 二者兼顧 27819.2 對像池模式 27819.3 使用情境 27919.4 使用須知 27919.4.1 對像池可能在閑置的對像上浪費內存 27919.4.2 任意時刻處於存活狀態的對像數目恆定 27919.4.3 每個對像的內存大小是固定的 28019.4.4 重用對像不會被自動清理 28119.4.5 未使用的對像將占用內存 28119.5 示例代碼 28119.6 設計決策 28719.6.1 對像是否被加入對像池 28719.6.2 誰來初始化那些被重用的對像 28819.7 參考 290第20章 空間分區 29120.1 動機 29120.1.1 戰場上的 29120.1.2 繪制戰線 29220.2 空間分區模式 29320.3 使用情境 29320.4 使用須知 29320.5 示例代碼 29320.5.1 一張方格紙 29420.5.2 相連單位的網格 29420.5.3 進入戰場 29620.5.4 刀光劍影的戰鬥 29720.5.5 衝鋒陷陣 29820.5.6 近在咫尺,短兵相接 29920.6 設計決策 30220.6.1 分區是層級的還是扁平的 30220.6.2 分區依賴於對像集合嗎 30220.6.3 對像隻存儲在分區中嗎 30420.7 參考 305
遊戲開發一直是熱門的領域,掌握良好的遊戲編程模式是開發人員的應備技能。本書細致地講解了遊戲開發需要用到的各種編程模式,並提供了豐富的示例。全書共分20章,通過三大部分內容全面介紹了與遊戲編程模式相關的各類知識點。首部分介紹了基礎知識和框架;第二部分深入探索設計模式,並介紹了模式與遊戲開發之間的關聯;第三部分介紹了13種有效的遊戲設計模式。本書提供了豐富的代碼示例,通過理論和代碼示例相結合的方式幫助讀者更好地學習。無論是遊戲領域的設計人員、開發人員,還是想要進入遊戲開發領域的學生和普通程序員,都可以閱讀本書。
[美] Robert Nystrom 尼斯卓姆 著 GPP翻譯組 譯
Robert Nystrom是一位擁有2 0 年以上職業編程經驗的開發者,而他在其中大概一半的時間從事遊戲開發。在藝電(El e c t r o n i c Arts)的8年時間裡,他曾參與勁爆美式足球(Madden)繫列這樣龐大的項目,也曾投身於亨利·海茨沃斯大冒險(Henry Hatsworth in the Puzzling Adventure)這樣稍小規模的遊戲開發之中。他所開發的遊戲遍及PC、GameCube、PS2、XBox、X360以及DS平臺。但他引以為傲的,是為開發者們提供了開發工具和共享庫。他熱衷於尋求易用的、漂亮的代碼來延伸和增強開發者們的創造力。Robert與他的妻子和等