译者序

2012 年夏天,我在东京的书店里闲逛时偶然发现了本书,翻了几下就被吸引住了。当时就想如果能把它翻译成中文该多好。然而考虑到版权等问题,此事就搁浅了。机缘巧合,三年前得知图灵引进了这本书的中文版权,于是便自告奋勇,开始了本书的翻译。

作为一个在游戏行业摸爬滚打了十几年的人,为何我对本书情有独钟呢?

在我的日常工作中,除了游戏产品的研究开发,我还负责公司的一些新人培训工作。如何帮助行业新人扎实地建立起一套知识体系,是我这些年一直思考的问题。游戏行业发展至今已经非常成熟;与此同时,游戏开发这棵“技能树”也可谓枝繁叶茂。编程语言、软件工程、计算机图形学、高等数学、物理模拟、游戏引擎架构、动画控制、人工智能、网络编程……初学者难免陷入一种不知从何开始的窘境。对于有志进入这个行业的人来说,太需要一本提纲挈领、鸟瞰全局的参考书了。

有些读者可能不同意——今时今日,任何一个新手经过短期的学习,都不难用 Unity 开发出一个简单的游戏,似乎并不需要掌握那样一堆东西。其实,这只是一种错觉。借助强大的现代游戏引擎,让一个游戏“跑起来”确实非常简单。然而要完成一款真正的商业作品,没有相当充分的知识积累是完全不可能的。

本书内容大致分为三个部分:2D 游戏基础、3D 游戏基础,以及游戏开发实用技术。本书从命令行游戏开发讲起,然后介绍如何开发简单的 2D 动作游戏,最后介绍如何开发包含模型和动画的 3D游戏。全书不借助任何引擎,从无到有最终开发出一个 3D 游戏。准确地说,这本书是在教我们如何开发出一个简易的引擎,然后用这个引擎开发出一个 3D 游戏。光是这个过程就足以令人激动了。

事实上,著名的游戏公司世嘉曾长期使用本书作为新人培训教材。说到这里,就需要介绍一下原书的由来了。原书作者平山尚老师曾在世嘉游戏公司负责新人培训工作,整理教材时发现相关的必读图书竟达十几本之多。苦于这种状况,便结合自己的开发经验编写了本书。所以读者可以看到,本书涵盖了编程、物理、数学等知识。若想快速习得游戏开发的相关技术,阅读本书再合适不过了。

一些读者可能会担心:“既然是教材,岂不是非常枯燥?”相信读者翻阅几章后就没有这种担心了。平山老师原本就是一名资深程序员,讲解时非常擅长从设计思路切入,每一步都有明确的逻辑根据。为什么要这样处理碰撞检测?为什么要抽象出各个状态基类?为什么要用矩阵来处理旋转?甚至对找 bug 的思路也有理有据地列出了许多建议。喜欢刨根问底的读者请不要错过本书。

本书的代码采用 C ++ 编写,建议读者在阅读之前先大致了解一下 C ++ 的基础语法。在Unity 和其他各类 HTML 5 引擎大行其道的今天,直接使用 C ++ 编写游戏的情况确实不常见。这是否意味着本书有些过时了呢?非也。Unity 这些高级引擎内部都是用 C ++ 编写的,因此,学习本书之后会更容易理解这些引擎内部是如何工作的,以及引擎为什么要这样设计。这在优化游戏性能时会有很大帮助。

本书自翻译到付梓,大约用时三年。此间固然有工作繁忙之缘故,而更多的是理解原书、调试代码等耗时所致。为力求全书连贯通顺,译者已将原书熟读三遍。每想到若因词不达意而误人子弟,便诚惶诚恐。当然即便如此,疏漏之处也在所难免,还望读者朋友不吝赐教。

在翻译过程中,热心读者在社区里的留言,对我来说是最大的动力,感谢你们!我能做的唯有精益求精,回馈读者。同样,衷心感谢图灵的编辑老师们,没有你们耐心的指导与帮助,本书不可能问世。最后,借此机会我也要感谢我的妻子,没有她的支持,我想我很难完成这项巨大的工程。感谢所有人!

游戏行业是一个充满激情的行业。入行十几载,庆幸自己依旧斗志昂扬。我可以,你也一定可以。加油,朋友!

罗水东 

2019 年 9 月于大连

目录

  • 译者序
  • 前言
  • 第1部分 2D 游戏
  • 第1章 第一个游戏
  • 第2章 从像素开始学习2D 图形处理
  • 第3章 使用图片素材
  • 第4章 实时游戏
  • 第5章 简单的状态迁移
  • 第6章 文本绘制方法
  • 第7章 动作游戏初体验
  • 第8章 2D 平面内的碰撞处理
  • 第9章 各种输入设备 
  • 第10章 状态迁移详解
  • 第11章 播放声音
  • 第12章 旋转、缩放与平移
  • 第13章 显卡的力量
  • 第2部分 3D 游戏
  • 第14章 绘制立体物体
  • 第15章 类库的封装方法
  • 第16章 伪XML 文件的读取
  • 第17章 编写高性能的代码
  • 第18章 3D 碰撞处理
  • 第19章 《机甲大战》的设计
  • 第20章 光照
  • 第21章 角色动画 
  • 第3部分 通往商业游戏之路
  • 第22章 高效的碰撞检测 
  • 第23章 数据加载
  • 第24章 float 的用法 
  • 第25章 随书类库概要
  • 第26章 bug 的应对方法
  • 第27章 进阶方向