﻿1
00:00:03,990 --> 00:00:10,110
‫我们将创建一个fire函数, 并将其与鼠标左键相关联.

2
00:00:10,110 --> 00:00:18,210
‫在这里你可以看到我在我们的炮塔桶的顶端画了调试球体, 只是为了证明这个动作映射是有效的｡

3
00:00:18,210 --> 00:00:21,360
‫每当我单击鼠标左键时, 就会发生一些事情｡

4
00:00:21,720 --> 00:00:23,090
‫欢迎回来

5
00:00:23,100 --> 00:00:31,020
‫在这段视频中, 我们将讨论创建一个fire函数, 或者一个当我们想要生成射弹时可以使用的函数｡

6
00:00:31,020 --> 00:00:36,090
‫我们要创建一个fire函数, 并将其绑定到一个动作映射｡

7
00:00:36,090 --> 00:00:38,370
‫现在, 我们已经使用了轴映射｡

8
00:00:38,370 --> 00:00:40,260
‫动作映射也是类似的｡

9
00:00:40,260 --> 00:00:41,550
‫我们现在就谈吧｡

10
00:00:41,550 --> 00:00:47,280
‫下面是我们在项目设置中的fire操作映射的屏幕截图｡

11
00:00:47,280 --> 00:00:51,690
‫您将看到鼠标左键被分配给了fire动作映射｡

12
00:00:51,690 --> 00:00:55,290
‫现在, 动作映射与轴映射非常相似｡

13
00:00:55,290 --> 00:00:57,720
‫您可以为其指定一个键或按钮｡

14
00:00:57,720 --> 00:01:03,420
‫而且就像轴映射一样, 它需要一个可以绑定到动作映射的函数｡

15
00:01:03,420 --> 00:01:07,440
‫现在, 轴映射会触发游戏的每一帧｡

16
00:01:07,440 --> 00:01:13,590
‫它们类似于tic函数, 传入的浮点值根据按下的按钮而变化｡

17
00:01:13,590 --> 00:01:15,930
‫操作映射稍有不同｡

18
00:01:15,960 --> 00:01:25,200
‫绑定到动作映射的回调函数不接受任何输入参数, 所发生的一切就是当您按下按钮时, 调用该函数｡

19
00:01:25,200 --> 00:01:29,430
‫函数内部发生了什么是由我们作为开发人员决定的｡

20
00:01:29,430 --> 00:01:31,590
‫现在, 动作映射是一次性的｡

21
00:01:31,590 --> 00:01:33,030
‫并不是每一帧都有｡

22
00:01:33,030 --> 00:01:35,790
‫它们只在你按下按钮时发生一次｡

23
00:01:35,790 --> 00:01:40,950
‫因此, 如果您释放按钮并再次按下它, 则会再次调用该函数｡

24
00:01:40,980 --> 00:01:47,280
‫现在, 当我们将函数绑定到轴映射时, 我们使用了绑定轴来进行操作映射,

25
00:01:47,280 --> 00:01:52,650
‫我们使用了一个名为绑定操作的函数, 它接受与绑定轴类似的输入｡

26
00:01:52,650 --> 00:01:56,400
‫它将动作映射的名称作为字符串文字｡

27
00:01:56,430 --> 00:01:58,710
‫它还需要指向类的指针｡

28
00:01:58,710 --> 00:02:04,470
‫我们把这个函数绑定到, 我们可以使用这个函数, 当然, 它需要一个回调函数.

29
00:02:04,470 --> 00:02:11,580
‫现在它需要一个额外的参数, 绑定轴不需要作为枚举常量, 指定当我们按下按钮或释放按钮时,

30
00:02:11,580 --> 00:02:17,640
‫我们是否希望调用此函数｡

31
00:02:17,640 --> 00:02:25,350
‫因此, 该输入参数有两个选项：枚举常量, 即｡  e.计算 按下和枚举常数, i.

32
00:02:25,350 --> 00:02:25,350
‫e.计算 已释放｡

33
00:02:25,350 --> 00:02:31,110
‫这意味着我们可以调用传入i的绑定操作｡  e.计算 如果我们想绑定一个回调函数,

34
00:02:31,110 --> 00:02:36,960
‫当我们按下按钮, 而不是如果我们使用i｡ e.计算 释放按钮,

35
00:02:36,960 --> 00:02:40,380
‫则在为fire函数释放按钮时, 将调用回调函数｡

36
00:02:40,380 --> 00:02:42,900
‫我们关心的是什么时候按下按钮｡

37
00:02:42,900 --> 00:02:46,890
‫因此, 让我们创建一个fire函数, 并将其绑定到fire操作映射｡

38
00:02:46,890 --> 00:02:57,270
‫现在我在基地产卵和我在基地池塘的原因是因为这个消防功能是我们可以在坦克类和塔类中使用的东西｡

39
00:02:57,270 --> 00:03:03,030
‫所以如果我们把它放在基池里, 那么Tank和Tower都会继承这个功能｡

40
00:03:03,030 --> 00:03:10,230
‫既然坦克和发射塔都要发射炮弹, 那么它们就可以简单地继承这个函数并使用它｡

41
00:03:10,260 --> 00:03:16,530
‫现在, 因为我想访问两个子类中的函数, 所以我可以把这个函数放在protected部分, 就像rotate

42
00:03:16,530 --> 00:03:19,500
‫turret一样｡

43
00:03:19,500 --> 00:03:26,220
‫因此, 在旋转炮塔下, 我将创建一个名为fire的void函数,

44
00:03:26,220 --> 00:03:30,780
‫它不需要输入, 我们可以根据CPP在中定义fire函数｡

45
00:03:30,780 --> 00:03:36,990
‫这里基于CPP, 就在旋转炮塔下面, 我将放置fire函数,

46
00:03:36,990 --> 00:03:41,430
‫我们需要完全限定这个函数名, 并给予它一个函数体｡

47
00:03:41,430 --> 00:03:43,680
‫现在我们有了一个fire函数｡

48
00:03:43,680 --> 00:03:47,040
‫现在, 下一步是将其绑定到一个操作映射｡

49
00:03:47,040 --> 00:03:54,720
‫现在我们只想在tank类中绑定这个函数, 因为tank是唯一一个接受用户输入的类｡

50
00:03:54,720 --> 00:03:59,610
‫稍后我们将在tower类中调用fire函数, 但这将是我们创建的代码的结果,

51
00:03:59,610 --> 00:04:02,820
‫而不是用户输入的结果｡

52
00:04:02,820 --> 00:04:10,290
‫现在我们在坦克CP中, 我们要绑定它并设置玩家输入组件, 就像我们使用绑定轴一样｡

53
00:04:10,290 --> 00:04:12,900
‫所以我们要使用玩家输入组件｡

54
00:04:12,900 --> 00:04:18,720
‫所以玩家输入组件和函数是绑定动作｡

55
00:04:18,720 --> 00:04:24,780
‫现在第一个输入是字符串, 我们会像往常一样把它封装在一个文本宏中.

56
00:04:24,780 --> 00:04:27,810
‫这个动作映射叫做火｡

57
00:04:27,960 --> 00:04:34,080
‫下一个参数是枚举常量, 它决定了当我们按下按钮, 还是松开按钮时,

58
00:04:34,080 --> 00:04:39,000
‫是否调用这个函数.

59
00:04:39,000 --> 00:04:42,150
‫我们将使用, 我强调按下｡

60
00:04:43,170 --> 00:04:46,260
‫因为我们希望在按下按钮时调用函数｡

61
00:04:46,260 --> 00:04:49,520
‫接下来是用户类对象｡

62
00:04:49,530 --> 00:04:55,620
‫最后我们有回调函数, 所以我们可以说坦克起火了｡

63
00:04:55,770 --> 00:05:00,690
‫现在我们的fire函数被绑定到fire动作映射｡

64
00:05:00,690 --> 00:05:07,200
‫我们知道, 我们的fire函数与fire动作映射绑定, 但我们需要一些视觉确认,

65
00:05:07,200 --> 00:05:09,900
‫这就是你们的挑战.

66
00:05:09,900 --> 00:05:14,130
‫在fire函数中, 我希望你画一个调试球体｡

67
00:05:14,130 --> 00:05:20,640
‫我们已经看到了如何实现这一点, 因此, 请继续使用您认为合适的值来填充参数｡

68
00:05:20,670 --> 00:05:24,030
‫使用投射物产卵点的位置｡

69
00:05:24,270 --> 00:05:30,210
‫现在, 投射物繁殖点是一个使用场景组件, 您已经看到组件有一个名为get component

70
00:05:30,210 --> 00:05:32,100
‫location的函数｡

71
00:05:32,100 --> 00:05:33,780
‫这将返回一个F向量｡

72
00:05:33,810 --> 00:05:38,220
‫这是你可以用来获得抛射物产卵点的位置｡

73
00:05:38,220 --> 00:05:45,630
‫现在, 当你调用draw debug sphere时, 使用大约3秒的持续时间,

74
00:05:45,630 --> 00:05:47,760
‫这样我们就可以在球体消失之前看到它｡

75
00:05:47,760 --> 00:05:50,460
‫暂停视频并立即执行此操作｡

76
00:05:53,360 --> 00:05:53,550
‫好吧, 我会的

77
00:05:53,660 --> 00:05:56,810
‫所以我回到了巴斯池塘和巴斯池塘｡

78
00:05:57,110 --> 00:06:00,770
‫CP我将包括绘制调试助手｡

79
00:06:00,770 --> 00:06:03,500
‫这样我们就有权限画出调试球体｡

80
00:06:03,500 --> 00:06:07,010
‫所以我要说包括绘制调试助手｡

81
00:06:08,240 --> 00:06:12,320
‫现在在fire函数中, 我们可以画出调试球体｡

82
00:06:12,350 --> 00:06:18,050
‫现在, 我想做的第一件事是得到炮弹产卵点的位置｡

83
00:06:18,080 --> 00:06:29,870
‫现在我可以创建一个局部f向量, 我可以把这个叫做投射体生成点位置, 我可以用投射体生成点初始化它｡

84
00:06:32,030 --> 00:06:35,780
‫并调用get组件位置｡

85
00:06:35,780 --> 00:06:43,850
‫所以现在我有了投射体生成点的位置, 这是我在调用draw debug sphere时可以使用的｡

86
00:06:43,850 --> 00:06:46,130
‫所以我要调用draw debug sphere｡

87
00:06:47,450 --> 00:06:53,720
‫对于第一个输入, 我们需要世界, 我们知道我们可以用get world next得到世界｡

88
00:06:53,720 --> 00:06:59,810
‫我们需要球体的中心, 这将是我们的投射产卵点的位置｡

89
00:06:59,810 --> 00:07:04,190
‫这就是我作为第二个参数传入的内容｡

90
00:07:04,190 --> 00:07:06,190
‫接下来我们需要球体的半径｡

91
00:07:06,200 --> 00:07:08,330
‫现在我要有一个小球体｡

92
00:07:08,480 --> 00:07:15,920
‫我给予它一个半径, 比如说25 F, 对于线段的数量, 我只会使用12, 对于颜色,

93
00:07:15,920 --> 00:07:17,690
‫我可以使用F颜色｡

94
00:07:18,680 --> 00:07:21,380
‫Read Now四画持久线｡

95
00:07:21,380 --> 00:07:28,910
‫我们要让我们的行停留3秒, 这样我们就可以使它为假, 因为我们不想让它们永远持续下去｡

96
00:07:28,940 --> 00:07:36,380
‫我们将为给予调试球体提供3个F的生命周期, 现在我们继续编译它, 我将点击播放并单击, 现在我们可以看到我们的调试球体,

97
00:07:36,380 --> 00:07:43,310
‫当然, 它在3秒后消失｡

98
00:07:43,640 --> 00:07:53,450
‫这很好地证实了我们的动作映射是有效的, 它也为我们提供了投射物产卵点位置的验证｡

99
00:07:53,450 --> 00:08:02,420
‫因此, 一旦我们真正开始繁殖投射物, 我们就知道它们会在调试球体所指示的正确位置繁殖｡

100
00:08:02,420 --> 00:08:03,500
‫所以这是伟大的｡

101
00:08:03,650 --> 00:08:09,470
‫因此, 在本视频中, 我们创建了一个fire函数, 并将其绑定到fire动作映射｡

102
00:08:09,740 --> 00:08:15,800
‫为了证明它是有效的, 我们在抛射体的产卵点画了一个调试球, 每当我们点击鼠标左键,

103
00:08:15,830 --> 00:08:21,710
‫我们就有了一个发射功能, 我们几乎准备好开始产卵抛射体了｡

104
00:08:21,710 --> 00:08:25,250
‫我们还把这个函数放在了基类pong中｡

105
00:08:25,250 --> 00:08:27,980
‫这样我们的塔也可以使用它｡

106
00:08:27,980 --> 00:08:32,990
‫在下一个视频中, 我们将讨论我们的塔将如何使用此功能｡

107
00:08:33,530 --> 00:08:34,460
‫我很快就会见到你的｡

