diff --git a/README.md b/README.md index 0dda91d..af55a6e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ learnopengl.com系列教程的中文翻译,目前正在翻译中。 **当前翻译进度**:49/60 -**校对进度**:10/48 +**校对进度**:11/48 **目前状态**:请认领一下In Practice下的章节 diff --git a/docs/06 In Practice/2D-Game/01 Breakout.md b/docs/06 In Practice/2D-Game/01 Breakout.md index 2f9bfa2..c1369de 100644 --- a/docs/06 In Practice/2D-Game/01 Breakout.md +++ b/docs/06 In Practice/2D-Game/01 Breakout.md @@ -4,48 +4,46 @@ ---|--- 作者 | JoeyDeVries 翻译 | HHz(qq:1158332489) -校对 | 暂无 +校对 | Meow J -看完前面的教程之后我们已适当地了解了OpenGL的内部运作原理,并且我们已经能够用这些知识绘制一些复杂的图像。然而,我们还只能做出一些小Demo,并未达到用OpenGL开发实际应用的水平。这一部分主要介绍了一个用OpenGL制作的很简单的2D小游戏。本部分教程将展现OpenGL在较大较复杂程序中的强大之处。 +看完前面的教程之后我们已经了解了非常多的OpenGL内部工作原理,并且我们已经能够用这些知识绘制一些复杂的图形。然而,除了之前的几个技术演示之外,我们还没有真正利用OpenGL开发一个实际应用。这篇教程为OpenGL 2D游戏制作系列教程的入门篇。这个系列教程将展示我们该如何将OpenGL应用到更大,更复杂的环境中。注意这个系列教程不一定会引入新的OpenGL概念,但会或多或少地向我们展示如何将所学的概念应用到更大的程序中去。 -!!! Attention +由于我们希望事情能够简单一点,我们会以别人开发过的一个2D街机游戏为基础,开发我们自己的2D游戏。这就是Breakout,一个于1976年发布的运行在Atari 2600主机上的经典2D游戏。游戏要求玩家通过操控一个挡板反弹小球,以破坏所有的砖块,而不能让小球到达屏幕底端。当玩家破坏了所有砖块的时候即为完成了游戏。 - 注意本部分内容不一定引入新的OpenGL概念,但会或多或少地向我们展示示如何将前面所学的概念应用到更大的程序中去。 +下面我们可以看到Breakout原本在Atari 2600上是什么样子的: -由于我们要做到尽可能地简化,我们将开发一个别人开发过的2D电脑游戏。简单介绍一下本节的主要内容:本节将开发一个1976年运行在Atari2600上的经典2D游戏(控制台程序)。游戏要求玩家通过操控一个挡板反弹一个小球撞倒所有的砖块,并且要让小球不超出挡板边界,玩家消灭所有砖块即为完成了游戏。 +![](../../img/06/Breakout/01/breakout2600.png) -![](http://www.learnopengl.com/img/in-practice/breakout/breakout2600.png) +游戏有以下几个机制: -游戏有以下要点: +- 玩家能够控制一个小挡板,它只能在屏幕范围内左右移动。 +- 球在屏幕上运动,每一次碰撞都会使球根据碰撞位置改变运动方向。对屏幕边框,砖块,挡板都需要有碰撞判定。 +- 当球运动到屏幕底部边界的时候,游戏结束或者玩家丧失一点生命值。 +- 球碰到砖块的时候,砖块会被破坏。 +- 当所有砖块都被破坏,玩家获胜。 +- 球的方向可以通过球碰撞在挡板上的位置(即到挡板中心的距离)来操控。 -- 一个由玩家操纵且只能左右不超出屏幕边界移动的小挡板 -- 球在屏幕上运动,每一次碰撞会使球 在其触及的地方改变运动方向(这与屏幕范围,砖块和挡板有关) -- 当球运动到了屏幕下边界,玩家会丧失一点生命值 -- 球碰到砖块,砖块即被消去 -- 砖块被消完,玩家即获胜 -- 通过球打在挡板上的位置(距离挡板中心的距离),球的后续方向能够被玩家操控 - -因为小球不时可能会遇上砖块之间的缝隙,所以它会继续弹开周围砖层进而离开缝隙。它后来若又进入了某个缺口依然遵循这个原则,这就是为什么本节要叫这个名字(Breakout)的原因 ,小球必须 “Breakout”(弹出来). -*PS:这段话不好翻译,大概就是介绍打砖块的游戏规则 +由于小球会不时通过缝隙到达砖墙的上方,它会在顶部边缘与砖块层的上边缘之间不断弹跳。小球会一直持续这种状态直到最终再次进入缝隙掉下来。这也是这个游戏名字的来源,小球必须要从缝隙中逃脱(Break out)出来。 # OpenGL Breakout - 我们将完全利用opengl实现这个经典的电脑游戏(几乎是2d游戏的基础),这个版本的Breakout将能够运行在一些可出特效的显卡上。 +我们将把这个经典的街机游戏作为我们之后要完全使用OpenGL实现的这个游戏的基础。这个版本的Breakout将会运行在显卡上,所以我们能够改进经典的Breakout游戏,给它加一些很棒的特性。 -除了以上的这些特性,我们的Breakout还将拥有: -- 精灵渲染 +除了以上这些经典的机制,我们的Breakout还将拥有: + +- 你见过最棒的画质 - 粒子系统 -- 文字渲染 +- 高级文字渲染 - 道具 -- 后期特效 -- 多重关卡(可自定义) +- 后期处理特效 +- 多个(可自定义的)关卡 -为了引起大家的兴趣,让大家看看完成本教程后所制作的游戏的样子: +为了引起大家的兴趣,你可以看看游戏完成之后的样子: -![](http://www.learnopengl.com/img/in-practice/breakout/cover.png) +![](../../img/06/Breakout/01/cover.png) -这些教程将结合前面大量的概念,讲述了在之前所学的功能如何放在一起形成一个游戏。因此,最重要的是你完成了前面部分的教程。 +这些教程将会结合之前教程中的大量概念,并且会展示如何让它们以一个整体工作。所以,在你开始这个系列教程的学习之前,请至少完成[「入门」](../../01 Getting started/01 OpenGL.md)章节。 -同样,有些东西也会提及其他教程的一些概念(比如说帧缓冲Framebuffers),所以,有必要时被提及的教程会列出。 +而且,有些教程会需求其它一些教程的概念(比如说在[「高级OpenGL」](../../04 Advanced OpenGL/05 Framebuffers.md)章节中的帧缓冲),所以当必要的时候我会列出需求的教程。 -如果你已准备好开发本游戏,可以开始下一节了。 +如果你已准备好开发这个游戏,可以开始[下一节](02 Setting up.md)的学习了。 \ No newline at end of file diff --git a/docs/img/06/Breakout/01/breakout2600.png b/docs/img/06/Breakout/01/breakout2600.png new file mode 100644 index 0000000..3d9ba04 Binary files /dev/null and b/docs/img/06/Breakout/01/breakout2600.png differ diff --git a/docs/img/06/Breakout/01/cover.png b/docs/img/06/Breakout/01/cover.png new file mode 100644 index 0000000..35a66bb Binary files /dev/null and b/docs/img/06/Breakout/01/cover.png differ