Java遊戲高級編程

Java遊戲高級編程

《Java遊戲高級編程》是2005年8月清華大學出版社出版的一本圖書,作者是[美]David Wallace Croft。

基本介紹

  • 書名:Java遊戲高級編程——遊戲開發經典叢書
  • 作者:[美]David Wallace Croft
  • 譯者:彭暉
  • ISBN:7302110832
  • 定價:58元
  • 出版社清華大學出版社
  • 出版時間:2005年8月
  • 開本:16
  • 印刷時間:2005-8第1次印刷
前言,內容簡介,編輯推薦,目錄,

前言

花代價所換來的一點才智,抵過別人傳授的數倍不止。
Java遊戲高級編程
—— 班傑明?富蘭克林
本書針對的是那些想使用最新的高性能技術,創建面向Web和桌面的複雜2D計算機遊戲的Java程式設計師。本書循序漸進地介紹了一個可重用的動畫庫,每一章都依賴於前面的一些章節。在需要說明這些主題的地方,都詳細地介紹了每一個新庫類的原始碼,並且給出了實際使用這些類的示例遊戲。免費許可使您可以直接修改和調整庫代碼和示例遊戲,開發自己的遊戲程式。
目的
本書也可取名為《現代Java遊戲編程》。在以前出版的Java遊戲編程的書籍中介紹的很多技術和主題,已被Java程式語言和它的高級類庫所淘汰。這包括像執行緒管理、事件管理、圖形用戶界面、網路通信、持久性和部署等方面。在本書中,我對這些變更作了適當的注釋,並簡要地對這些技術作了一些對比。
雖然通過將每一幀中需要重繪像素的數量最小化就可以在Java中創建高速的動畫,但是在最近發布的Java程式語言的1.4版中引入的新類,又提供了通過可移植方式直接訪問視頻硬體的方法。正如在本書中介紹的一樣,即使每一幀中需要更新的像素很多,也可以實現高速的幀速率。在這裡介紹了一個示例程式,用來演示在真彩色高解析度模式中,成功地將全螢幕動畫和顯示器75Hz的刷新率同步。
儘管本書最初的設計是面向遊戲,但是讀者應該知道這裡介紹的技術也可以用在其他套用方面,包括廣告和仿真。嵌在Web頁面中的動畫調幅廣告applet會立即閃現在您的大腦中。調幅廣告可以使用強大的通用程式語言(例如Java)編寫的這個事實,充分發掘它們超越動畫的輔助功能的潛能,包括活動數據連線。在仿真領域,學生和科學家都可以從可視化上獲益。當這些模型使用Java表示的時候,用戶就可以與它們進行互動、更改參數並觀察新的結果。
讀者對象
本書專門針對具有豐富經驗、正準備和渴望將他們獨特的遊戲設計思想轉換為部署實體的Java開發人員。對這些讀者而言,從想了解有趣的遊戲特定邏輯以來,一直在學習Java程式語言和實現基本的基礎結構代碼。
同時,這些Java高級開發人員希望詳細地了解可能會影響遊戲性能的可重用庫中的最佳化選項。在介紹遊戲庫和本書示例遊戲中的這些原始碼時,我假定讀者已經掌握了一些基本的主題,例如Java程式語言、面向對象的編程(Object Oriented Programming,OOP)技術、圖形用戶界面(Graphical User Interface,GUI)組件庫,以及一些設計模式等。
範圍
本書簡要(沒有深入地)介紹了那些雖然必需但又不是專門用於Java遊戲編程的技術。這包括通用的開放原始碼開發工具和通用的標準以及套用編程接口(API),這些都是很多經驗豐富的Java遊戲程式設計師已經使用過的技術。在書中,還提供了在這些方面需要進一步閱讀的參考書目。
本書介紹的很多可重用庫都利用了在核心Java平台里可用的最新API、當前的J2SE 1.4版。本書沒有介紹那些過時的API,例如AWT(Abstract Window Toolkit)。相反,深入地研究了套用現代API的具體技術,包括Java遊戲編程用於動畫設計的Swing。
除了Java 2D和Image I/O API以外,Java Media API中絕大部分API都沒有在本書中介紹,因為我考慮到它們在遊戲開發中會有一些限制。在遊戲中使用Java 3D、JMF(Java Media Framework)或者Java Speech API,就強制玩家下載安裝一個可選包和它的本地代碼實現。我相信這種附加的步驟將會使很多潛在的玩家退縮,尤其是那些遇到安裝問題和下載延遲問題的玩家。儘管已經對J2SE核心庫的一部分進行了安裝,但是Java Sound API仍然需要一個soundbank檔案,這個檔案對有些作業系統而言是默認包含在Java運行庫環境(JRE)發布中的,而對Windows而言則不是。Java共享數據工具包(Java Shared Data Toolkit,JSDT)API,儘管也可以在網路遊戲中使用,但是它們好像已經被廢止了。我在遊戲編程里,還沒有發現確實需要使用Java高級圖像(Java Advanced Imaging,JAI)的地方。
本書並沒有迴避將Java與平台專用代碼混合的Java本地接口(JNI)API的使用,但是也不鼓勵這樣使用。本書中給出的所有代碼都是用純粹、可移植的Java語言編寫的,它們能夠在所有安裝有Java虛擬機的平台上運行。作為一個開發人員,我發現不使用定製的本地庫也可以實現高性能。作為一個玩家,我更加喜歡用純Java編寫的遊戲,因為我不必因為安全風險而煩惱,並且我知道遊戲將會運行在我喜歡的平台上,而不管這是個什麼平台。
本書沒有介紹使用Java 2 Micro Edition(J2ME)平台進行Java遊戲開發。我希望像摩爾定律中描述的那樣,硬體性能的快速發展能使J2ME很快過時。如今的手持PDA使用的微處理器的性能已經與3年以前使用的最好計算機的處理器性能一樣強大了。現在在PDA上安裝J2SE和運行Swing應用程式已經成為可能。如果在近幾年內看到J2EE運行在手錶上,我將不會感到驚奇。
在學習後面的關於多玩家聯網模式的相關章節時,確實需要讀者具有一些J2EE的知識。然而,這也限制使用Servlet API進行開發。更為複雜的J2EE API(例如Enterprise Java Beans(EJBs))的使用方法,本書並沒有進行介紹。所有示例的網路遊戲都會運行在一個簡單的servlet容器以內,並且也不需要安裝一個完全的套用伺服器。

內容簡介

在第1章“配置開發環境”中,我向讀者介紹了將要在整本書中使用的代碼庫。描述了這個庫的設計,並給出了編譯示例遊戲的說明。可能會在遊戲開發環境中使用的一些附加代碼、圖形和音頻檔案,也在本章確定了下來,還介紹了軟體開發的一些流行工具。以模板的形式給出了一個演示Java遊戲編程基礎知識的遊戲示例。
在第2章“部署框架”中,我們關注的重點是在可以安裝在多種不同類型的平台上的一個框架中部署遊戲。在動畫執行緒管理技術的相關內容中,介紹了一個被廣泛使用的框架接口以及applet生命周期。在對適合於遊戲的不同發布而進行不同部署的選項進行了一個簡要的回顧以後,給出了允許遊戲部署在不同開發環境中而不需要任何修改的一個抽象層的原始碼示例。
在第3章“Swing動畫”中,介紹了一個基於Swing的動畫庫,這個動畫庫會在整本書中使用。這一章主要考慮的問題是動畫的性能和靈活性。在介紹核心動畫引擎類的原始碼時簡單介紹了最佳化權衡。
在第4章“動畫庫”中,介紹了通用動畫任務的一個類集合。這些類提供了很多功能,例如場景管理和Sprite實現。它們也用來介紹怎樣開發與核心動畫引擎類互操作的遊戲特定代碼。
在第5章“高級圖形技術”中,介紹了高級圖形技術,包括硬體加速圖形、多緩衝和全螢幕獨占模式。給出了使這些技術的使用變得更加方便的可重用類和使用這些可重用類的示例遊戲。對其中的每一個技術,都介紹了關於它們使用方法的一些限制。
在第6章“持久數據”中,對在各種部署框架中載入和保存遊戲數據的機制進行了對比。在這個過程中還介紹了可以用於大多數遊戲編程的可重用數據持久性的類庫。對更加高級的持久性需求的其他選擇也進行了考慮。
在第7章“遊戲體系結構”中,介紹了適合於Java遊戲開發的面向對象的軟體體系結構的優點。使用這種體系結構的一個示例遊戲是作為新遊戲開發模板進行介紹的。本章還簡單介紹了一下數據驅動的設計。
在第8章“A*算法”中,介紹了現在在遊戲行業中最流行和最常用的一個人工智慧(AI)算法的實現。本章還介紹了使用A*算法繞過障礙物尋找路徑的示例。
在第9章“HTTP隧道技術”中,介紹一個可以在大部分Java遊戲部署環境裡常見的安全限制以內進行操作的一個聯網庫。本章還給出了一個示例,在這個示例中,數據在伺服器和客戶機之間進行傳遞。
在第10章“HTTP輪詢機制”中,將聯網庫擴展以支持線上多玩家遊戲。使用輪詢來同步客戶機和伺服器上的遊戲狀態。在由單玩家遊戲向多玩家聯網遊戲的轉換中,介紹了我所推薦的軟體體系結構的靈活性。
在第11章“HTTP Pulling機制”中,事件驅動的訊息是作為輪詢的另一個選擇而推薦使用的。使用在前面兩章中介紹的這些類,演示了這是怎樣在無符號applet的安全限制以內實現的。使用這些技術進行進一步開發的一些建議已經超出了本書的範圍,這裡只進行簡單的介紹。
本書合作站點
本書應該保持其“高級性”。為此,我專門為這本書建立了一個Web站點。從這個站點上,您能夠訂閱與本書相關的電子郵件列表,包括補充的指南和勘誤表。您將能夠測試和運行本書所介紹的示例遊戲,並下載開放原始碼庫和用來創建這些遊戲的公共領域的多媒體檔案。針對老師,我已經在Creative Commons Attribution License下發布了我在講授遊戲開發課程中使用的課程提綱、幻燈片和布置給學生的作業。我也提供了我的聯繫方式,這樣您可以將您的建議和意見反饋給我,以便我以後進行更正。
在開始閱讀第1章以前,請先訪問網站,並訂閱Advanced Java Game Programming通知郵件列表。
IV
Java遊戲高級編程

編輯推薦

《Java遊戲高級編程》通過豐富的示例遊戲,詳細講述了Java遊戲高級編程方面的知識。包括部署框架、Swing動畫、動畫庫、高級圖形技術、持久性機制、遊戲體系結構以及一些通信和同步技術等。 本書針對那些具有一定編程經驗、渴望將自己獨特的遊戲設計思想變成部署實體的Java高級開發人員。

目錄

第1章 配置開發環境 1
1.1 升級到Java 1.4 1
1.2 核心類 1
1.3 線上運行Demo版程式 2
1.4 深入遊戲庫 3
1.4.1 croftsoft目錄 3
1.4.2 arc目錄 4
1.4.3 bin目錄 4
1.4.4 doc目錄 4
1.4.5 ext目錄 5
1.4.6 lib目錄 5
1.4.7 lic目錄 5
1.4.8 res目錄 5
1.4.9 src目錄 6
1.4.10 tmp目錄 6
1.5 XML簡介 6
1.6 使用Ant編譯 7
1.7 使用開放原始碼 10
1.7.1 學習著作權的基本知識 10
1.7.2 選擇一個許可 11
1.7.3 重命名修改後的代碼 12
1.7.4 共享原始碼 13
1.8 為遊戲獲取多媒體資源 13
1.8.1 圖片資源 13
1.8.2 音頻資源 14
1.9 基本示例 15
1.9.1 修改原始碼 15
1.9.2 修改構建檔案 26
1.10 小結 27
1.11 參考文獻 27
第2章 部署框架 28
2.1 部署為applet 28
2.1.1 實現生命周期方法 28
2.1.2 管理applet動畫執行緒 30
2.1.3 讀取JAR檔案 34
2.1.4 使用外掛程式升級客戶端 36
2.1.5 了解存在的限制 38
2.1.6 applet簽名 38
2.1.7 快取applet 39
2.2 部署為可執行JAR 39
2.2.1 生成清單檔案 39
2.2.2 對不安全性進行保護 40
2.3 用Java Web Start進行部署 40
2.3.1 準備發布檔案 41
2.3.2 訪問默認瀏覽器 43
2.3.3 使用反射進行動態連結 46
2.4 將多個applet部署為一個applet 47
2.4.1 MultiAppletStup 48
2.4.2 MultiAppletNews 50
2.4.3 Lifecycle 54
2.4.4 LifecycleWindowListener 54
2.4.5 MultiApplet 58
2.4.6 CroftSoftCollection 65
2.5 小結 67
2.6 參考文獻 68
第3章 Swing動畫 69
3.1 ComponentAnimator 69
3.1.1 更新和繪製階段 70
3.1.2 精靈的定義 70
3.1.3 ExampleAnimator 71
3.2 RepaintCollector 73
3.2.1 Swing串列化 73
3.2.2 動畫的問題 73
3.2.3 RepaintCollector 75
3.2.4 SimpleRepaintCollector 75
3.2.5 BooleanRepaintCollector 77
3.2.6 CoalescingRepaintCollector 78
3.2.7 其他實現 81
3.3 LoopGovernor 81
3.3.1 固定的延遲 82
3.3.2 幀速率同步 84
3.3.3 SamplerLoopGovernor 85
3.3.4 WindowedLoopGovernor 85
3.4 AnimatedComponent 90
3.5 小結 98
3.6 參考文獻 98
第4章 動畫庫 99
4.1 ComponentPainter實現 99
4.1.1 NullComponentPainter 99
4.1.2 ArrayComponentPainter 99
4.1.3 ColorPainter 101
4.1.4 SpacePainter 103
4.1.5 TilePainter 106
4.2 ComponentUpdater 實現 114
4.2.1 NullComponentUpdater 114
4.2.2 ArrayComponentUpdater 115
4.2.3 EdgeScrollUpdater 115
4.3 ComponentAnimator實現 120
4.3.1 NullComponentAnimator 120
4.3.2 TileAnimator 120
4.3.3 FrameRateAnimator 122
4.3.4 CursorAnimator 126
4.4 Sprite實現 131
4.4.1 Sprite 131
4.4.2 AbstractSprite 132
4.4.3 IconSprite 135
4.4.4 BounceUpdater 137
4.4.5 IconSequenceUpdater 141
4.5 小結 143
第5章 高級圖形技術 144
5.1 硬體加速圖像 144
5.1.1 Image 144
5.1.2 BufferedImage 145
5.1.3 VolatileImage 145
5.1.4 自動圖像 146
5.1.5 兼容圖像 146
5.1.6 快取算法 149
5.2 多緩衝和多執行緒 150
5.3 全螢幕獨占模式 160
5.3.1 啟用全螢幕模式 160
5.3.2 FullScreenToggler 161
5.3.3 配置幀 165
5.3.4 改變顯示模式 165
5.3.5 DisplayModeLib 166
5.3.6 GraphicsDeviceLib 166
5.3.7 消除鋸齒 167
5.3.8 BufferStrategyAnimatedComponent 168
5.3.9 FullScreenDemo 170
5.3.10 使用獨占模式的顧慮 177
5.4 小結 177
5.5 參考文獻 177
第6章 持久數據 178
6.1 數據格式 178
6.1.1 對象串列化 178
6.1.2 屬性 181
6.1.3 XML 182
6.1.4 瓦片地圖圖像 190
6.1.5 隨機種子 193
6.2 持久性機制 195
6.2.1 JAR資源檔案 196
6.2.2 用戶主目錄檔案 197
6.2.3 JNLP持久性 200
6.2.4 applet持久性 203
6.2.5 穩固持久性 206
6.2.6 嵌入式資料庫 211
6.2.7 伺服器端的持久性 212
6.3 數據完整性 214
6.3.1 訊息摘要 214
6.3.2 散列快取 215
6.4 小結 217
6.5 參考文獻 217
第7章 遊戲體系結構 218
7.1 接口 218
7.2 繼承 218
7.3 目標Mars 221
7.4 模型-視圖-控制器 221
7.4.1 模型 222
7.4.2 多重接口繼承 224
7.4.3 視圖 234
7.4.4 控制器 240
7.5 複合MVC 243
7.5.1 複合模型 243
7.5.2 複合視圖 254
7.5.3 複合控制器 260
7.5.4 將三者進行組合 260
7.6 數據驅動設計 264
7.6.1 AnimationInit 264
7.6.2 AnimatedApplet 265
7.7 小結 269
7.8 參考文獻 269
第8章 A*算法 270
8.1 Cartographer 271
8.2 NodeInfo 272
8.3 AStar 273
8.4 AStarTest 279
8.5 SpaceTester 283
8.6 GridCartographer 283
8.7 GradientCartographer 286
8.8 TankConsole 289
8.9 TankOperator 290
8.10 StateSpaceNode 291
8.11 TankCartographer 292
8.12 DefaultTankOperator 293
8.13 PlayerTankOperator 297
8.14 小結 299
8.15 參考文獻 300
第9章 HTTP隧道技術 301
9.1 測試示例 302
9.2 可重用的客戶端代碼 303
9.2.1 Encoder 304
9.2.2 Parser 304
9.2.3 StreamLib 304
9.2.4 StringCoder 305
9.2.5 HttpLib 306
9.2.6 Queue 308
9.2.7 ListQueue 309
9.2.8 Loopable 312
9.2.9 Looper 313
9.2.10 HttpMessagePusher 315
9.3 遊戲特定的客戶端代碼 318
9.4 可重用的伺服器端代碼 323
9.4.1 Server 323
9.4.2 HttpGatewayServlet 324
9.5 遊戲特定的伺服器端代碼 327
9.6 打包WAR 330
9.6.1 web.xml 330
9.6.2 build.xml 331
9.7 小結 332
9.8 參考文獻 332
第10章 HTTP輪詢機制 333
10.1 測試示例程式 333
10.2 可重用的客戶端代碼 334
10.2.1 SerializableCoder 334
10.2.2 HttpMessagePoller 335
10.2.3 Consumer 340
10.2.4 QueuePuller 340
10.2.5 HttpMessageClient 342
10.3 遊戲特定的客戶端代碼 345
10.3.1 Request 345
10.3.2 AbstractRequest 346
10.3.3 FireRequest 346
10.3.4 MoveRequest 347
10.3.5 ViewRequest 348
10.3.6 GameData 348
10.3.7 Synchronizer 350
10.3.8 NetController 354
10.3.9 NetMain 356
10.4 可重用的伺服器端代碼 357
10.4.1 XmlBeanCoder 358
10.4.2 SerializableLib 359
10.5 遊戲特定的伺服器端代碼 360
10.5.1 GameInit 360
10.5.2 Player 362
10.5.3 NetGame 363
10.5.4 MarsServer 370
10.5.5 MarsServlet 376
10.6 小結 378
10.7 參考文獻 378
第11章 HTTP Pulling機制 379
11.1 測試示例 379
11.2 可重用的客戶端代碼 381
11.2.1 Authentication 381
11.2.2 Id 381
11.2.3 LongId 382
11.2.4 ModelId 383
11.2.5 SeriModelId 383
11.3 遊戲特定的客戶端代碼 384
11.3.1 Request 384
11.3.2 CoalesceableRequest 384
11.3.3 ChatController 385
11.3.4 Response 386
11.3.5 CreateUserConsumer 386
11.3.6 Event 387
11.3.7 ChatClient 387
11.3.8 ChatSynchronizer 393
11.3.9 ChatPanel 395
11.3.10 ChatApplet 398
11.4 伺服器端代碼 400
11.4.1 User 400
11.4.2 UserStore 401
11.4.3 PullServer 402
11.4.4 MoveServer 403
11.4.5 SeriChatGame 404
11.4.6 ChatServer 409
11.5 跟蹤訊息 411
11.5.1 多玩家聯網模式 412
11.5.2 單玩家本地模式 413
11.6 擴展示例 414
11.7 小結 414
11.8 參考文獻 415
附錄
附錄A 原始碼索引 416
附錄B CVS簡介 420
B.1 檢出代碼 420
B.2 創建自己的項目 421
B.3 並行程式設計 423
B.3.1 實施代碼所有權 423
B.3.2 互相監視 424
B.3.3 創建分支 425
B.4 參考文獻 425

相關詞條

熱門詞條

聯絡我們