﻿1
00:00:04,320 --> 00:00:05,280
‫Olá e bem-vindo.

2
00:00:05,280 --> 00:00:11,460
‫Nesta palestra, vamos tornar um inimigo mais uma ameaça implementando um nó de disparo em C++.

3
00:00:11,670 --> 00:00:13,530
‫Vamos mergulhar e ver como fazê-lo.

4
00:00:14,670 --> 00:00:19,730
‫Portanto, uma funcionalidade que claramente está faltando em nossa árvore de comportamento é a capacidade de atirar.

5
00:00:20,070 --> 00:00:24,900
‫O que eu gostaria de fazer é ir até o local do jogador e depois atirar.

6
00:00:24,900 --> 00:00:28,500
‫Mas queremos mudar um pouco primeiro como fazemos o movimento.

7
00:00:28,500 --> 00:00:33,090
‫Há algumas coisas que eu quero ajustar, então se eu selecionar o movimento para o Node, uma coisa que eu

8
00:00:33,090 --> 00:00:34,260
‫quero mudar é o raio.

9
00:00:34,260 --> 00:00:39,960
‫Eu não quero que o inimigo venha até mim, então se eu mudar o raio aceitável, ele vai

10
00:00:39,960 --> 00:00:42,870
‫parar de se mover a cinco metros de mim.

11
00:00:42,870 --> 00:00:43,560
‫Então vai parar.

12
00:00:43,740 --> 00:00:45,660
‫Dê-me uma boa distância de cinco metros.

13
00:00:45,660 --> 00:00:48,150
‫Ele vem até mim, eles vão e ele para e olha.

14
00:00:48,180 --> 00:00:53,610
‫Agora, a outra coisa que eu quero fazer é aqui na seção de quadro-negro, você pode ver que há um valor

15
00:00:53,610 --> 00:00:54,750
‫de quadro-negro de observação.

16
00:00:54,750 --> 00:00:58,170
‫Se não tivermos isso verificado, vamos ver o que acontece enquanto eu me movo.

17
00:00:58,620 --> 00:01:03,630
‫Ele basicamente e isso era um pouco mais óbvio quando tínhamos um raio aceitável menor.

18
00:01:03,630 --> 00:01:06,570
‫Então vamos apenas colocar isso aí em cinco quatro agora.

19
00:01:07,110 --> 00:01:09,810
‫E se eu apertar o play, você pode ver isso enquanto eu me movo.

20
00:01:09,810 --> 00:01:14,850
‫Ele vai para a minha última localização e só então quando chega lá, ele vem uma atualização.

21
00:01:14,940 --> 00:01:16,080
‫Não é isso que queremos.

22
00:01:16,410 --> 00:01:19,500
‫O que queremos é que esteja constantemente vindo em nossa direção.

23
00:01:19,500 --> 00:01:25,260
‫E se você verificar o valor do quadro-negro observado, então essencialmente o que ele está dizendo é que toda

24
00:01:25,260 --> 00:01:29,910
‫vez que o local do jogo muda, vamos atualizar para onde estamos nos movendo.

25
00:01:30,330 --> 00:01:36,870
‫Então, se eu for em frente e apertar o play e mover, você pode ver que ele está continuamente me seguindo e atualizando

26
00:01:36,870 --> 00:01:37,470
‫seu caminho.

27
00:01:37,830 --> 00:01:38,970
‫É exatamente isso que queremos.

28
00:01:39,300 --> 00:01:43,800
‫Então agora podemos alterar nosso raio de aceitação para 500 e isso se torna menos óbvio.

29
00:01:43,800 --> 00:01:47,190
‫Mas ainda é bom que tenhamos nosso valor de quadro-negro de observação lá.

30
00:01:47,220 --> 00:01:52,950
‫E então o comportamento que queremos é que, uma vez que ele chegue perto de nós, ele pare e

31
00:01:53,280 --> 00:01:54,210
‫atire em nós.

32
00:01:54,300 --> 00:01:56,760
‫Para isso precisamos de um novo tipo de tarefas.

33
00:01:56,760 --> 00:01:58,740
‫Vamos criar uma nova tarefa C++ aqui?

34
00:01:59,070 --> 00:02:02,070
‫Vai adicionar uma nova e nova classe C++.

35
00:02:02,070 --> 00:02:06,690
‫Então vamos mostrar todas as classes e procurar a tarefa beta.

36
00:02:07,110 --> 00:02:08,280
‫Agora, qual queremos?

37
00:02:08,280 --> 00:02:11,730
‫O nó da tarefa beta ou a base do quadro-negro da tarefa beta?

38
00:02:12,150 --> 00:02:16,440
‫Bem, na verdade não precisamos usar uma chave porque vamos apenas tentar atirar.

39
00:02:16,440 --> 00:02:17,490
‫Isso é tudo que vamos fazer.

40
00:02:17,490 --> 00:02:19,470
‫Vamos puxar o gatilho da nossa arma.

41
00:02:19,740 --> 00:02:23,310
‫Todo o direcionamento será feito em outro lugar em nossa árvore de comportamento.

42
00:02:23,760 --> 00:02:31,410
‫Então, vamos abrir o nó de tarefa beta, a classe básica aqui, e vamos chamar isso de Beaty Task.

43
00:02:32,390 --> 00:02:33,140
‫Sublinhado.

44
00:02:33,410 --> 00:02:33,860
‫Atirar.

45
00:02:34,790 --> 00:02:36,560
‫Vamos em frente e criar essa classe.

46
00:02:36,710 --> 00:02:39,230
‫Então acabamos com algo assim.

47
00:02:39,590 --> 00:02:41,900
‫Então, queremos fazer a mesma configuração.

48
00:02:41,900 --> 00:02:47,620
‫Então, um pequeno desafio para nós fazermos o mesmo tipo de configuração que fizemos para o nosso quadro-negro.

49
00:02:47,660 --> 00:02:48,860
‫Limpar valor do quadro-negro.

50
00:02:48,860 --> 00:02:50,200
‫Queremos ter um nome.

51
00:02:50,210 --> 00:02:53,780
‫Queremos ter uma nota de tarefa de execução, um vídeo de pausa e tentar isso.

52
00:02:54,030 --> 00:02:54,260
‫OK.

53
00:02:54,270 --> 00:02:54,870
‫Bem vindo de volta.

54
00:02:54,890 --> 00:02:56,440
‫Então essa foi uma mini tarefa.

55
00:02:56,450 --> 00:03:01,970
‫Vou apenas copiar as assinaturas do meu quadro-negro para filmar, incluindo as

56
00:03:02,150 --> 00:03:04,310
‫seções públicas e protegidas.

57
00:03:04,670 --> 00:03:07,430
‫Vou mudar o nome do nosso construtor.

58
00:03:07,730 --> 00:03:10,100
‫Vou seguir em frente e implementar um construtor.

59
00:03:10,130 --> 00:03:12,020
‫E o que é que precisávamos fazer?

60
00:03:12,020 --> 00:03:16,130
‫Precisamos definir o nome do nó igual a atirar.

61
00:03:16,430 --> 00:03:17,480
‫É assim que vamos chamá-lo.

62
00:03:17,660 --> 00:03:23,380
‫Então, de volta ao cabeçalho para a tarefa de disparo e vamos tentar implementar a tarefa de execução agora.

63
00:03:23,390 --> 00:03:29,420
‫E só precisamos chamar para super algum tipo de cópia do nosso arquivo Clear Blackboard Values CP

64
00:03:29,570 --> 00:03:32,580
‫e então estamos prontos para começar a implementar.

65
00:03:32,600 --> 00:03:37,160
‫Então a primeira coisa que vamos precisar fazer aqui, vamos ter um pouco mais de

66
00:03:37,160 --> 00:03:39,800
‫espaço é que vamos precisar pegar nosso peão.

67
00:03:39,800 --> 00:03:41,510
‫Por que precisamos pegar nosso peão?

68
00:03:41,510 --> 00:03:44,990
‫Bem, vamos dar uma olhada no personagem atirador, que é um peão.

69
00:03:44,990 --> 00:03:46,490
‫Lembre-se do personagem atirador?

70
00:03:46,490 --> 00:03:48,820
‫Dot H tem um método de disparo.

71
00:03:48,830 --> 00:03:54,740
‫Isso é o que queremos chamar essencialmente o mesmo que o jogador está fazendo.

72
00:03:54,740 --> 00:03:58,460
‫Ele está segurando o botão do gatilho e isso está chamando esse método de tiro.

73
00:03:58,460 --> 00:04:01,040
‫Queremos que o cara seja capaz de fazer o mesmo.

74
00:04:01,040 --> 00:04:06,770
‫Quando você tiver a tarefa de atirar, ela manterá pressionado o botão de disparo ou pressionará repetidamente esse botão de disparo para

75
00:04:06,770 --> 00:04:10,040
‫que a tarefa de execução seja o lugar certo para fazer isso.

76
00:04:10,040 --> 00:04:15,230
‫Provavelmente vamos devolver o que aqui, porque lembre-se, esta ação é apenas um tiro.

77
00:04:15,230 --> 00:04:16,730
‫Não é tiro contínuo.

78
00:04:16,730 --> 00:04:17,510
‫O que nós vamos fazer?

79
00:04:17,540 --> 00:04:21,140
‫Vamos retornar o sucesso do resultado da nota vazia.

80
00:04:21,140 --> 00:04:22,400
‫Se todos tivéssemos sucesso.

81
00:04:22,400 --> 00:04:28,370
‫Se tivemos sucesso porque não precisamos chamar o tick continuamente.

82
00:04:28,400 --> 00:04:32,540
‫Não precisamos que essa tarefa seja executada por mais de um único quadro.

83
00:04:32,570 --> 00:04:36,950
‫E a outra coisa que precisamos fazer é pegar, como eu disse, aquela classe de peões.

84
00:04:36,950 --> 00:04:41,300
‫Bem, o que vou fazer é mostrar como você pode pegar o controlador aéreo.

85
00:04:41,300 --> 00:04:47,360
‫E do controlador aéreo, sabemos que podemos chamar get peão para obter o peão que foi controlado.

86
00:04:47,600 --> 00:04:53,540
‫E sabemos que podemos lançar esse peão controlado para nossa implementação de personagem de tiro.

87
00:04:53,540 --> 00:04:58,640
‫Então, como podemos obter o controlador de ar a partir disso?

88
00:04:58,850 --> 00:05:03,500
‫Bem, temos nosso componente de árvore de comportamento, que sabemos que está em um controlador aéreo.

89
00:05:03,500 --> 00:05:09,200
‫Então talvez isso tenha algo que possamos usar se formos ao componente da árvore de comportamento e dermos uma

90
00:05:09,500 --> 00:05:12,320
‫olhada aqui para quaisquer métodos que possam ser úteis.

91
00:05:12,320 --> 00:05:18,050
‫Há muito aqui, mas se procurarmos pelo controlador, não veremos nada, mas talvez em algum lugar em uma de suas

92
00:05:18,050 --> 00:05:23,720
‫classes base, porque a classe pai para o componente da árvore de comportamento de uso é o componente you

93
00:05:23,720 --> 00:05:24,290
‫brain.

94
00:05:24,650 --> 00:05:27,320
‫Seguimos até aquele para procurar o controlador aqui.

95
00:05:27,320 --> 00:05:29,150
‫Você pode ver que há uma propriedade para isso.

96
00:05:29,570 --> 00:05:31,040
‫Existe um getter?

97
00:05:31,040 --> 00:05:38,660
‫Sim, é chamado de obter proprietário do ar e isso deve retornar se passarmos o mouse sobre ele e eu controlar um ponteiro.

98
00:05:38,960 --> 00:05:44,360
‫Então você deve ser capaz de usar isso para pegar o peão, lançá-lo para um personagem de tiro e

99
00:05:44,360 --> 00:05:46,250
‫então chamar o método de tiro.

100
00:05:46,370 --> 00:05:47,570
‫Então esse será o seu desafio.

101
00:05:47,570 --> 00:05:47,870
‫A chamada.

102
00:05:47,870 --> 00:05:54,920
‫O método de atirar, torná-lo público, pegar o peão, lançar a chamada do peão, atirar e depois testá-lo em

103
00:05:54,920 --> 00:05:56,420
‫sua árvore de comportamento.

104
00:05:56,420 --> 00:05:57,620
‫Pause o vídeo e pronto.

105
00:05:57,950 --> 00:05:58,250
‫OK.

106
00:05:58,250 --> 00:05:58,820
‫Bem vindo de volta.

107
00:05:58,820 --> 00:06:04,520
‫Então, primeiro de tudo, o primeiro passo é tornar este método shoot público porque ele precisa

108
00:06:04,520 --> 00:06:07,070
‫ser chamado de fora desta classe.

109
00:06:07,400 --> 00:06:11,480
‫Então vamos colocá-lo apenas para causar danos, vamos atirar, dar um pouco de espaço para ele, um pouco de

110
00:06:11,480 --> 00:06:12,170
‫espaço para respirar.

111
00:06:12,170 --> 00:06:14,270
‫Eu gosto de espaço em branco me ajuda a ver, me ajuda a pensar.

112
00:06:14,660 --> 00:06:17,000
‫Então vamos para a sessão de fotos de Beatty.

113
00:06:17,300 --> 00:06:21,470
‫Vamos, antes de mais nada, verificar se o controlador I não é nulo.

114
00:06:21,470 --> 00:06:24,320
‫Caso contrário, não podemos usar o operador de seta nele.

115
00:06:24,320 --> 00:06:27,140
‫Apenas uma boa prática geral para fazer essas verificações de unhas.

116
00:06:27,140 --> 00:06:32,270
‫Portanto, se esse proprietário não for igual, ele será igual ao ponteiro nulo.

117
00:06:32,600 --> 00:06:35,390
‫Vamos querer voltar cedo com uma falha.

118
00:06:35,390 --> 00:06:38,510
‫Portanto, esta tarefa falhará se não tivermos um controlador aéreo.

119
00:06:38,510 --> 00:06:39,890
‫Isso é bem direto.

120
00:06:39,890 --> 00:06:43,280
‫Então eu posso fazer um retorno de resultados de nós vazios.

121
00:06:43,280 --> 00:06:43,670
‫Cólon.

122
00:06:43,670 --> 00:06:45,560
‫Colon falhou assim.

123
00:06:45,560 --> 00:06:52,340
‫E então vamos fazer o proprietário, o proprietário do componente, vamos entrar.

124
00:06:52,340 --> 00:06:54,650
‫Na verdade, talvez precisemos incluir um cabeçalho de arquivo aqui.

125
00:06:54,650 --> 00:07:03,650
‫Então, vamos fazer uma inclusão de hash e será a estrutura do jogo e o controlador e se eu achar, sim, qualquer controlador deve servir, mas acho

126
00:07:03,650 --> 00:07:10,430
‫que precisamos do controlador aéreo porque esse é o tipo de pontos que estamos voltando e então vamos fazer uma

127
00:07:10,430 --> 00:07:15,590
‫flecha e vamos fazer um get -- aqui reclamando de algo na minha cabeça, um

128
00:07:15,590 --> 00:07:18,590
‫arquivo, talvez eu não tenha entendido algo certo.

129
00:07:18,590 --> 00:07:21,410
‫Então barra para frente parece que eu entendi errado.

130
00:07:21,410 --> 00:07:22,970
‫Na verdade, não está na estrutura do jogo.

131
00:07:22,970 --> 00:07:26,240
‫Você só tem um controlador para incluir isso.

132
00:07:26,240 --> 00:07:28,580
‫Ensina-me por ser tão blasé sobre isso.

133
00:07:28,580 --> 00:07:29,150
‫Então vamos lá.

134
00:07:29,150 --> 00:07:30,950
‫Agora podemos obter o -- do.

135
00:07:32,190 --> 00:07:34,710
‫E como eu disse, também precisamos fazer um elenco.

136
00:07:34,950 --> 00:07:41,550
‫Então, vamos fazer um elenco para o tipo que precisaremos lançar para o A do personagem de tiro.

137
00:07:41,560 --> 00:07:45,720
‫Então isso está em sua forma completa, uma filmagem de um personagem, uma filmagem, um personagem.

138
00:07:45,750 --> 00:07:48,840
‫E nós vamos precisar verificar o resultado disso também.

139
00:07:49,020 --> 00:07:51,300
‫Mas precisamos incluir o personagem de tiros de cinzas.

140
00:07:51,300 --> 00:07:58,050
‫Então hash inclua no topo o personagem do atirador que achou assim.

141
00:07:58,680 --> 00:08:04,170
‫E nós vamos armazenar isso em um tipo de ponteiro, os tiros de personagem ainda serão um personagem.

142
00:08:04,680 --> 00:08:06,300
‫Então eu vou chamá-lo, vamos armazená-lo lá.

143
00:08:06,960 --> 00:08:13,860
‫E basicamente, precisamos ter certeza de que nem o peão get retornou porque o peão get pode retornar nulo se

144
00:08:14,100 --> 00:08:17,280
‫o olho não estiver controlando um peão no momento.

145
00:08:18,250 --> 00:08:24,790
‫Ou esse lançamento pode retornar null se o tipo não for um personagem de oito atiradores dele controlando um tipo diferente

146
00:08:24,790 --> 00:08:25,600
‫de peão.

147
00:08:25,960 --> 00:08:30,610
‫Felizmente, esses dois funcionam muito bem juntos, então se você tentar lançar um ponteiro nulo, o resultado é apenas um ponteiro

148
00:08:30,610 --> 00:08:32,770
‫nulo, e é por isso que podemos fazer isso.

149
00:08:33,190 --> 00:08:34,630
‫Essas verificações todas em uma linha.

150
00:08:35,380 --> 00:08:37,450
‫Então podemos fazer um caractere if.

151
00:08:39,060 --> 00:08:41,010
‫É igual a ponteiro nulo.

152
00:08:42,420 --> 00:08:44,600
‫Então queremos falhar novamente.

153
00:08:44,610 --> 00:08:45,690
‫Então volte.

154
00:08:46,900 --> 00:08:48,790
‫Resultados do nó IBT.

155
00:08:49,510 --> 00:08:49,840
‫Cólon.

156
00:08:49,840 --> 00:08:51,720
‫Colon falhou assim.

157
00:08:51,910 --> 00:08:56,110
‫E finalmente, depois de todas essas verificações, sabemos que temos um personagem de tiro.

158
00:08:56,110 --> 00:08:57,220
‫Devemos ser capazes de chamar, atirar.

159
00:08:57,220 --> 00:09:01,450
‫Então, o personagem dispara e dispara assim.

160
00:09:01,900 --> 00:09:04,750
‫Então, isso finalmente nos permitirá atirar.

161
00:09:04,760 --> 00:09:07,270
‫Vamos para a nossa árvore de comportamento.

162
00:09:07,930 --> 00:09:15,010
‫E aqui vamos querer puxar para baixo para colocar um novo nó e procurar a nova tarefa de tiro que

163
00:09:15,010 --> 00:09:16,000
‫temos aqui.

164
00:09:16,480 --> 00:09:20,620
‫E não tenho certeza se compilei, então vou me certificar de que tudo seja compilado novamente.

165
00:09:20,620 --> 00:09:26,530
‫E uma vez feito isso, podemos ir até lá e apertar o play e ver se esse cara aparece e atira, ok?

166
00:09:26,530 --> 00:09:27,370
‫Sim ele faz.

167
00:09:27,370 --> 00:09:32,680
‫Infelizmente, ele está atirando repetidamente e atirando no próprio pé.

168
00:09:32,950 --> 00:09:35,890
‫Então, algo não está bem escrito ali.

169
00:09:35,890 --> 00:09:37,840
‫Então tem duas coisas dando errado.

170
00:09:37,840 --> 00:09:43,270
‫Para começar, ele conseguiu se matar com dois tiros, e também parece que ele está filmando cada quadro,

171
00:09:43,270 --> 00:09:48,100
‫o que faria sentido porque estamos conseguindo ver o jogador, nos movemos para ele e

172
00:09:48,100 --> 00:09:52,000
‫então atirar é a última ação temos aqui, que vamos executar repetidamente.

173
00:09:52,330 --> 00:09:56,050
‫Então, o que queremos fazer é transformar isso em uma sequência.

174
00:09:56,470 --> 00:10:01,420
‫Então, vou arrastar um nó aqui, vamos fazer um nó de sequência, e o que vamos

175
00:10:01,420 --> 00:10:04,780
‫fazer é filmar, esperar, filmar, esperar e repetir isso indefinidamente.

176
00:10:04,780 --> 00:10:07,630
‫Então atire primeiro, espere um pouco.

177
00:10:07,630 --> 00:10:13,450
‫Então talvez esperemos, não sei, por 1/2 entre as tomadas e então vamos querer repetir isso, o que podemos

178
00:10:13,450 --> 00:10:14,890
‫fazer com um decorador.

179
00:10:14,890 --> 00:10:20,440
‫Então, se eu clicar com o botão direito do mouse em adicionar decorador e procurar o decorador de loop, você poderá ver quantas vezes deseja que ele

180
00:10:20,440 --> 00:10:21,250
‫faça um loop.

181
00:10:21,580 --> 00:10:22,510
‫Diz três vezes.

182
00:10:22,510 --> 00:10:23,440
‫Não queremos três vezes.

183
00:10:23,440 --> 00:10:28,960
‫Queremos que ele faça um loop infinito até que precisemos nos mover ou perdermos o plano de vista.

184
00:10:28,960 --> 00:10:30,100
‫Precisamos ir investigar.

185
00:10:30,580 --> 00:10:32,920
‫Então vamos em frente e apertar play e ver se isso funciona.

186
00:10:32,920 --> 00:10:33,550
‫Vem até mim.

187
00:10:33,550 --> 00:10:35,740
‫Atira, atira, atira.

188
00:10:35,950 --> 00:10:37,450
‫Mas ele não está realmente me batendo.

189
00:10:37,450 --> 00:10:41,590
‫Você pode ver que seus tiros estão realmente pousando nele mesmo.

190
00:10:42,520 --> 00:10:46,540
‫E vamos lidar com esse bug em uma próxima palestra.

191
00:10:46,690 --> 00:10:47,140
‫Vê isso?

