圖書簡介
本書分為4篇:起步篇、基礎篇、進階篇和實戰篇,循序漸進地講解了如何使用J2ME開發無線套用。本書詳細講解了J2ME的圖形用戶界面、遊戲執行緒、記錄存儲、通用聯網架構等基礎知識,還在以往MIDP 1.0的基礎上增補了2.0的新內容,並對這些新技術加以詳細介紹,這些技術包括高級用戶界面的新組件、GameAPI遊戲開發包、新增網路API和Push技術及3D技術。在介紹完基礎知識之後,本書最後介紹了手機遊戲的精彩實例,包括單機遊戲、聯網遊戲、3D遊戲、滾屏遊戲等,還介紹了遊戲的開發理念和移植技術。
本書內容全面,實例豐富、易於理解,為讀者更地使用這些技術和標準進行工作而提供了很好的指導。本書既有簡單易懂的代碼片斷,也有大量實際可用的套用系統實例,為讀者迅速掌握J2ME的核心API類庫及無線套用系統的開發過程提供了很好的參考,是從事無線套用系統開發人員的優秀教材和參考書籍。
圖書目錄
第1篇 起步篇
第1章 J2ME概述 2
1.1 J2ME體系結構 2
1.1.1 Java的版本 2
1.1.2 J2ME的3層體系結構 3
1.1.3 J2ME配置(Configuration) 4
1.1.4 K虛擬機(KVM) 6
1.1.5 J2ME簡表(Profiles) 7
1.1.6 J2ME規範(Specification) 8
1.2 有限連線設備配置表(CLDC) 9
1.2.1 CLDC概覽 9
1.2.2 CLDC中使用的J2SE類 11
1.2.3 CLDC的字元集和系統屬性 13
1.2.4 CLDC專用類 15
1.2.5 通用連線(Generic Connection)框架 16
1.2.6 CLDC1.1的新特性 19
1.2.7 CLDC安全體系結構 21
1.3 MIDP簡表 23
1.3.1 設備需求 24
1.3.2 MIDP的總體體系結構 25
1.3.3 MIDP類庫 27
1.3.4 MIDP 2.0的新特性 28
1.3.5 MIDP 2.0的安全機制 29
1.3.6 MIDP的未來方向 31
1.4 本章小結 32
第2章 用J2ME WTK開發無線套用 33
2.1 J2ME WTK的安裝配置 33
2.1.1 WTK簡介 33
2.1.2 安裝前的準備工作 34
2.1.3 WTK 2.2的安裝 34
2.1.4 WTK 2.2的目錄結構 35
2.2 使用KToolbar部署套用 36
2.2.1 啟動KToolbar工具包 36
2.2.2 創建新工程 37
2.2.3 打開一個已有工程 39
2.2.4 第一個MIDP程式HelloWorld 39
2.2.5 編譯並運行程式 40
2.2.6 MIDP程式打包以及混淆 42
2.2.7 部署多個MIDlet組成的套件 43
2.2.8 OTA 方式部署套用 44
2.3 MIDlet應用程式模型 45
2.3.1 MIDlet套件 46
2.3.2 清單檔案(MANIFEST)和描述檔案(JAD) 46
2.3.3 套用管理軟體 49
2.3.4 從JAD檔案中讀取屬性 50
2.3.5 MIDlet的生命周期 51
2.3.6 編寫MIDlet應用程式 53
2.3.7 MIDlet的開發流程 55
2.4 設定WTK的工程屬性和開發環境 56
2.4.1 設定JAD/清單屬性 56
2.4.2 設定自己的工程目錄 57
2.4.3 使用第三方類庫 58
2.4.4 設定WTK的版本控制 59
2.4.5 設定調試(Debug)環境 60
2.4.6 設定默認模擬器 60
2.4.7 添加新的模擬器 60
2.4.8 為程式添加圖示 61
2.5 WTK的模擬器使用 62
2.5.1 WTK自帶的模擬器 62
2.5.2 模擬器中的文本輸入 64
2.5.3 用模擬器運行本地配置應用程式 65
2.5.4 設定模擬器的網路參數 65
2.5.5 設定模擬器的永久存儲和堆疊 66
2.5.6 設定模擬器的執行性能 67
2.5.7 監視程式的執行情況 68
2.6 本章小結 72
第3章 J2ME套用開發環境的選擇和配置 73
3.1 JBuilder 2005開發環境的搭建 73
3.1.1 搭建J2ME開發平台 73
3.1.2 開發Demo程式 74
3.1.3 打包和混淆應用程式 77
3.1.4 打包和混淆出現的問題 79
3.1.5 使用Nokia開發包開發應用程式 80
3.1.6 使用SonyEricsson開發包開發應用程式 82
3.1.7 使用Motorola開發包開發應用程式 84
3.2 Eclipse開發環境的搭建 85
3.2.1 搭建J2ME開發平台 85
3.2.2 開發Demo程式 87
3.2.3 打包和混淆應用程式 89
3.3 本章小結 90
第2篇 基礎篇
第4章 高級用戶界面 92
4.1 高級用戶界面設計概述 92
4.1.1 MIDP用戶界面概述 92
4.1.2 用戶界面API的分類 93
4.1.3 高級用戶界面的類層次 94
4.2 用戶界面的管理 95
4.2.1 Display類 95
4.2.2 Display對象的管理 97
4.2.3 可顯示(Displayable)類 98
4.2.4 當前顯示對象(Current Displayable) 100
4.2.5 設定當前顯示對象 101
4.2.6 獲取背景光和振動器信息 102
4.2.7 獲取顏色信息 102
4.2.8 獲取樣式信息 104
4.2.9 序列化 104
4.3 高級事件 105
4.3.1 用戶界面事件概述 105
4.3.2 軟鍵(Command)類和軟鍵類型 106
4.3.3 Command對象與用戶界面的映射 108
4.3.4 CommandListener偵聽 109
4.3.5 用Command跳轉螢幕 111
4.4 高級螢幕類 113
4.4.1 Screen類 113
4.4.2 用信息條(Ticker類)實現滾動文字 114
4.4.3 用Alert類實現提醒功能 116
4.4.4 AlertType類 120
4.4.5 Choice接口 123
4.4.6 List 125
4.4.7 用TextBox類輸入和編輯文本 132
4.5 螢幕表單(Form類)及其組件 138
4.5.1 Form類 138
4.5.2 Item類以及對Item狀態的偵聽 142
4.5.3 用ChoiceGroup類實現選項 148
4.5.4 用CustomItem類自定義組件 154
4.5.5 用DateField類輸入日期 164
4.5.6 Gauge(圖形標尺)類 171
4.5.7 用ImageItem類在Form中顯示圖片 178
4.5.8 Spacer 183
4.5.9 StringItem 185
4.5.10 用TextField類輸入文字 189
4.6 本章小結 194
第5章 低級用戶界面 195
5.1 Canvas類 195
5.1.1 Canvas類概述 195
5.1.2 繪製螢幕 198
5.1.3 重繪螢幕和強制重繪 199
5.1.4 顯示和隱藏事件 201
5.1.5 按鍵事件 203
5.1.6 遊戲動作 204
5.1.7 指針事件 206
5.1.8 Command事件 209
5.2 Graphics類 210
5.2.1 Graphics類概述 210
5.2.2 顏色模型與Alpha透明 213
5.2.3 繪製直線 215
5.2.4 繪製和填充矩形 216
5.2.5 繪製和填充弧形 217
5.2.6 繪製和填充圓角矩形 217
5.2.7 填充三角形 218
5.2.8 畫筆風格 218
5.2.9 設定剪裁區域 219
5.2.10 坐標系統變換 221
5.3 字型的使用 222
5.3.1 Font類概述 222
5.3.2 字型屬性 223
5.3.3 創建字型 225
5.3.4 文本的高度和寬度 225
5.3.5 基線 227
5.3.6 錨點 227
5.3.7 繪製字元串 228
5.4 圖像的繪製 230
5.4.1 Image類概述 230
5.4.2 不變圖像的創建 231
5.4.3 不變圖像的繪製 234
5.4.4 ARGB圖像的創建與繪製 236
5.4.5 PNG圖像格式 239
5.4.6 製作PNG透明背景 242
5.4.7 可變圖像的創建 244
5.4.8 圖像雙緩衝技術 245
5.4.9 圖片處理的注意點 246
5.5 本章小結 247
第6章 記錄存儲系統 248
6.1 記錄存儲系統概述 248
6.1.1 記錄存儲的概念 248
6.1.2 記錄存儲API 249
6.2 記錄存儲的管理 251
6.2.1 創建記錄存儲 251
6.2.2 關閉和刪除記錄存儲 252
6.2.3 增加記錄存儲 253
6.2.4 查詢記錄存儲 254
6.2.5 修改記錄存儲 255
6.3 面對記錄的高級操作 256
6.3.1 記錄枚舉接口 256
6.3.2 記錄過濾接口 257
6.3.3 記錄比較接口 258
6.3.4 記錄監聽接口 260
6.4 存儲記錄的格式問題 262
6.4.1 二進制格式和其他格式的轉換 262
6.4.2 幾個關於數據轉換的問題 263
6.5 遊戲中的數據存儲 263
6.5.1 遊戲中記錄存儲的方式 263
6.5.2 遊戲記錄存儲類的使用 266
6.5.3 與傳統的數據存取方式的對比 267
6.6 本章小結 267
第7章 MIDP網路編程 268
7.1 通用連線框架 268
7.1.1 概述 268
7.1.2 通用連線框架Generic Connection Framework 269
7.1.3 GCF的層次結構 269
7.1.4 GCF的使用 270
7.2 MIDP的HTTP連線 271
7.2.1 HTTP協定簡介 271
7.2.2 HTTP連線狀態 271
7.2.3 建立HTTP 連線 272
7.2.4 設定HTTP請求頭 273
7.2.5 使用HTTP 連線 275
7.2.6 關閉HTTP連線 277
7.2.7 使用HTTP協定下載檔案 277
7.3 Socket連線簡介 278
7.3.1 套接字(Socket)連線簡介 278
7.3.2 使用Socket下載檔案 280
7.4 Datagram連線 282
7.4.1 Datagram連線簡介 282
7.4.2 Datagram使用實例 283
7.5 Push技術概述 285
7.5.1 Push技術的分類 285
7.5.2 靜態註冊與基於inbound網路連線的Push 286
7.5.3 動態註冊與基於計時器的Push 290
7.5.4 使用Push應注意的問題 291
7.6 本章小結 291
第8章 聲音的播放和處理 292
8.1 MMAPI概述 292
8.1.1 MMAPI的概念 292
8.1.2 MMAPI的結構 293
8.2 播放器的創建和管理 294
8.2.1 MMAPI所支持的聲音格式 294
8.2.2 Player接口和狀態 295
8.3 播放器的使用 297
8.3.1 播放簡單音調 297
8.3.2 播放音樂檔案 298
8.3.3 控制播放音量 299
8.3.4 設定播放次數和循環播放 300
8.3.5 播放器監聽接口 300
8.4 遊戲中聲音的播放 302
8.4.1 以獨占方式播放聲音 302
8.4.2 以執行緒方式播放聲音 305
8.5 本章小結 306
第3篇 進階篇
第9章 MIDP 2.0遊戲開發 308
9.1 MIDP 2.0遊戲開發概述 308
9.1.1 MIDP 2.0對遊戲的支持 308
9.1.2 Game API概覽 309
9.2 遊戲的螢幕:GameCanvas類 310
9.2.1 GameCanvas概述 310
9.2.2 繪製雙緩衝區 311
9.2.3 實現遊戲主循環 312
9.2.4 獲取鍵盤狀態 312
9.2.5 Canvas繪製實例 314
9.3 圖層的使用:Layer類 316
9.4 遊戲背景:TiledLayer 類 317
9.4.1 TiledLayer類概覽 317
9.4.2 圖像貼圖(Tile) 318
9.4.3 單元格(Cell) 319
9.4.4 靜態背景的製作 319
9.4.5 動態背景的製作 322
9.5 遊戲精靈:Sprite類 325
9.5.1 Sprite類概覽 325
9.5.2 幀(Frame) 326
9.5.3 幀序列(FrameSequence) 327
9.5.4 旋轉(Transform) 329
9.5.5 設定參考點(reference pixel) 331
9.5.6 精靈的繪製 332
9.5.7 碰撞檢測(例子) 333
9.6 圖層管理:LayerManager 類 335
9.6.1 LayerManager類概覽 335
9.6.2 層的索引和操作(示意圖) 336
9.6.3 LayerManager的繪製 337
9.6.4 設定圖層的位置 338
9.6.5 設定顯示視窗(示意圖) 339
9.6.6 雙重背景的製作 340
9.6.7 實例:GameAPI實現RPG遊戲 344
9.7 本章小結 346
第10章 遊戲主要編程技術 347
10.1 遊戲的執行緒 347
10.1.1 執行緒的創建 347
10.1.2 執行緒的啟動與停止 348
10.1.3 執行緒的休眠與喚醒 351
10.1.4 執行緒的優先權 352
10.1.5 執行緒的同步問題 353
10.2 遊戲的中斷和恢復 354
10.3 Vector:用Vector實現的子彈 355
10.4 隨機數字:遊戲的人工智慧 357
10.5 定時器Timer:預定時間內完成任務 358
10.5.1 只運行一次的定時器 358
10.5.2 可以重複運用的定時器 359
10.6 遊戲閃屏設計 360
10.6.1 Alert 實現的閃屏 361
10.6.2 Canvas實現的閃屏 362
10.7 遊戲選單設計 364
10.7.1 高級界面實現的選單 365
10.7.2 低級界面實現的選單 366
10.8 本章小結 371
第11章 3D遊戲開發入門 372
11.1 J2ME 3D概覽 372
11.1.1 J2ME 3D遊戲概述 372
11.1.2 M3G包描述 373
11.1.3 手機3D圖像開發技術 374
11.1.4 M3G技術所能實現的功能 374
11.1.5 3D動畫的兩種開發模式 375
11.1.6 場景結構(Scene Graphs) 375
11.1.7 類描述 376
11.2 用點、線、面構造複雜形體 378
11.2.1 基本原則 378
11.2.2 頂點數組(VertexArray) 379
11.2.3 位置數組(PositionArray) 380
11.2.4 法向量數組(NormalArray) 381
11.2.5 顏色數組(ColorsArray) 381
11.2.6 紋理數組(TextureArray) 382
11.2.7 頂點緩衝(VertexBuffer) 383
11.2.8 索引緩衝(IndexBuffer) 385
11.2.9 格線多面體(Mesh) 387
11.2.10 實例:構造一個金字塔 388
11.2.11 頂點變形多面體(MorphingMesh) 390
11.2.12 實例:變形多面體 392
11.2.13 骨骼變形多面體(SkinnedMesh) 393
11.2.14 實例:活動的手臂 395
11.3 多面體的外觀屬性 398
11.3.1 類Apperance概述 398
11.3.2 深度和顏色屬性(CompositingMode) 400
11.3.3 多邊形屬性(PolygonMode) 403
11.3.4 霧化屬性(Fog) 407
11.3.5 材質屬性(Material) 410
11.3.6 2維圖像(Image2D) 412
11.3.7 紋理映射(Texture) 413
11.3.8 實例:添加多重紋理 417
11.4 光照 418
11.4.1 光照概述 418
11.4.2 光照的類型 420
11.4.3 光照的衰減 421
11.4.4 光源的選擇和顏色 421
11.4.5 創建聚光源 422
11.4.6 實例:比較光照效果 423
11.4.7 實例:滾動的光源 424
11.5 構建三維世界 424
11.5.1 變換矩陣(Transform) 425
11.5.2 變換類(Transformable) 428
11.5.3 節點(Node) 430
11.5.4 抽象三維物體Object3D 432
11.5.5 節點組(Group) 435
11.5.6 世界(World) 436
11.5.7 背景(Background) 438
11.5.8 攝像機(Camera) 440
11.5.9 精靈(Sprite3D) 442
11.5.10 實例:活動的聖誕老人 444
11.5.11 場景繪製(Graphics3D) 445
11.5.12 實例:滾動的骰子 447
11.6 動畫製作 451
11.6.1 類結構 451
11.6.2 關鍵幀序列(KeyframeSequence) 452
11.6.3 動畫軌跡(AnimationTrack) 455
11.6.4 動畫控制器(AnimationController) 457
11.6.5 實例:滾動的立方體 460
11.7 使用M3G檔案創建3D場景 461
11.7.1 3ds max製作M3G檔案 461
11.7.2 製作指南 463
11.7.3 瀏覽M3G檔案 465
11.7.4 載入M3G檔案 467
11.7.5 實例:遍歷世界 468
11.8 本章小結 469
第12章 J2ME遊戲開發技巧 470
12.1 目標設備的約束 470
12.1.1 受限的處理器 470
12.1.2 受限的存儲器 471
12.1.3 聯網能力和頻寬 471
12.1.4 輸入輸出的多樣性 471
12.1.5 外型和重量 472
12.1.6 移動設備的作業系統 472
12.2 針對J2ME遊戲開發的技巧及最佳化技術 472
12.2.1 最佳化的基本知識 473
12.2.2 使用JBuilder查找程式的性能瓶頸 474
12.2.3 最佳化J2ME程式設計和編碼,提高程式性能的方法 475
12.2.4 最佳化記憶體的使用 479
12.2.5 縮減應用程式體積 480
12.2.6 網路程式最佳化 482
12.2.7 延遲掩蓋技術 482
12.2.8 程式設計的權衡 483
12.3 本章小結 485
第13章 手機遊戲開發的總體理念 486
13.1 遊戲開發的思路 486
13.2 從遊戲玩家角度開發的遊戲 487
13.3 從開發者角度開發的遊戲 489
13.3.1 從遊戲載體劃分遊戲 489
13.3.2 從遊戲實現角度劃分遊戲 490
13.4 J2ME手機遊戲的版本和移植性 490
13.4.1 J2ME的版本介紹 490
13.4.2 J2ME的擴展標準 492
13.4.3 J2ME的不同廠家實現的差別介紹 493
13.4.4 J2ME程式在不同手機之間的移植 493
13.5 本章小結 494
第4篇 實戰篇
第14章 單屏遊戲的設計與實現 496
14.1 遊戲的策劃以及架構 496
14.1.1 單螢幕手機遊戲概述 496
14.1.2 手機遊戲策劃概論 497
14.1.3 逃亡者遊戲的策劃 499
14.1.4 逃亡者遊戲的準備工作 499
14.1.5 程式的類結構 501
14.1.6 遊戲的流程圖 501
14.2 遊戲的實現 502
14.2.1 主類escapeeMIDlet的實現 502
14.2.2 遊戲閃屏SplashScreen類的實現 510
14.2.3 遊戲選單MenuList類的實現 513
14.2.4 高分螢幕HighScoreScreen類的實現 515
14.2.5 簡介螢幕InstructionsScreen類的實現 516
14.2.6 子彈Bullets類的實現 516
14.2.7 逃亡飛機Escape類的實現 521
14.2.8 遊戲畫布escapeeCanvas類的實現 524
14.2.9 結束螢幕GameOverScreen類的實現 529
14.2.10 聲音效果SoundEffects類的實現 531
14.3 遊戲的最佳化和改進 533
14.3.1 邏輯層和表現層的分離 533
14.3.2 玩家的定製 534
14.3.3 製作遊戲的試玩版 537
14.3.4 遊戲程式的註冊 538
14.4 本章小結 542
第15章 滾屏遊戲設計——經典超級瑪麗 543
15.1 滾屏遊戲的策劃和準備工作 543
15.1.1 遊戲的策劃 543
15.1.2 遊戲的準備工作 544
15.2 滾屏遊戲的技術 544
15.2.1 遊戲中用到的主要技術 544
15.2.2 滾屏遊戲的驅動方式 545
15.2.3 進度條技術 547
15.3 滾屏遊戲的架構 549
15.3.1 程式的總體架構 549
15.3.2 程式的類結構 550
15.4 滾屏遊戲的實現 552
15.4.1 地圖繪製的實現 552
15.4.2 碰撞檢測 554
15.4.3 鍵控處理的實現 556
15.4.4 滾屏的實現 558
15.4.5 主要人物(瑪麗)的實現 560
15.4.6 烏龜的實現 568
15.4.7 選單的實現 569
15.4.8 遊戲的主Canvas類的實現 572
15.4.9 遊戲主Manager類的實現 574
15.5 滾屏遊戲的最佳化和注意點 577
15.5.1 遊戲中螢幕繪製技術的最佳化 577
15.5.2 遊戲中新對象的產生和垃圾收集 578
15.5.3 遊戲最佳化中時間、空間的權衡 578
15.5.4 遊戲中關於來電掛起和恢復處理的注意點 579
15.6 本章小結 580
第16章 網路遊戲設計——網路對戰撲克 581
16.1 網路遊戲客戶端的設計實現 581
16.1.1 程式的設計 581
16.1.2 程式的架構 582
16.1.3 程式的實現 583
16.1.4 程式的最佳化 599
16.2 網路遊戲伺服器的設計實現 599
16.2.1 程式的設計 599
16.2.2 程式的架構 600
16.2.3 程式的實現 600
16.3 本章小結 608
第17章 3D迷宮遊戲設計與實現 610
17.1 迷宮遊戲的策劃和準備工作 610
17.1.1 3D遊戲開發概述 610
17.1.2 遊戲的策劃 611
17.1.3 遊戲開發的準備工作 612
17.2 迷宮遊戲的架構 612
17.2.1 遊戲的執行緒 613
17.2.2 遊戲的類結構 613
17.2.3 遊戲的場景架構 614
17.2.4 遊戲的流程 614
17.2.5 深度優先算法生成迷宮 616
17.3 迷宮遊戲的實現 618
17.3.1 主類Maze3DMIDlet類 618
17.3.2 選單列表MenuList類的實現 621
17.3.3 平面Plane類的實現 622
17.3.4 迷宮地圖Maze類的實現 624
17.3.5 遊戲畫布MazeCanvas類的實現 632
17.3.6 設備屬性Graphics3Dproperties類的實現 646
17.3.7 錯誤處理ErrorScreen類的實現 647
17.4 3D手機遊戲的相關探討 647
17.4.1 迷宮遊戲的改善 648
17.4.2 3D手機遊戲設計概要 648
17.4.3 3D繪製性能和遊戲引擎 650
17.4.4 3D手機遊戲的分類 651
17.5 本章小結 652