From 5423bc09b53789f399b164dcfd8c7cd5878f90c4 Mon Sep 17 00:00:00 2001 From: LuShuchen <50068848+LuShuchen@users.noreply.github.com> Date: Wed, 13 Nov 2024 10:38:06 +0800 Subject: [PATCH] Update index.md to fix some typos --- .../zh/getting-started/first-game-2d/index.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/versions/3.8/zh/getting-started/first-game-2d/index.md b/versions/3.8/zh/getting-started/first-game-2d/index.md index 2b351d1f3..c74db5779 100644 --- a/versions/3.8/zh/getting-started/first-game-2d/index.md +++ b/versions/3.8/zh/getting-started/first-game-2d/index.md @@ -36,7 +36,7 @@ Cocos Creator 提供不同类型的模板和示例,您可以点击 **模板** ## 创建主角 -在 2D 游戏中,通常我们会使用图片来作为主角,Cocos Creator 提供了一系列内置的 UI 图片,您可以在 `internal/default_ui/` 这个目录中找到他们,也可以随意的在您的项目中使用。通常我们在制作原型时,会采用这些图片。 +在 2D 游戏中,通常我们会使用图片来作为主角,Cocos Creator 提供了一系列内置的 UI 图片,您可以在 `internal/default_ui/` 这个目录中找到它们,也可以随意的在您的项目中使用。通常我们在制作原型时,会采用这些图片。 在 **层级管理** 中点击右键,可以创建不同的节点类型,请尝试创建一个 Sprite 类型的节点: @@ -83,7 +83,7 @@ Cocos Creator 提供不同类型的模板和示例,您可以点击 **模板** ![create-scripts.gif](images/create-scripts.gif) -这样由引擎模板创建的脚本为组件,他的代码如下: +这样由引擎模板创建的脚本为组件,它的代码如下: ```ts import { _decorator, Component, Node } from 'cc'; @@ -122,9 +122,9 @@ export class PlayerController extends Component { ### 预制体 -预制体是引擎的一种特殊资源,他可以将节点作为一种资源持久化的保存在 **资源管理器** 里面,这样就可以复用到其他情景。 +预制体是引擎的一种特殊资源,它可以将节点作为一种资源持久化的保存在 **资源管理器** 里面,这样就可以复用到其他情景。 -制作预制体的方法也比较简单,我们只需找到刚刚制作的 Box 节点,拖拽他到 **资源管理器** 里面。 +制作预制体的方法也比较简单,我们只需找到刚刚制作的 Box 节点,拖拽它到 **资源管理器** 里面。 场景内的 Box 节点,运行游戏之前可以将它删除。 @@ -154,7 +154,7 @@ export class PlayerController extends Component { ## 完善角色 -虽然我们角色已经制作好了,但是他完全不能动起来,也没有任何代码可以驱动他。因此我们接下来将从这两个方 +虽然我们角色已经制作好了,但是它完全不能动起来,也没有任何代码可以驱动它。因此我们接下来将从这两个方 面努力去完善角色。 ### 让角色动起来 @@ -216,7 +216,7 @@ onMouseUp(event: EventMouse) { #### 移动角色 -对于大多数游戏角色来说,动起来的概念就是将其位置发生变化,对于匀速移动的物体,他移动后的位置应该是如下描述的: +对于大多数游戏角色来说,动起来的概念就是将其位置发生变化,对于匀速移动的物体,它移动后的位置应该是如下描述的: ```txt P_1 = P_0 + v*t @@ -235,12 +235,12 @@ update (deltaTime: number) {} 这里我们整理下角色移动所需要的一些信息: - 是否开始跳跃: `_startJump`,用于判断角色是否在跳跃状态 -- 跳跃步数:一步或者两步 `_jumpStep`,用于记录鼠标的输入,并将其转化为数值。因为我们规定角色最多只能跳两步,那么他可能是 1 或者 2。 +- 跳跃步数:一步或者两步 `_jumpStep`,用于记录鼠标的输入,并将其转化为数值。因为我们规定角色最多只能跳两步,那么它可能是 1 或者 2。 - 跳跃时间:`_jumpTime`,这个数值类型的变量用于记录整个跳跃的时长 - 当前的跳跃时间:`_curJumpTime`,每次跳跃前,将这个值置为 0,在更新时进行累计并和 `_jumpTime` 进行对比,如果超过了 `_jumpTime`,那么我们认为角色完成了一次完整的跳跃 - 移动速度:`_curJumpSpeed`,用于记录跳跃时的移动速度 - 当前的位置:`_curPos`,记录和计算角色的当前位置 -- 位移: `_deltaPos`,每一帧我们都需要记录下位置和时间间隔的乘积,我们将用他来存储计算结果 +- 位移: `_deltaPos`,每一帧我们都需要记录下位置和时间间隔的乘积,我们将用它来存储计算结果 - 目标位置:`_targetPos`,最终的落点,我们将在跳跃结束时将角色移动这个位置以确保最终的位置正确,这样可以处理掉某些误差的情况 在 PlayerController 中添加上述的属性: @@ -277,7 +277,7 @@ jumpByStep(step: number) { } ``` -Vec3 是 三维矢量 Vector3 的缩写,这个类会提供三维矢量的存储和一些计算的方法。其中 `Vec3.add` 是他提供的静态方法,用于计算两个向量相加,并将结果存储在第一个参数 `_targetPos` 里面。 +Vec3 是 三维矢量 Vector3 的缩写,这个类会提供三维矢量的存储和一些计算的方法。其中 `Vec3.add` 是它提供的静态方法,用于计算两个向量相加,并将结果存储在第一个参数 `_targetPos` 里面。 不是 2D 游戏吗?为什么要操作 Vector3。虽然我们在编辑器看到的位置信息都是 2D 的但是在引擎中的计算都是实际上以 3D 为基础的,因此在计算是都会采用三维矢量作为运算位置的基础。 @@ -306,7 +306,7 @@ update (deltaTime: number) { ![without-scale.gif](images/without-scale.gif) -需要注意一点,在 2D 世界里面,如果位移一个单位,那么这个位置不会很明显,这是因为我们的 Cavans 设定为 960 x 640, 因此横向移动 1 个单位,他相当于移动 Canvas 的 1/960。 +需要注意一点,在 2D 世界里面,如果位移一个单位,那么这个位置不会很明显,这是因为我们的 Cavans 设定为 960 x 640, 因此横向移动 1 个单位,它相当于移动 Canvas 的 1/960。 因此我们要对移动的单位进行放大,这里可以在 PlayerController 上面添加一个用于记录放大比的常量: @@ -469,7 +469,7 @@ animation.play('oneStep'); ``` - animation 是 Body 动画的动画组件的 ‘引用’。 -- play 指的是播放动画的方法,他的参数是我们之前创建好的 oneStep 这个动画剪辑,在 Cocos Creator 中,如果要播放对应的动画,必须将该动画配置在 Animation 组件的 Clips 属性内 +- play 指的是播放动画的方法,它的参数是我们之前创建好的 oneStep 这个动画剪辑,在 Cocos Creator 中,如果要播放对应的动画,必须将该动画配置在 Animation 组件的 Clips 属性内 在 PlayerController 中将如下的代码: @@ -606,11 +606,11 @@ jumpByStep(step: number) { > 如果您在不熟悉的情况下输入了错误的名字,可以选择删除再重新创建一个新的文件。 > 如果只是修改文件名,不修改里面的内容,会导致类名与文件名不一致,而无法在 **属性检查器** 内找到对应的类。 -创建好 GameManager 之后,我们可以将其挂载在场景内任何一个节点上,但出于清晰的考虑我们一般会选择创建一个同名的节点,并将 GameManager 挂载在他上面: +创建好 GameManager 之后,我们可以将其挂载在场景内任何一个节点上,但出于清晰的考虑我们一般会选择创建一个同名的节点,并将 GameManager 挂载在它上面: ![create-game-manager.png](images/create-game-manager.png) -首先我们需要让 GameManager 知道他应该用那个资源作为地图块来创建,因此我们可以在代码中添加 `boxPrefab` 来指向我们之前已经创建好的 Box 预制体。 +首先我们需要让 GameManager 知道它应该用哪个资源作为地图块来创建,因此我们可以在代码中添加 `boxPrefab` 来指向我们之前已经创建好的 Box 预制体。 ```ts @property({type: Prefab}) @@ -652,7 +652,7 @@ enum BlockType{ }; ``` -在 TypeScript 里面您可以将这个枚举放在类的上面,这样可以确保 GameManager 可以访问他,同时由于没有添加 export 关键字,这意味着这个枚举只有在 GameManager.ts 这个模块内才可以访问。 +在 TypeScript 里面您可以将这个枚举放在类的上面,这样可以确保 GameManager 可以访问它,同时由于没有添加 export 关键字,这意味着这个枚举只有在 GameManager.ts 这个模块内才可以访问。 接下来我们需要生成并记录下地图的生成情况,可以声明如下的成员变量来存储它们,同时如果想要在编辑器里面配置初始化时道路的长度,可以声明一个变量 `roadLength` 来记录: @@ -724,7 +724,7 @@ export class GameManager extends Component { > 所以 `Math.floor(Math.random() * 2)` 这段代码的意思很简单,就是从 [0, 2) 中随机取 1个数并向下取整,得到的结果是 0 或者 1,恰好和 枚举 `BlockType` 中声明的 `BT_NONE` 和 `BT_STONE` 对应。 > 顺便说一句,在 TypeScript 的枚举中,如果你没有给枚举赋值,那么枚举的值会顺序的从 0 开始分配。 - 通过 `spawnBlockByType` 来生成新的方块并将他通过 `setPosition` 方法放置到合适的位置。 + 通过 `spawnBlockByType` 来生成新的方块并将它通过 `setPosition` 方法放置到合适的位置。 > 在 Cocos Creator 中,设置节点的位置需要使用 `setPosition` 方法或者 `set position` 这样的读取器。