﻿1
00:00:04,390 --> 00:00:05,410
‫你好, 欢迎｡

2
00:00:05,420 --> 00:00:11,230
‫在这节课里,

3
00:00:11,230 --> 00:00:17,680
‫我们将引入成员函数, 这是一个安全的正规函数, 它能让我们掌握一个特定向量的方向｡

4
00:00:17,680 --> 00:00:19,900
‫让我们深入了解一下它是如何工作的｡

5
00:00:20,690 --> 00:00:28,200
‫所以我们让平台反向返回的简单方法就是以我们测试过的速度工作｡

6
00:00:28,220 --> 00:00:34,130
‫但是如果我说, 嘿, 让我们把这个平台的速度提高十倍, 会发生什么？

7
00:00:34,160 --> 00:00:36,570
‫让我们继续玩下去, 看看会发生什么｡

8
00:00:36,590 --> 00:00:43,710
‫突然, 平台向前跳了很多, 它不再像以前那样在同一个位置盘旋｡

9
00:00:43,730 --> 00:00:53,330
‫这是因为, 当我们把当前位置设为起始位置时, 它不一定就是移动的距离,

10
00:00:53,330 --> 00:00:58,910
‫我们可能会过冲.

11
00:00:58,910 --> 00:01:01,490
‫这一点在if语句中得到了体现｡

12
00:01:01,490 --> 00:01:07,310
‫我们说移动的距离大于移动的距离, 这意味着我们会过冲｡

13
00:01:07,310 --> 00:01:11,680
‫我们必须有overshot才能触发这个if语句｡

14
00:01:11,690 --> 00:01:17,840
‫但问题是增加多少, 这在很大程度上取决于Delta时间的大小｡

15
00:01:17,840 --> 00:01:23,690
‫我们可以过冲相当大的量, 特别是如果平台速度很大,

16
00:01:23,690 --> 00:01:26,990
‫这意味着我们的起始位置可能会随时间漂移｡

17
00:01:26,990 --> 00:01:28,550
‫它可能不会保持不变｡

18
00:01:28,550 --> 00:01:39,770
‫因此, 更好的方法是使用精确的移动距离计算从原始起始位置移动到新位置所需的距离｡

19
00:01:39,770 --> 00:01:43,040
‫让我们来想象一下这个来回的计算｡

20
00:01:43,040 --> 00:01:46,430
‫我们说我们在它的起始位置有一个平台｡

21
00:01:46,520 --> 00:01:53,090
‫我们说它有一个速度, 我们可以用一个箭头来表示它的方向和大小, 它也有一个距离,

22
00:01:53,090 --> 00:01:55,840
‫我们希望它移动｡

23
00:01:55,850 --> 00:01:58,160
‫我们就用这个大括号来表示｡

24
00:01:58,700 --> 00:02:05,720
‫现在, 我们要说的是, 我们要找出平台在终点的确切位置, 不是过冲,

25
00:02:05,720 --> 00:02:09,960
‫而是准确的终点位置.

26
00:02:09,980 --> 00:02:14,960
‫现在, 我们可以通过速度箭头的方向来做这个｡

27
00:02:14,960 --> 00:02:22,610
‫所以用矢量的说法, 这就是箭头的法线, 它基本上把箭头的大小缩小到1｡

28
00:02:22,610 --> 00:02:25,970
‫所以我们得到的方向是一个大小为1的方向｡

29
00:02:25,970 --> 00:02:31,700
‫这就可以让我们知道这个数, 基本上就是速度的大小, 我们的速度有多快｡

30
00:02:32,090 --> 00:02:39,080
‫然后我们可以用这个方向乘以距离, 给予一个箭头,

31
00:02:39,080 --> 00:02:45,230
‫它给出了从起点到终点的整个运动过程.

32
00:02:45,230 --> 00:02:46,310
‫-没错—没错

33
00:02:46,310 --> 00:02:49,760
‫让我们看看如何在C++中做到这一点｡

34
00:02:49,760 --> 00:02:52,460
‫我们要找的是一个新的开始位置｡

35
00:02:52,460 --> 00:02:59,780
‫我们先把现在的方法去掉, 我们会有一个起始位置, 它等于, 什么呢？

36
00:02:59,780 --> 00:03:05,150
‫首先, 它等于,

37
00:03:05,150 --> 00:03:10,850
‫起始位置加上某个值, 因为我们从这里开始, 加上这个绿色矢量, 就可以到达终点.

38
00:03:10,850 --> 00:03:13,250
‫那绿色的向量是什么

39
00:03:13,670 --> 00:03:18,770
‫这就是我们需要得到的平台速度的法向｡

40
00:03:18,770 --> 00:03:24,740
‫为了让我们更容易理解, 我将把它分成单独的变量｡

41
00:03:24,740 --> 00:03:32,630
‫所以我们要创建一个新的F向量类型的变量, 我称之为移动方向, 这样我们就可以非常清楚地知道我们要在其中存储什么,

42
00:03:32,630 --> 00:03:38,060
‫然后我们从平台速度点中得到这个,

43
00:03:38,060 --> 00:03:47,780
‫得到安全, 正常, 然后在最后加上括号｡

44
00:03:47,780 --> 00:03:48,950
‫这是怎么回事？

45
00:03:48,950 --> 00:03:50,660
‫我们以前没见过这种情况｡

46
00:03:50,660 --> 00:03:54,770
‫我们已经用Dot得到了向量的分量, X, Y和Z｡

47
00:03:54,770 --> 00:03:55,970
‫这些都是变数｡

48
00:03:56,060 --> 00:04:08,510
‫但是在C++和一般的面向对象编程中, 我们也有存在于类上的函数, 所以我们可以使用DOT操作符来获取其中的一个｡

49
00:04:08,510 --> 00:04:13,250
‫当我们试图把它从类本身中取出来时, 我们使用了冒号｡

50
00:04:13,250 --> 00:04:20,480
‫但是当我们想用实际的矢量本身来做一个运算时, 也就是平台速度矢量,

51
00:04:20,480 --> 00:04:25,520
‫我们可以用点运算符来得到这个矢量的法线｡

52
00:04:25,520 --> 00:04:30,830
‫这就是我们在这里所做的, 使用成员函数而不是成员变量｡

53
00:04:31,070 --> 00:04:36,770
‫所以我们得到了平台速度的安全法线, 我们在行尾加上分号, 因为这里有一个变量,

54
00:04:36,770 --> 00:04:41,360
‫它本质上就是我们所说的运动方向｡

55
00:04:41,360 --> 00:04:50,330
‫现在, 我们可以在下一行中使用它, 将移动方向乘以配置的移动距离,

56
00:04:50,330 --> 00:04:56,870
‫因为我们希望精确移动到终点, 而不是过冲｡

57
00:04:56,870 --> 00:05:01,850
‫完成后, 我们应该将平台移到终端位置｡

58
00:05:01,850 --> 00:05:08,630
‫因此, 我们要将演员位置设置为起始位置, 因为否则,

59
00:05:08,630 --> 00:05:16,460
‫我们的平台将过冲, 并超过结束位置, 因为我们将使用当前位置更新它, 即过冲位置｡

60
00:05:16,700 --> 00:05:20,000
‫这样我们就可以精确地移动到终点｡

61
00:05:20,050 --> 00:05:23,710
‫然后从新的起始位置开始｡

62
00:05:23,740 --> 00:05:31,420
‫在完成所有这些之后, 更新平台速度非常重要, 因为我们要使用它来掌握移动方向｡

63
00:05:31,420 --> 00:05:36,230
‫在我们设置演员位置后, 我将更新平台速度｡

64
00:05:36,250 --> 00:05:40,690
‫现在让我们回到一个卷轴, 点击编译, 看看这个问题是否得到解决｡

65
00:05:40,690 --> 00:05:47,230
‫我们的平台前后移动的问题, 让我们关闭这个终端, 并点击播放｡

66
00:05:47,230 --> 00:05:53,800
‫现在, 如果我们看一下, 平台正在快速移动,

67
00:05:53,800 --> 00:05:56,020
‫但它在我们预期的起点和终点附近可靠地移动｡

68
00:05:56,020 --> 00:05:58,300
‫这就是我这堂课要讲的内容｡

69
00:05:58,300 --> 00:06:03,880
‫我们只是纠正了一个小错误, 这个错误可能会突然出现在我们的一些平台配置中｡

70
00:06:03,880 --> 00:06:05,380
‫下次见｡

