《Java游戏编程》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)David Brackeen著;邱仲潘译
  • 出 版 社:北京:科学出版社
  • 出版年份:2004
  • ISBN:7030129423
  • 页数:663 页
图书介绍:Java游戏编程已经在游戏开发中成为重头戏。使用Java的好处是明显的:代码易读易写,而且可以在不同平台上方便快捷地开发。如果你已经有Java编程的经验,而且想涉及游戏编程,那么《Java游戏编程》是不错的选择。本书介绍如何使用Javal.4平台建立快速的全屏动作游戏,如横向卷轴和三维射击程序。介绍的关键特性包括Java游戏编程技术,最新二维图形和声音技术,三维图形和视景管理,路径寻找和人工智能,碰撞探测,使用BeanShell的游戏脚本和多方游戏引擎的生成等。本书主要内容包括:掌握全屏图形与动画、硬件加速图形技术:在游戏中增加人工智能和精彩的多方功能;生成定制鼠标和键盘控制的系统;在全屏游戏中集成Swing用户界面;同时播放多个声音,使用回响、伪三维声音过滤之类的实时声音效果;用BSP树、碰撞探测和脚本生成三维引擎;学习现代Java虚拟机的优化方法。本书面向游戏开发人员及广大游戏编程爱好者,同时,也是大专院校相关专业师生的有力参考。本书配套光盘内容为书中实例源代码。需要本书或需要得到技术支持的读者,请与北京中关村083信箱(邮编100080)发行部联系。电话:010-62528991

第一部分 Java游戏基础 1

第1章 Java线程 1

1.1 什么是线程 1

目录 1

1.2 在Java中生成与运行线程 2

1.2.1 扩展Thread类 2

1.2.2 实现Runnable接口 3

1.2.3 使用匿名内类 3

1.2.4 等待线程完成 3

1.2.5 休眠线程 3

1.3.1 为什么要同步 4

1.3.2 如何同步 4

1.3 同步 4

1.3.3 同步是什么 5

1.3.4 不同步是什么 6

1.3.5 避免死锁 6

1.4 使用wait()与notify() 7

1.5 Java事件模型 8

1.6 何时使用线程 8

1.7 何时不使用线程 8

1.8 线程池 8

1.9 小结 14

第2章 二维图形与动画 15

2.1 全屏图形 15

2.1.1 屏幕布局 15

2.1.2 像素颜色与位深度 16

2.1.3 刷新率 17

2.1.4 将显示切换到全屏方式 17

2.1.5 抗齿边 21

2.1.6 选用显示方式 22

2.2 图像 23

2.2.1 透明度 23

2.2.2 文件格式 23

2.2.3 读取图像 24

2.2.4 硬件加速图像 27

2.2.5 图形绘制基准程序 28

2.2.6 动画 32

2.2.8 动画循环 36

2.2.7 活动绘制 36

2.3 避免闪烁与裂开 39

2.3.1 双缓存 40

2.3.2 翻页 41

2.3.3 监视刷新与裂开 42

2.3.4 BufferStrategy类 42

2.3.5 生成屏幕管理器 43

2.3.6 幽灵 52

2.4 简单效果 59

2.5 小结 65

第3章 交互性与用户界面 66

3.1 AWT事件模型 69

3.2 键盘输入 70

3.3 鼠标输入 74

3.4 通过鼠标移动的观看模式 78

3.5 创建输入管理器 84

3.6 使用输入管理器 97

3.6.1 暂停游戏 97

3.6.2 增加重力 98

3.7 设计直观用户界面 105

3.8 使用Swing组件 106

3.8.1 Swing基础 106

3.8.2 在全屏方式中使用Swing 107

3.9 创建简单菜单 109

3.10 让游戏者配置键盘 115

3.11 小结 122

4.1 声音基础 123

第4章 声效与音乐 123

4.2 Java Sound API 124

4.2.1 打开声音文件 124

4.2.2 使用Line 124

4.3 播放声音 125

4.4 创建实时声音过滤体系结构 131

4.5 创建实时回响过滤 135

4.6 仿真三维声音 139

4.6.1 生成三维过滤器的思路 139

4.6.2 实现三维过滤器 140

4.6.4 测试三维过滤器 143

4.7 创建声音管理器 147

4.7.1 Sound类 147

4.7.2 SoundManager类 148

4.7.3 线程局部变量 157

4.8 播放音乐 158

4.8.1 播放光盘声频 158

4.8.2 播放MP3与Ogg Vorbis 159

4.8.3 播放MIDI音乐 159

4.8.4 生成适配音乐 163

4.9 小结 166

第5章 创建二维平台游戏 167

5.1 生成基于地砖的地图 167

5.1.1 实现Tile地图 168

5.1.2 读取Tile地图 172

5.1.3 绘制Tile地图 175

5.1.4 绘制幽灵 176

5.1.5 视差滚动 177

5.1.6 充电器 179

5.1.7 简单坏人 181

5.2 碰撞探测 190

5.2.1 探测碰撞 190

5.2.2 处理碰撞 191

5.2.3 幽灵碰撞 194

5.3 完成与加速 196

5.4 生成可执行的.jar文件 196

5.5 扩展游戏 197

5.6 小结 198

第6章 多人游戏 199

6.1 Java I/O库的变革 200

6.1.2 信道 201

6.1.1 JDK 1.4 NIO库的概述 201

6.1.3 缓存 203

6.1.4 选择器与SelectionKeys 205

6.2 基本多方游戏应用程序 206

6.2.1 服务器端 206

6.2.2 建立与运行服务器 212

6.2.3 客户端 214

6.2.4 建立与运行客户机 215

6.3 多方游戏服务器框架 215

6.3.1 设计目标与战术 215

6.3.2 设计 216

6.3.3 共用类与接口 219

6.3.4 服务器实现 221

6.3.5 客户机 229

6.4 RPS游戏(石头、布、剪刀) 230

6.4.1 类 230

6.4.2 运行RPS游戏 233

6.5 建立框架 235

6.5.1 客户机GUI 235

6.5.2 持久性 235

6.5.3 伙伴名单、门厅与闲聊 235

6.6 服务器管理 236

6.6.1 登记 236

6.6.2 启动/关闭 236

6.6.3 服务器管理控制台 237

6.7.1 切断与重接 238

6.7 高级课题 238

6.6.4 游戏监查 238

6.7.2 HTTP隧道 239

6.7.3 量化测试 240

6.7.4 Modem连接 241

6.7.5 性能剖析与统计 241

6.7.6 性能调整 242

6.8 小结 244

第二部分 三维图形与高级技术 245

第7章 三维图形 245

7.1 三维绘制的类型 246

7.2 回顾曾经学过的数学 246

7.2.2 向量数学 247

7.2.1 三角学和直角三角形 247

7.3 3D的基础 252

7.4 3D的数学 254

7.5 多边形 259

7.6 三维变换 262

7.6.1 旋转 263

7.6.2 包装旋转和平移变换 264

7.6.3 采用变换 268

7.6.4 旋转顺序 270

7.7 3D的简单管道 270

7.8 镜头移动 275

7.9 实体和背面删除 275

7.9.1 点积 276

7.9.2 交积 277

7.9.3 再谈点积和交积 279

7.10 扫描转换多边形 280

7.11 三维剪取 288

7.12 最后绘制管道 291

7.13 小结 299

第8章 纹理贴图与照明 301

8.1 透视正确纹理贴图的基础 301

8.2 简单纹理贴图器 305

8.3 优化纹理贴图 314

8.3.1 纹理的存储格式 315

8.3.2 原始优化 319

8.3.3 内联方法 322

8.3.4 快速纹理贴图演示程序 323

8.4 简单灯光 324

8.4.3 光源强度 325

8.4.4 距离减弱 325

8.4.1 扩散反射 325

8.4.2 环境光 325

8.4.5 实现点光源 326

8.5 实现纹理照明 327

8.6 使用阴影图的高级照明 334

8.6.1 求出边界矩形 335

8.6.2 采用色档图 337

8.6.3 建立色档图 338

8.6.4 建立表面 341

8.6.5 缓存表面 344

8.6.6 阴影表面演示程序 351

8.7.4 双线性插值 352

8.7.3 MIP贴图 352

8.7.5 三线性插值 352

8.7 其他概念 352

8.7.2 伪阴影 352

8.7.1 深度提示 352

8.7.6 法线图与深度 353

8.7.7 其他类型的光 353

8.8 小结 353

第9章 三维对象 354

9.1 表面消隐 354

9.1.1 油画算法 354

9.1.2 反油画算法 355

9.1.3 Z缓存 355

9.1.4 使用1/Z的Z缓存 356

9.1.5 计算Z深度 359

9.2 三维动画 360

9.2.1 空间运动 362

9.2.2 角度运动 364

9.3 多边形组 369

9.4 从OBJ文件装入多边形组 375

9.4.1 OBJ文件格式 375

9.4.2 MTL文件格式 382

9.5 游戏实体 384

9.6 管理游戏实体 387

9.7 综合起来 389

9.8 改进 396

9.9 小结 397

10.1 BSP树简介 398

第10章 用BSP树管理三维视景 398

10.2 二叉树基础 399

10.3 一维BSP树 401

10.4 二维BSP树 403

10.4.1 建立BSP树 404

10.4.2 BSP树遍历实例 406

10.5 实现二维BSP树 407

10.5.1 BSP Line 409

10.5.2 确定点相对于直线的边 409

10.5.3 BSP多边形 413

10.5.4 遍历BSP树 413

10.5.5 中序遍历 415

10.5.6 由前到后遍历 416

10.5.7 树的建立 417

10.5.8 两条线求交 421

10.5.9 用直线剪取多边形 423

10.5.10 删除T形接头 426

10.5.11 测试BSP树 427

10.6 从前到后画多边形 429

10.7 第一个BSP树例子 438

10.8 在视景中画实体 439

10.9 从文中装入贴图 440

10.10 综合起来 444

10.11 改进 445

10.12 小结 446

11.1 碰撞基础 447

第11章 碰撞探测 447

11.2 实体间碰撞 448

11.2.1 减少测试 448

11.2.2 边框球 450

11.2.3 边框圆柱 452

11.2.4 离散时间问题 454

11.3 实体与世界碰撞 455

11.3.1 测试地板的边框 455

11.3.2 寻找特定位置的BSP叶 456

11.3.3 实现地板和天花板高度测试 457

11.3.4 测试墙的边框 459

11.3.5 BSP树的线段交点 460

11.3.7 实现实体/世界碰撞探测 464

11.3.6 角问题 464

11.4 基本碰撞探测演示程序 467

11.5 滑动与碰撞处理 467

11.5.1 实体间滑动 468

11.5.2 实体沿墙的滑动 470

11.5.3 重力与爬楼梯(实体沿地 473

面滑动) 473

11.5.4 实现跳动 476

11.6 碰撞探测与滑动演示程序 477

11.7 改进 477

11.8 小结 477

第12章 路径搜索 478

12.1 路径寻找基础 478

12.2 初步路径寻找方法 478

12.3 A*算法基础 482

12.4 采用A*算法 487

12.5 BSP树与A*算法 487

12.5.1 门户 488

12.5.2 实现门户 489

12.6 一般性路径寻找 493

12.7 建立PathBot 496

12.8 改进A*搜索 500

12.9 小结 500

第13章 人工智能 502

13.1 人工智能基础 502

13.2 减少Bot的神力 503

13.2.1 视觉 503

13.2.2 听觉 505

13.3 状态机与响应 507

13.4 概率机 509

13.5 决策 512

13.6 模式 513

13.6.1 躲避 514

13.6.2 攻击 517

13.6.3 跑开 519

13.6.4 瞄准 520

13.6.5 射击 521

13.7 实体派生 522

13.8 综合起来 523

13.8.1 大脑 523

13.8.2 健康与死亡 524

13.9.1 再生 532

13.9 进化 532

13.9.2 进化Bot 534

13.9.3 演示改进 538

13.10 进化 538

13.11 小结 539

第14章 游戏脚本 540

14.1 关于脚本 540

14.2 实现接触与释放通知 541

14.3 游戏实体监听器 544

14.4 脚本 548

14.4.1 设计脚本 549

14.4.2 嵌入BeanShell解释器 551

14.5 延迟事件 556

14.6 综合起来 560

14.7 改进 562

14.8 小结 563

第15章 保存游戏 564

15.1 游戏保存基础 564

15.2 对游戏状态保存使用Java序列化API 565

15.2.1 序列化简介 565

15.2.2 序列化基础 565

15.2.3 序列化规则 567

15.2.4 序列化问题 570

15.2.5 覆盖缺省行为 573

15.3 生成游戏屏幕图形 577

15.3.1 生成屏幕略图图形 579

15.3.2 保存图形 579

15.4 将游戏保存到正确目的地 581

15.5 小结 582

第三部分 调整与完成游戏 583

第16章 优化技术 583

16.1 优化规则 583

16.2 剖析 584

16.2.1 基准测试 584

16.2.2 使用HotSpot剖析器 584

16.3 HotSpot 588

16.3.1 Java特定优化 589

16.3.2 死亡代码消除 589

16.3.3 循环不变项提升 589

16.3.6 内联方法 590

16.3.5 常量传递 590

16.3.4 公共子表达式消除 590

16.4 优化技巧 591

16.4.1 算法 591

16.4.2 移位 592

16.4.3 求模 593

16.4.4 乘法 593

16.4.5 指数 593

16.4.6 更多循环不变项提升 594

16.4.7 查找表 594

16.4.8 定点算术 597

16.4.9 异常 597

16.4.10 输入/输出 597

16.5 内存使用与回收 598

16.4.11 内存贴图文件 598

16.5.1 Java堆与内存回收 599

16.5.2 监视内存回收 599

16.5.3 监视内存使用 600

16.5.4 调整堆 604

16.5.5 调用内存回收单元 605

16.5.6 减少对象生成 605

16.5.7 对象复用 605

16.5.8 对象池 606

16.6 感觉性能 606

16.7 小结 611

17.1 选择外观 613

17.1.1 寻找灵感 613

第17章 生成游戏图形与声音 613

17.1.2 保持一致 614

17.2 取得自由版权游戏媒体 614

17.3 与艺术家和声效工程师合作 615

17.4 工具 615

17.5 生成声音 615

17.6 生成纹理与幽灵 616

17.6.1 图形文件格式 617

17.6.2 生成无缝纹理 617

17.6.3 生成替换纹理 618

17.6.4 生成过渡纹理 619

17.6.5 生成多层纹理 620

17.7 生成漂亮屏幕与HUD图形 621

17.8 生成UI图形 621

17.9 生成字体 622

17.10 小结 628

第18章 游戏设计与最后10% 629

18.1 最后10% 629

18.1.1 效果 630

18.1.2 游戏状态机 630

18.2 游戏设计要素 636

18.2.1 环境 636

18.2.2 故事要素 637

18.2.3 玩游戏 638

18.2.4 告诉用户怎么玩 639

18.3 生成贴图编辑器 639

18.4 调试 640

18.4.1 调试Java2D问题 642

18.4.2 日志 643

18.5 保护代码 644

18.6 游戏部署 645

18.7 Java Web Start游戏部署 646

18.7.1 从jar文件取得资源 646

18.7.2 签名jar文件 647

18.7.3 生成JNLP文件 647

18.7.4 设置Web服务器 649

18.8 自然编译游戏部署 650

18.9 更新与补丁 650

18.10 带宽问题 651

18.11 反馈与Beta测试 651

18.13 综合起来 652

18.12 赚钱 652

18.14 小结 653

第19章 未来 654

19.1 Java的演变 654

19.1.1 Java社团 654

19.1.2 缺陷天堂(Bug Parade) 654

19.2 Java 1.5(Tiger) 655

19.2.1 一般(JSR 14) 655

19.2.2 枚举(JSR 201) 656

19.2.3 静态导入(JSR 201) 657

19.2.4 改进for循环(JSR 201) 657

19.3.1 更多鼠标与键盘输入选项 658

19.3 Java平台需要什么 658

19.2.7 共享虚拟机(JSR 121) 658

19.2.6 网络传输格式(JSR 200) 658

19.2.5 编译器API(JSR 199) 658

19.3.2 游戏杆输入 659

19.3.3 硬件加速半透明图像 659

19.3.4 高精度定时器 659

19.3.5 Linux中的硬件加速图形和全屏方式 660

19.3.6 运行环境中的硬件加速三维 660

特性 660

19.3.7 HotSpot SIMD优化 660

19.3.8 更多字体光顺选项 661

19.3.9 其他情况 662

19.4 新设备与Java Games Profile 662

(JSR 134) 662

19.5 小结 663