Skip to content

Commit

Permalink
Merge pull request #3070 from LuShuchen/patch-1
Browse files Browse the repository at this point in the history
Update index.md to fix some typos
  • Loading branch information
MrKylinGithub authored Nov 25, 2024
2 parents e16b270 + 5423bc0 commit ecabaa8
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions versions/3.8/zh/getting-started/first-game-2d/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Cocos Creator 提供不同类型的模板和示例,您可以点击 **模板**

## 创建主角

在 2D 游戏中,通常我们会使用图片来作为主角,Cocos Creator 提供了一系列内置的 UI 图片,您可以在 `internal/default_ui/` 这个目录中找到他们,也可以随意的在您的项目中使用。通常我们在制作原型时,会采用这些图片。
在 2D 游戏中,通常我们会使用图片来作为主角,Cocos Creator 提供了一系列内置的 UI 图片,您可以在 `internal/default_ui/` 这个目录中找到它们,也可以随意的在您的项目中使用。通常我们在制作原型时,会采用这些图片。

**层级管理** 中点击右键,可以创建不同的节点类型,请尝试创建一个 Sprite 类型的节点:

Expand Down Expand Up @@ -83,7 +83,7 @@ Cocos Creator 提供不同类型的模板和示例,您可以点击 **模板**

![create-scripts.gif](images/create-scripts.gif)

这样由引擎模板创建的脚本为组件,他的代码如下
这样由引擎模板创建的脚本为组件,它的代码如下

```ts
import { _decorator, Component, Node } from 'cc';
Expand Down Expand Up @@ -122,9 +122,9 @@ export class PlayerController extends Component {

### 预制体

预制体是引擎的一种特殊资源,他可以将节点作为一种资源持久化的保存在 **资源管理器** 里面,这样就可以复用到其他情景。
预制体是引擎的一种特殊资源,它可以将节点作为一种资源持久化的保存在 **资源管理器** 里面,这样就可以复用到其他情景。

制作预制体的方法也比较简单,我们只需找到刚刚制作的 Box 节点,拖拽他到 **资源管理器** 里面。
制作预制体的方法也比较简单,我们只需找到刚刚制作的 Box 节点,拖拽它到 **资源管理器** 里面。

场景内的 Box 节点,运行游戏之前可以将它删除。

Expand Down Expand Up @@ -154,7 +154,7 @@ export class PlayerController extends Component {
## 完善角色

虽然我们角色已经制作好了,但是他完全不能动起来,也没有任何代码可以驱动他。因此我们接下来将从这两个方
虽然我们角色已经制作好了,但是它完全不能动起来,也没有任何代码可以驱动它。因此我们接下来将从这两个方
面努力去完善角色。

### 让角色动起来
Expand Down Expand Up @@ -216,7 +216,7 @@ onMouseUp(event: EventMouse) {

#### 移动角色

对于大多数游戏角色来说,动起来的概念就是将其位置发生变化,对于匀速移动的物体,他移动后的位置应该是如下描述的
对于大多数游戏角色来说,动起来的概念就是将其位置发生变化,对于匀速移动的物体,它移动后的位置应该是如下描述的

```txt
P_1 = P_0 + v*t
Expand All @@ -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 中添加上述的属性:
Expand Down Expand Up @@ -277,7 +277,7 @@ jumpByStep(step: number) {
}
```

Vec3 是 三维矢量 Vector3 的缩写,这个类会提供三维矢量的存储和一些计算的方法。其中 `Vec3.add` 是他提供的静态方法,用于计算两个向量相加,并将结果存储在第一个参数 `_targetPos` 里面。
Vec3 是 三维矢量 Vector3 的缩写,这个类会提供三维矢量的存储和一些计算的方法。其中 `Vec3.add` 是它提供的静态方法,用于计算两个向量相加,并将结果存储在第一个参数 `_targetPos` 里面。

不是 2D 游戏吗?为什么要操作 Vector3。虽然我们在编辑器看到的位置信息都是 2D 的但是在引擎中的计算都是实际上以 3D 为基础的,因此在计算是都会采用三维矢量作为运算位置的基础。

Expand Down Expand Up @@ -306,7 +306,7 @@ update (deltaTime: number) {

![without-scale.gif](images/without-scale.gif)

需要注意一点,在 2D 世界里面,如果位移一个单位,那么这个位置不会很明显,这是因为我们的 Cavans 设定为 960 x 640, 因此横向移动 1 个单位,他相当于移动 Canvas1/960
需要注意一点,在 2D 世界里面,如果位移一个单位,那么这个位置不会很明显,这是因为我们的 Cavans 设定为 960 x 640, 因此横向移动 1 个单位,它相当于移动 Canvas1/960

因此我们要对移动的单位进行放大,这里可以在 PlayerController 上面添加一个用于记录放大比的常量:

Expand Down Expand Up @@ -469,7 +469,7 @@ animation.play('oneStep');
```

- animationBody 动画的动画组件的 ‘引用’。
- play 指的是播放动画的方法,他的参数是我们之前创建好的 oneStep 这个动画剪辑,在 Cocos Creator 中,如果要播放对应的动画,必须将该动画配置在 Animation 组件的 Clips 属性内
- play 指的是播放动画的方法,它的参数是我们之前创建好的 oneStep 这个动画剪辑,在 Cocos Creator 中,如果要播放对应的动画,必须将该动画配置在 Animation 组件的 Clips 属性内

PlayerController 中将如下的代码:

Expand Down Expand Up @@ -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})
Expand Down Expand Up @@ -652,7 +652,7 @@ enum BlockType{
};
```

TypeScript 里面您可以将这个枚举放在类的上面,这样可以确保 GameManager 可以访问他,同时由于没有添加 export 关键字,这意味着这个枚举只有在 GameManager.ts 这个模块内才可以访问。
TypeScript 里面您可以将这个枚举放在类的上面,这样可以确保 GameManager 可以访问它,同时由于没有添加 export 关键字,这意味着这个枚举只有在 GameManager.ts 这个模块内才可以访问。

接下来我们需要生成并记录下地图的生成情况,可以声明如下的成员变量来存储它们,同时如果想要在编辑器里面配置初始化时道路的长度,可以声明一个变量 `roadLength` 来记录:

Expand Down Expand Up @@ -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` 这样的读取器。

Expand Down

0 comments on commit ecabaa8

Please sign in to comment.