标题：J2ME手机游戏开发技术详解
图书信息
图书ISBN：7302126011
出版时间：2006-5-1
出版社：清华大学出版社
作者：李振鹏，龚剑 编著
图书简介
本书分为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