﻿1
00:00:04,350 --> 00:00:05,490
‫你好, 欢迎｡

2
00:00:05,490 --> 00:00:10,680
‫在这节课中,

3
00:00:10,680 --> 00:00:21,780
‫我们将学习如何访问指针另一端的内容, 这样我们的mover组件就可以从它所驻留的参与者那里获取属性, 比如获取参与者的名字或者位置｡

4
00:00:21,780 --> 00:00:24,210
‫让我们深入了解一下, 看看我们如何做到这一点｡

5
00:00:24,540 --> 00:00:29,730
‫所以能够得到一个指针或者一个参与者的地址是非常好的｡

6
00:00:29,730 --> 00:00:33,660
‫但我们确实需要能够真正地与演员本身做一些事情｡

7
00:00:34,050 --> 00:00:39,630
‫如果我们只看演员的话, 这个过程有点难以理解｡

8
00:00:39,630 --> 00:00:47,460
‫我们将在tick组件中创建一些指向float的指针｡

9
00:00:47,460 --> 00:00:54,990
‫我们从创建一个float开始, 我们把它命名为float, 并把它的值设为5.

10
00:00:55,500 --> 00:01:01,740
‫然后我们创建一个浮点指针, 我把它命名为你的float,

11
00:01:01,740 --> 00:01:06,360
‫我们把它设为我的float的地址.

12
00:01:06,570 --> 00:01:09,900
‫所以它们都指向内存中的同一个地址｡

13
00:01:09,900 --> 00:01:17,010
‫不同的是, 你的浮点数是一个地址, 所以我不能直接打印出值｡

14
00:01:17,010 --> 00:01:29,940
‫所以如果我想做一个u log, 我想说你的浮点数值等于F的百分比, 然后我把你的浮点数｡

15
00:01:29,940 --> 00:01:36,150
‫这是行不通的, 因为你的浮点数是一个指针, 而不是一个真正的浮点数｡

16
00:01:36,600 --> 00:01:41,100
‫所以我们需要做的是｡

17
00:01:41,870 --> 00:01:44,960
‫获取该位置的值｡

18
00:01:45,290 --> 00:01:51,620
‫我们可以这样做, 如果我将它存储在一个新的浮点变量中, 称为float value,

19
00:01:51,620 --> 00:01:56,780
‫然后我使用D引用操作符, 它实际上也是一个星星｡

20
00:01:56,780 --> 00:02:00,710
‫我们把它放在我们要引用的东西之前｡

21
00:02:00,710 --> 00:02:04,760
‫然后我们给予它一个指向D引用的指针, 在这里就是浮点数｡

22
00:02:05,030 --> 00:02:09,980
‫有点奇怪的是, 我们在两种不同的情况下使用这些星星｡

23
00:02:09,980 --> 00:02:16,010
‫第一, 我们在类型后面使用星星, 它告诉我们它是一个浮点指针｡

24
00:02:16,010 --> 00:02:18,970
‫当你在类型中使用它的时候, 它意味着它是一个指针｡

25
00:02:18,980 --> 00:02:28,070
‫当你在指针表达式前使用星星时, 你所做的就是, 给我这个位置的值｡

26
00:02:28,340 --> 00:02:33,200
‫这样就得到了这个值, 然后把它复制到float value中, 现在是float value.

27
00:02:33,200 --> 00:02:36,680
‫我们可以像这样打印出来｡

28
00:02:36,680 --> 00:02:41,200
‫因此, 在所有这些扭曲的情况下, 让我们继续编译它, 看看它的运行情况｡

29
00:02:41,210 --> 00:02:42,230
‫我们开始吧｡

30
00:02:42,230 --> 00:02:48,170
‫当然, 它说你的浮点数值是5, 这是我们最初的值｡

31
00:02:48,800 --> 00:02:53,630
‫通常我们不会把中间值存储在变量中, 因为那样会造成浪费.

32
00:02:53,630 --> 00:02:55,640
‫它在复制我们不需要的东西｡

33
00:02:55,640 --> 00:03:00,800
‫所以我们能做的就是直接在表达式中需要的地方使用它｡

34
00:03:00,800 --> 00:03:07,940
‫所以你的float值应该是星星, 你的float是这样的, 这将以完全相同的方式工作,

35
00:03:07,940 --> 00:03:11,600
‫除了这次它不会复制到一个不必要的变量中｡

36
00:03:11,630 --> 00:03:16,490
‫现在假设我们想在这里得到所有者演员的名字｡

37
00:03:16,490 --> 00:03:25,490
‫我们要做的是, 把浮点数的内容去掉, 我们要引用所有者指针.

38
00:03:25,490 --> 00:03:29,830
‫所以我们做星星老板, 这实际上让我们到演员本身｡

39
00:03:29,840 --> 00:03:36,920
‫然后我们可以用一对括号把所有者括起来, 然后我们可以做一个点｡

40
00:03:36,920 --> 00:03:44,990
‫我们已经把actor从表达式中取出来了, 现在我们可以用一个点, 从actor里面取一些东西, 这样我们就可以得到actor, name或者label,

41
00:03:44,990 --> 00:03:53,030
‫它会返回一个f字符串, 这样我们就可以得到f字符串, name, equals,

42
00:03:53,030 --> 00:04:04,550
‫然后我们可以打印出mover, owner, percent, SW, 然后这里不用owner, 我们会用name开始,

43
00:04:04,550 --> 00:04:07,760
‫或者把它取出来｡

44
00:04:07,760 --> 00:04:10,430
‫我们需要把星星放在名字前面｡

45
00:04:10,430 --> 00:04:13,250
‫这是星星操作员的另一个用途｡

46
00:04:13,250 --> 00:04:15,230
‫我们已经遇到三个了｡

47
00:04:15,230 --> 00:04:16,700
‫一个是用这根绳子｡

48
00:04:16,700 --> 00:04:18,020
‫这是我们第一次看到它｡

49
00:04:18,020 --> 00:04:24,680
‫这里是类型, 这里也是D, 引用了很多很多相同字符的用法.

50
00:04:24,770 --> 00:04:27,050
‫但C++就是这样｡

51
00:04:27,080 --> 00:04:29,120
‫让我们去试试吧, 然后按播放｡

52
00:04:29,660 --> 00:04:35,180
‫现在你可以看到它打印出了移动器所连接的参与者的名字｡

53
00:04:35,180 --> 00:04:44,600
‫我们已经使用D引用操作符访问了该指针, 并且能够在不同的对象上调用函数｡

54
00:04:44,600 --> 00:04:50,780
‫实际上有一个更简洁的语法来实现这个,

55
00:04:50,780 --> 00:05:02,390
‫因为我们经常想从一个指针对象中得到一个函数或者属性, 而不是必须用括号来做, 因为它们引用了运算符, 我们可以把它们合并成一个｡

56
00:05:02,390 --> 00:05:09,530
‫我们可以把这些都去掉或者移动点, 然后用这个箭头操作符, 这样我们就得到了所有者箭头, 得到演员,

57
00:05:09,530 --> 00:05:14,960
‫名字或者标签, 这做的事情完全一样, 只是写起来容易多了｡

58
00:05:14,960 --> 00:05:21,680
‫所以一般来说, 最后的规则是, 如果我们有一个指针, 我们就用箭头操作符｡

59
00:05:21,680 --> 00:05:29,360
‫如果我们使用的是一个结构体, 比如一个F字符串或者一个F向量, 我们就使用点操作符｡

60
00:05:29,420 --> 00:05:37,010
‫所以我想让你们打印出演员的位置, 用我们新学到的指针的用法｡

61
00:05:37,010 --> 00:05:40,730
‫所以我想让你打电话去找演员的位置｡

62
00:05:40,730 --> 00:05:47,330
‫你将使用箭头操作符来查看指针并调用对象上的函数｡

63
00:05:47,330 --> 00:05:51,410
‫在另一端, 你要存储由此产生的F向量｡

64
00:05:51,410 --> 00:06:02,060
‫然后调用两个压缩字符串, 将结果存储在一个新的F字符串变量中, 并将其输出到日志中｡

65
00:06:02,090 --> 00:06:04,220
‫暂停视频, 开始体验｡

66
00:06:07,520 --> 00:06:07,880
‫好吧, 我会的

67
00:06:07,880 --> 00:06:08,840
‫欢迎回来｡

68
00:06:08,840 --> 00:06:24,890
‫我将创建一个新的F向量, 叫做所有者位置, 然后我将做所有者箭头, 得到参与者位置｡

69
00:06:24,890 --> 00:06:27,650
‫然后把它转换成一个字符串｡

70
00:06:27,650 --> 00:06:35,660
‫我有一个F字符串, 叫做所有者位置字符串, 它等于所有者位置点,

71
00:06:35,660 --> 00:06:42,760
‫来压缩字符串, 就像这样.

72
00:06:42,770 --> 00:06:45,020
‫现在我们有了自己的位置字符串｡

73
00:06:45,020 --> 00:06:46,880
‫我们可以把它打印到日志上｡

74
00:06:46,880 --> 00:06:57,290
‫我会说, mover的所有者是这个, location, percent, 我们会有另一个, 星星, 所有者,

75
00:06:57,290 --> 00:07:06,710
‫location, 字符串, 就像这样, 然后点击控制键, alt, f11, 我们会继续,

76
00:07:06,710 --> 00:07:15,860
‫点击播放, 他们会说, 我们得到了演员的名字, 以及它的位置, 作为一个字符串打印出来｡

77
00:07:15,860 --> 00:07:21,440
‫所以现在我们可以看到指针的力量, 以及能够在指针上调用函数的力量｡

78
00:07:21,440 --> 00:07:28,520
‫它允许我们在类的不同实例之间进行通信, 并使我们的对象更加有用｡

79
00:07:28,520 --> 00:07:30,290
‫我们下节课再见｡

