﻿1
00:00:03,990 --> 00:00:09,630
‫Então vamos criar uma função de fogo e vamos associar esta função com o botão esquerdo do

2
00:00:09,630 --> 00:00:10,110
‫mouse.

3
00:00:10,110 --> 00:00:16,350
‫E aqui você pode ver que estou desenhando esferas de depuração na ponta do barril da nossa torre apenas para provar que

4
00:00:16,350 --> 00:00:18,210
‫esse mapeamento de ação está funcionando.

5
00:00:18,210 --> 00:00:21,360
‫Sempre que clico com o botão esquerdo do mouse, algo está acontecendo.

6
00:00:21,720 --> 00:00:23,090
‫Ei, bem-vindo de volta.

7
00:00:23,100 --> 00:00:28,770
‫Neste vídeo, vamos falar sobre a criação de uma função de fogo ou uma função que podemos

8
00:00:28,770 --> 00:00:31,020
‫usar quando queremos gerar nossos projéteis.

9
00:00:31,020 --> 00:00:36,090
‫Então, vamos criar uma função fire e vamos vinculá-la a um mapeamento de ação.

10
00:00:36,090 --> 00:00:38,370
‫Agora, estamos usando mapeamentos de eixos.

11
00:00:38,370 --> 00:00:40,260
‫Um mapeamento de ação é semelhante.

12
00:00:40,260 --> 00:00:41,550
‫Vamos falar sobre isso agora.

13
00:00:41,550 --> 00:00:47,280
‫Aqui está uma seção de uma captura de tela do mapeamento de ação de fogo que temos em nossas configurações de projeto.

14
00:00:47,280 --> 00:00:51,690
‫Você verá que temos o botão esquerdo do mouse atribuído ao mapeamento de ação de fogo.

15
00:00:51,690 --> 00:00:55,290
‫Agora, um mapeamento de ação é muito parecido com um mapeamento de eixo.

16
00:00:55,290 --> 00:00:57,720
‫Você pode atribuir uma tecla ou um botão a ele.

17
00:00:57,720 --> 00:01:03,420
‫E assim como um mapeamento de eixo, ele requer uma função que pode ser vinculada ao mapeamento de ação.

18
00:01:03,420 --> 00:01:07,440
‫Agora, mapeamentos de eixo disparam cada quadro do jogo.

19
00:01:07,440 --> 00:01:12,840
‫Eles são como a função tic e o valor float passado em mudanças dependendo de quais botões estão

20
00:01:12,840 --> 00:01:13,590
‫sendo pressionados.

21
00:01:13,590 --> 00:01:15,930
‫Os mapeamentos de ação são um pouco diferentes.

22
00:01:15,960 --> 00:01:22,740
‫Uma função de retorno de chamada vinculada a um mapeamento de ação não recebe parâmetros de entrada, e tudo o que acontece é que quando

23
00:01:22,740 --> 00:01:25,200
‫você pressiona o botão, a função é chamada.

24
00:01:25,200 --> 00:01:29,430
‫O que acontece dentro da função depende de nós como desenvolvedores.

25
00:01:29,430 --> 00:01:31,590
‫Agora, os mapeamentos de ação são únicos.

26
00:01:31,590 --> 00:01:33,030
‫Eles não acontecem a cada frame.

27
00:01:33,030 --> 00:01:35,790
‫Eles só acontecem uma vez quando você pressiona o botão.

28
00:01:35,790 --> 00:01:40,950
‫Portanto, se você soltar o botão e pressioná-lo novamente, a função será chamada mais uma vez.

29
00:01:40,980 --> 00:01:47,280
‫Agora, quando ligamos funções aos mapeamentos de eixo, usamos o eixo de ligação para mapeamentos de ação, usamos

30
00:01:47,280 --> 00:01:52,650
‫uma função chamada ação de ligação e recebe entradas semelhantes ao eixo de ligação.

31
00:01:52,650 --> 00:01:56,400
‫Leva o nome do mapeamento de ação como um literal de string.

32
00:01:56,430 --> 00:01:58,710
‫Também requer um ponteiro para a classe.

33
00:01:58,710 --> 00:02:04,470
‫Estamos vinculando a função na qual podemos usar isso, e é preciso, é claro, uma função de retorno de chamada.

34
00:02:04,470 --> 00:02:11,580
‫Agora, um parâmetro adicional que o eixo de ligação não requer como uma constante de enumeração especificando se queremos

35
00:02:11,580 --> 00:02:17,130
‫ou não que essa função seja chamada quando pressionamos o botão ou quando soltamos o

36
00:02:17,130 --> 00:02:17,640
‫botão.

37
00:02:17,640 --> 00:02:24,000
‫Portanto, existem duas opções para este parâmetro de entrada, a constante enum, i. e. pressionado e a constante enum,

38
00:02:24,000 --> 00:02:25,350
‫i. e. lançado.

39
00:02:25,350 --> 00:02:31,110
‫Isso significa que podemos chamar a ação de ligação passando em i. e. pressionado se quisermos vincular uma função de retorno de chamada

40
00:02:31,110 --> 00:02:36,960
‫para quando pressionamos o botão e, em vez disso, se usamos i. e. liberado então nossa função de retorno de

41
00:02:36,960 --> 00:02:40,380
‫chamada seria chamada quando o botão fosse liberado para nossa função de fogo.

42
00:02:40,380 --> 00:02:42,900
‫Estamos preocupados com quando apertamos o botão.

43
00:02:42,900 --> 00:02:46,890
‫Então, vamos fazer uma função de fogo e vinculá-la ao mapeamento de ação de fogo.

44
00:02:46,890 --> 00:02:53,490
‫Agora estou aqui na base spawn e a razão pela qual estou aqui na base pond é porque esta função de fogo

45
00:02:53,490 --> 00:02:57,270
‫é algo que podemos usar na classe tanque e na classe torre.

46
00:02:57,270 --> 00:03:03,030
‫Então, se o colocarmos aqui no tanque base, tanto o tanque quanto a torre herdarão essa função.

47
00:03:03,030 --> 00:03:08,850
‫E como tanto o tanque quanto a torre vão disparar projéteis, eles podem simplesmente herdar a

48
00:03:08,850 --> 00:03:10,230
‫função e usá-la.

49
00:03:10,260 --> 00:03:16,530
‫Agora, como gostaria de acessar a função em ambas as classes filhas, posso colocar essa função aqui

50
00:03:16,530 --> 00:03:19,500
‫na seção protegida, assim como girar a torre.

51
00:03:19,500 --> 00:03:26,220
‫Então, sob rotação da torre, vou criar uma função void chamada fogo que não recebe entradas e podemos seguir

52
00:03:26,220 --> 00:03:30,780
‫em frente e definir a função de fogo com base no CPP.

53
00:03:30,780 --> 00:03:36,990
‫Então, aqui é baseado no CPP e logo abaixo da torre de rotação, vou colocar a função de fogo e precisamos

54
00:03:36,990 --> 00:03:41,430
‫qualificar totalmente esse nome de função e dar a ela um corpo de função.

55
00:03:41,430 --> 00:03:43,680
‫Então agora temos uma função de fogo.

56
00:03:43,680 --> 00:03:47,040
‫Agora, o próximo passo é vincular isso a um mapeamento de ação.

57
00:03:47,040 --> 00:03:53,190
‫Agora, queremos apenas vincular esta função na classe tank porque o tank é a única classe que receberá

58
00:03:53,190 --> 00:03:54,720
‫a entrada do usuário.

59
00:03:54,720 --> 00:03:59,610
‫Chamaremos a função fire na classe tower mais tarde, mas isso será resultado do

60
00:03:59,610 --> 00:04:02,820
‫código que criamos e não da entrada do usuário.

61
00:04:02,820 --> 00:04:08,730
‫Então, estamos aqui no Tank CP e vamos vincular isso e configurar o componente de entrada do jogador, assim como

62
00:04:08,730 --> 00:04:10,290
‫usamos o eixo de vinculação.

63
00:04:10,290 --> 00:04:12,900
‫Então, vamos usar o componente de entrada do player.

64
00:04:12,900 --> 00:04:18,720
‫Portanto, o componente de entrada do jogador e a função serão a ação de ligação.

65
00:04:18,720 --> 00:04:24,150
‫Agora, a primeira entrada será a string literal, que vamos envolver em uma macro de texto como de

66
00:04:24,150 --> 00:04:24,780
‫costume.

67
00:04:24,780 --> 00:04:27,810
‫E esse mapeamento de ação é chamado de fogo.

68
00:04:27,960 --> 00:04:34,080
‫Agora, o próximo parâmetro será a constante enum que determina se queremos ou não que essa

69
00:04:34,080 --> 00:04:39,000
‫função seja chamada quando pressionamos o botão versus quando soltamos o botão.

70
00:04:39,000 --> 00:04:42,150
‫E vamos usar, sublinho pressionado.

71
00:04:43,170 --> 00:04:46,260
‫Como gostaríamos que nossa função fosse chamada quando pressionamos o botão.

72
00:04:46,260 --> 00:04:49,520
‫Agora, o próximo é o objeto de classe de usuário que será este.

73
00:04:49,530 --> 00:04:55,620
‫E, finalmente, temos nossa função de retorno de chamada para que possamos dizer um incêndio de tanque.

74
00:04:55,770 --> 00:05:00,690
‫E agora nossa função de fogo está vinculada ao mapeamento de ação de fogo.

75
00:05:00,690 --> 00:05:07,200
‫Portanto, sabemos que nossa função de fogo está vinculada ao mapeamento de ação de fogo, mas gostaríamos de alguma confirmação

76
00:05:07,200 --> 00:05:09,900
‫visual e esse é o seu desafio.

77
00:05:09,900 --> 00:05:14,130
‫Então, na função fire, eu gostaria que você desenhasse uma esfera de depuração.

78
00:05:14,130 --> 00:05:19,440
‫Já vimos como fazer isso, então vá em frente e preencha os parâmetros com os valores que

79
00:05:19,440 --> 00:05:20,640
‫você achar apropriados.

80
00:05:20,670 --> 00:05:24,030
‫Use a localização do ponto de desova do projétil.

81
00:05:24,270 --> 00:05:30,210
‫Agora, o ponto de geração do projétil é um componente de cena de uso e você viu que os componentes têm uma

82
00:05:30,210 --> 00:05:32,100
‫função chamada obter localização do componente.

83
00:05:32,100 --> 00:05:33,780
‫Isso retorna um vetor F.

84
00:05:33,810 --> 00:05:38,220
‫Isto é o que você pode usar para obter a localização do ponto de desova do projétil.

85
00:05:38,220 --> 00:05:45,630
‫Agora quando você chamar draw debug sphere, use uma duração de cerca de 3 segundos para que possamos ver essa esfera por

86
00:05:45,630 --> 00:05:47,760
‫um tempo antes que ela desapareça.

87
00:05:47,760 --> 00:05:50,460
‫Pause o vídeo e faça isso agora.

88
00:05:53,360 --> 00:05:53,550
‫OK.

89
00:05:53,660 --> 00:05:56,810
‫Então estou de volta aqui em Bass Pond e aqui em Bass Pond.

90
00:05:57,110 --> 00:06:00,770
‫CP Vou incluir auxiliares de depuração de desenho.

91
00:06:00,770 --> 00:06:03,500
‫Então temos acesso para desenhar a esfera de depuração.

92
00:06:03,500 --> 00:06:07,010
‫Então, eu vou dizer para incluir auxiliares de depuração de desenho.

93
00:06:08,240 --> 00:06:12,320
‫E agora aqui embaixo na função fire, podemos desenhar a esfera de depuração.

94
00:06:12,350 --> 00:06:18,050
‫Agora, a primeira coisa que quero fazer é obter a localização do ponto de desova do projétil.

95
00:06:18,080 --> 00:06:26,240
‫Agora eu posso criar um vetor f local para isso e posso chamar esse local do ponto de desova do projétil

96
00:06:26,240 --> 00:06:29,870
‫e inicializá-lo usando o ponto de desova do projétil.

97
00:06:32,030 --> 00:06:35,780
‫E chamando get local do componente.

98
00:06:35,780 --> 00:06:43,100
‫Então agora eu tenho a localização do ponto de desova do projétil e é isso que posso usar ao chamar a esfera de depuração

99
00:06:43,100 --> 00:06:43,850
‫de desenho.

100
00:06:43,850 --> 00:06:46,130
‫Então eu vou chamar desenhar esfera de depuração.

101
00:06:47,450 --> 00:06:53,720
‫E para a primeira entrada, precisamos do mundo e sabemos que podemos obter o mundo usando get world next.

102
00:06:53,720 --> 00:06:59,810
‫Precisamos do centro da esfera que será o local do nosso ponto de geração de projéteis.

103
00:06:59,810 --> 00:07:04,190
‫Então isso será o que eu passo como o segundo parâmetro.

104
00:07:04,190 --> 00:07:06,190
‫E em seguida precisamos do raio da esfera.

105
00:07:06,200 --> 00:07:08,330
‫Agora eu vou ter uma pequena esfera.

106
00:07:08,480 --> 00:07:15,920
‫Vou dar um raio de digamos 25 F para o número de segmentos que vou usar apenas 12 e para a cor

107
00:07:15,920 --> 00:07:17,690
‫posso usar a cor F.

108
00:07:18,680 --> 00:07:21,380
‫Leia Agora quatro desenham linhas persistentes.

109
00:07:21,380 --> 00:07:27,500
‫Nós vamos ter nossas linhas esperando por 3 segundos para que possamos tornar isso falso porque não queremos que

110
00:07:27,500 --> 00:07:28,910
‫elas persistam para sempre.

111
00:07:28,940 --> 00:07:36,380
‫Vamos dar a esta esfera de depuração uma vida útil de três F Então vamos em frente e compilar isso agora e eu vou

112
00:07:36,380 --> 00:07:42,230
‫apertar play e clicar e agora podemos ver nossa esfera de depuração e é claro que ela desaparece

113
00:07:42,230 --> 00:07:43,310
‫após 3 segundos.

114
00:07:43,640 --> 00:07:49,880
‫Agora, esta é uma boa confirmação de que nosso mapeamento de ação está funcionando e também está nos dando

115
00:07:49,880 --> 00:07:53,450
‫a verificação da localização do ponto de desova do projétil.

116
00:07:53,450 --> 00:07:59,600
‫Então, uma vez que realmente começamos a gerar projéteis, sabemos que eles vão aparecer no local

117
00:07:59,600 --> 00:08:02,420
‫correto, conforme indicado pela esfera de depuração.

118
00:08:02,420 --> 00:08:03,500
‫Então isso é ótimo.

119
00:08:03,650 --> 00:08:09,470
‫Então, neste vídeo, criamos uma função de fogo e a vinculamos ao mapeamento de ação de fogo.

120
00:08:09,740 --> 00:08:15,800
‫E para provar que estava funcionando, desenhamos uma esfera de depuração no ponto de geração de projéteis sempre que clicamos com o

121
00:08:15,830 --> 00:08:21,710
‫botão esquerdo do mouse para que tenhamos uma função de disparo, estamos quase prontos para iniciar a geração de projéteis.

122
00:08:21,710 --> 00:08:25,250
‫E também colocamos essa função na classe pong base.

123
00:08:25,250 --> 00:08:27,980
‫Dessa forma, nossa torre também pode usá-lo.

124
00:08:27,980 --> 00:08:32,990
‫Então, no próximo vídeo, vamos discutir como nossa torre vai usar essa função.

125
00:08:33,530 --> 00:08:34,460
‫Vejo você em breve.

