﻿1
00:00:04,320 --> 00:00:05,280
‫Hola y bienvenido.

2
00:00:05,280 --> 00:00:11,460
‫En esta conferencia, vamos a convertir a un enemigo en una amenaza mayor mediante la implementación de un nodo de disparo en C++.

3
00:00:11,670 --> 00:00:13,530
‫Vamos a sumergirnos y ver cómo hacerlo.

4
00:00:14,670 --> 00:00:19,730
‫Así que una parte de la funcionalidad que claramente falta en nuestro árbol de comportamiento es la capacidad de disparar.

5
00:00:20,070 --> 00:00:24,900
‫Lo que idealmente querría hacer es moverme a la ubicación del jugador y luego disparar.

6
00:00:24,900 --> 00:00:28,500
‫Pero primero queremos cambiar un poco cómo hacemos el movimiento.

7
00:00:28,500 --> 00:00:33,090
‫Hay un par de cosas que quiero modificar, así que si selecciono mover a Nodo, una cosa que quiero

8
00:00:33,090 --> 00:00:34,260
‫cambiar es el radio.

9
00:00:34,260 --> 00:00:39,960
‫No quiero que el enemigo venga directamente hacia mí, así que si cambio el radio aceptable,

10
00:00:39,960 --> 00:00:42,870
‫dejará de moverse a cinco metros de mí.

11
00:00:42,870 --> 00:00:43,560
‫Así que va a parar.

12
00:00:43,740 --> 00:00:45,660
‫Dame una buena distancia de cinco metros.

13
00:00:45,660 --> 00:00:48,150
‫Se me acerca, se van y él se detiene y me mira.

14
00:00:48,180 --> 00:00:53,610
‫Ahora, la otra cosa que quiero hacer es aquí abajo en la sección de la pizarra, pueden ver que hay un valor de

15
00:00:53,610 --> 00:00:54,750
‫observación en la pizarra.

16
00:00:54,750 --> 00:00:58,170
‫Si no tenemos eso marcado, veamos qué sucede mientras me muevo.

17
00:00:58,620 --> 00:01:03,630
‫Básicamente, y esto era un poco más obvio cuando teníamos un radio aceptable más pequeño.

18
00:01:03,630 --> 00:01:06,570
‫Entonces, reduzcamos eso a cinco cuatro ahora.

19
00:01:07,110 --> 00:01:09,810
‫Y si presiono reproducir, puedes verlo mientras me muevo.

20
00:01:09,810 --> 00:01:14,850
‫Él va a mi última ubicación y luego, solo cuando llega a eso, viene una actualización.

21
00:01:14,940 --> 00:01:16,080
‫Eso no es lo que queremos.

22
00:01:16,410 --> 00:01:19,500
‫Lo que queremos es que esté constantemente viniendo hacia nosotros.

23
00:01:19,500 --> 00:01:25,260
‫Y si verifica el valor observado en la pizarra, entonces esencialmente lo que dice es que cada

24
00:01:25,260 --> 00:01:29,910
‫vez que cambie la ubicación del juego, actualizaremos a dónde nos mudamos.

25
00:01:30,330 --> 00:01:36,870
‫Entonces, si sigo adelante y presiono reproducir y moverme, puedes ver que me sigue continuamente y actualiza su

26
00:01:36,870 --> 00:01:37,470
‫ruta.

27
00:01:37,830 --> 00:01:38,970
‫Eso es exactamente lo que queremos.

28
00:01:39,300 --> 00:01:43,800
‫Así que ahora podemos cambiar nuestro radio de aceptación a 500 y se vuelve menos obvio.

29
00:01:43,800 --> 00:01:47,190
‫Pero sigue siendo bueno que tengamos nuestro valor de pizarra de observación allí.

30
00:01:47,220 --> 00:01:52,950
‫Y luego, el comportamiento que queremos es que, una vez que se acerque a nosotros, se detenga y

31
00:01:53,280 --> 00:01:54,210
‫nos dispare.

32
00:01:54,300 --> 00:01:56,760
‫Para eso necesitamos un nuevo tipo de tareas.

33
00:01:56,760 --> 00:01:58,740
‫¿Vamos a crear una nueva tarea de C++ aquí?

34
00:01:59,070 --> 00:02:02,070
‫Va a llegar a agregar nueva, nueva clase de C++.

35
00:02:02,070 --> 00:02:06,690
‫Luego vamos a mostrar todas las clases y buscar la tarea beta.

36
00:02:07,110 --> 00:02:08,280
‫Ahora bien, ¿cuál queremos?

37
00:02:08,280 --> 00:02:11,730
‫¿El nodo de tareas beta o la base de pizarra de tareas beta?

38
00:02:12,150 --> 00:02:16,440
‫Bueno, en realidad no necesitamos usar una llave porque solo vamos a intentar disparar.

39
00:02:16,440 --> 00:02:17,490
‫Eso es todo lo que vamos a hacer.

40
00:02:17,490 --> 00:02:19,470
‫Vamos a apretar el gatillo de nuestra pistola.

41
00:02:19,740 --> 00:02:23,310
‫Todo el apuntar se hará en otra parte de nuestro árbol de comportamiento.

42
00:02:23,760 --> 00:02:31,410
‫Así que abramos el nodo de tarea beta, la clase básica aquí, y lo llamaremos Beaty Task.

43
00:02:32,390 --> 00:02:33,140
‫Guion bajo.

44
00:02:33,410 --> 00:02:33,860
‫Disparo.

45
00:02:34,790 --> 00:02:36,560
‫Avancemos y creemos esa clase.

46
00:02:36,710 --> 00:02:39,230
‫Entonces terminamos con algo como esto.

47
00:02:39,590 --> 00:02:41,900
‫Así que queremos hacer la misma configuración.

48
00:02:41,900 --> 00:02:47,620
‫Entonces, fue un pequeño desafío para nosotros hacer el mismo tipo de configuración que tenemos para nuestra pizarra.

49
00:02:47,660 --> 00:02:48,860
‫Borrar valor de pizarra.

50
00:02:48,860 --> 00:02:50,200
‫Queremos tener un nombre.

51
00:02:50,210 --> 00:02:53,780
‫Queremos ejecutar notas de tareas, pausar un video y probarlo.

52
00:02:54,030 --> 00:02:54,260
‫Bueno.

53
00:02:54,270 --> 00:02:54,870
‫Bienvenido de nuevo.

54
00:02:54,890 --> 00:02:56,440
‫Así que esa fue una mini tarea.

55
00:02:56,450 --> 00:03:01,970
‫Solo voy a copiar las firmas de mi valle de pizarra transparente para disparar, incluidas

56
00:03:02,150 --> 00:03:04,310
‫las secciones públicas y protegidas.

57
00:03:04,670 --> 00:03:07,430
‫Voy a cambiar el nombre de nuestro constructor.

58
00:03:07,730 --> 00:03:10,100
‫Voy a seguir adelante e implementar un constructor.

59
00:03:10,130 --> 00:03:12,020
‫¿Y qué era lo que teníamos que hacer?

60
00:03:12,020 --> 00:03:16,130
‫Necesitamos establecer un nombre de nodo igual a disparar.

61
00:03:16,430 --> 00:03:17,480
‫Así es como lo vamos a llamar.

62
00:03:17,660 --> 00:03:23,380
‫Luego, regrese al encabezado de la tarea de disparo y vamos a intentar implementar la tarea de ejecución ahora.

63
00:03:23,390 --> 00:03:29,420
‫Y solo tenemos que llamar a Super algún tipo de copia de nuestro archivo CP Clear Blackboard Values

64
00:03:29,570 --> 00:03:32,580
‫y luego estamos listos para comenzar a implementar.

65
00:03:32,600 --> 00:03:37,160
‫Entonces, lo primero que necesitaremos hacer aquí, tener un poco más de espacio,

66
00:03:37,160 --> 00:03:39,800
‫es que necesitaremos apoderarnos de nuestro peón.

67
00:03:39,800 --> 00:03:41,510
‫¿Por qué necesitamos apoderarnos de nuestro peón?

68
00:03:41,510 --> 00:03:44,990
‫Bueno, echemos un vistazo al personaje del tirador, que es un peón.

69
00:03:44,990 --> 00:03:46,490
‫¿Recuerdas el personaje del tirador?

70
00:03:46,490 --> 00:03:48,820
‫Dot H tiene un método de disparo.

71
00:03:48,830 --> 00:03:54,740
‫Eso es lo que queremos llamar esencialmente lo mismo que nosotros como jugador.

72
00:03:54,740 --> 00:03:58,460
‫Está manteniendo presionado el botón disparador y eso está llamando a este método de disparo.

73
00:03:58,460 --> 00:04:01,040
‫Queremos que el chico pueda hacer lo mismo.

74
00:04:01,040 --> 00:04:06,770
‫Cuando tenga la tarea de disparar, mantendrá presionado el botón de activación o presionará repetidamente ese botón de activación para

75
00:04:06,770 --> 00:04:10,040
‫que la tarea de ejecución sea el lugar correcto para hacerlo.

76
00:04:10,040 --> 00:04:15,230
‫Probablemente vamos a devolver lo que aquí, porque recuerda, esta acción es solo un disparo.

77
00:04:15,230 --> 00:04:16,730
‫No es disparo continuo.

78
00:04:16,730 --> 00:04:17,510
‫¿Qué vamos a hacer?

79
00:04:17,540 --> 00:04:21,140
‫Vamos a devolver el éxito del resultado de la nota vacía.

80
00:04:21,140 --> 00:04:22,400
‫Si todos lo logramos.

81
00:04:22,400 --> 00:04:28,370
‫Si lo logramos porque no necesitamos llamar continuamente a tick.

82
00:04:28,400 --> 00:04:32,540
‫No necesitamos que esta tarea se ejecute más de un solo cuadro.

83
00:04:32,570 --> 00:04:36,950
‫Y lo otro que tenemos que hacer es apoderarnos, como dije, de esa clase de peones.

84
00:04:36,950 --> 00:04:41,300
‫Bueno, lo que voy a hacer es mostrarte cómo puedes conseguir el controlador de aire.

85
00:04:41,300 --> 00:04:47,360
‫Y desde el controlador aéreo, sabemos que podemos pedir obtener peón para obtener el peón que estaba controlado.

86
00:04:47,600 --> 00:04:53,540
‫Y sabemos que podemos lanzar ese peón controlado a la implementación de nuestro personaje de tirador.

87
00:04:53,540 --> 00:04:58,640
‫Entonces, ¿cómo obtenemos el controlador de aire de esto?

88
00:04:58,850 --> 00:05:03,500
‫Bueno, tenemos nuestro componente de árbol de comportamiento, que sabemos que está en un controlador de aire.

89
00:05:03,500 --> 00:05:09,200
‫Entonces, tal vez eso tenga algo que podamos usar si vamos al componente del árbol de comportamiento y echamos un vistazo aquí

90
00:05:09,500 --> 00:05:12,320
‫para ver si hay algún método que pueda ser útil.

91
00:05:12,320 --> 00:05:18,050
‫Hay mucho aquí, pero si buscamos el controlador, no estamos viendo nada, pero tal vez en algún lugar de una

92
00:05:18,050 --> 00:05:23,720
‫de sus clases base porque la clase principal para el componente del árbol de comportamiento de uso es el componente

93
00:05:23,720 --> 00:05:24,290
‫cerebro.

94
00:05:24,650 --> 00:05:27,320
‫Seguimos hasta ese para buscar el controlador aquí.

95
00:05:27,320 --> 00:05:29,150
‫Puedes ver que hay una propiedad para ello.

96
00:05:29,570 --> 00:05:31,040
‫¿Hay un captador?

97
00:05:31,040 --> 00:05:38,660
‫Sí, se llama obtener propietario de aire y eso debería regresar si pasamos el mouse sobre él y controlo un puntero.

98
00:05:38,960 --> 00:05:44,360
‫Por lo tanto, debería poder usar eso para apoderarse del peón, lanzarlo a un personaje de tirador y

99
00:05:44,360 --> 00:05:46,250
‫luego llamar al método de disparo.

100
00:05:46,370 --> 00:05:47,570
‫Así que ese va a ser tu desafío.

101
00:05:47,570 --> 00:05:47,870
‫La llamada.

102
00:05:47,870 --> 00:05:54,920
‫El método de disparo, hágalo público, obtenga el peón, emita la llamada del peón, dispare y luego pruébelo en

103
00:05:54,920 --> 00:05:56,420
‫su árbol de comportamiento.

104
00:05:56,420 --> 00:05:57,620
‫Pausa el video y hazlo.

105
00:05:57,950 --> 00:05:58,250
‫Bueno.

106
00:05:58,250 --> 00:05:58,820
‫Bienvenido de nuevo.

107
00:05:58,820 --> 00:06:04,520
‫Entonces, antes que nada, el primer paso es que necesitaremos hacer público este método de disparo porque

108
00:06:04,520 --> 00:06:07,070
‫debe llamarse desde fuera de esta clase.

109
00:06:07,400 --> 00:06:11,480
‫Así que lo pondremos simplemente para hacer daño, tendremos que disparar, darle un poco de espacio, un poco de

110
00:06:11,480 --> 00:06:12,170
‫espacio para respirar.

111
00:06:12,170 --> 00:06:14,270
‫Me gusta que el espacio en blanco me ayude a ver, me ayude a pensar.

112
00:06:14,660 --> 00:06:17,000
‫Luego vamos a ir a la sesión de fotos de Beatty.

113
00:06:17,300 --> 00:06:21,470
‫En primer lugar, vamos a comprobar que el controlador I no es nulo.

114
00:06:21,470 --> 00:06:24,320
‫De lo contrario, no podemos usar el operador de flecha en él.

115
00:06:24,320 --> 00:06:27,140
‫Solo una buena práctica general para hacer estos controles de uñas.

116
00:06:27,140 --> 00:06:32,270
‫Entonces, si este propietario no es igual, es igual a un puntero nulo.

117
00:06:32,600 --> 00:06:35,390
‫Vamos a querer volver temprano con un fracaso.

118
00:06:35,390 --> 00:06:38,510
‫Entonces esta tarea fallará si no tenemos un controlador aéreo.

119
00:06:38,510 --> 00:06:39,890
‫Eso es bastante sencillo.

120
00:06:39,890 --> 00:06:43,280
‫Entonces puedo hacer una devolución de resultados de nodo vacío.

121
00:06:43,280 --> 00:06:43,670
‫Colon.

122
00:06:43,670 --> 00:06:45,560
‫Colón fracasó así.

123
00:06:45,560 --> 00:06:52,340
‫Y luego vamos a hacer el propietario, el propietario del componente, vamos a continuar.

124
00:06:52,340 --> 00:06:54,650
‫De hecho, es posible que debamos incluir un encabezado de archivo aquí.

125
00:06:54,650 --> 00:07:03,650
‫Así que hagamos una inclusión de hash y será el marco del juego y el controlador y si pienso, sí, cualquier controlador debería funcionar, pero creo que

126
00:07:03,650 --> 00:07:10,430
‫necesitamos el controlador aéreo porque ese es el tipo de puntos que estamos volviendo y luego vamos a hacer una

127
00:07:10,430 --> 00:07:15,590
‫flecha y vamos a hacer un get -- aquí quejándome de algo en mi cabeza,

128
00:07:15,590 --> 00:07:18,590
‫un archivo, tal vez no tengo algo bien.

129
00:07:18,590 --> 00:07:21,410
‫Entonces, la barra inclinada parece que me equivoqué.

130
00:07:21,410 --> 00:07:22,970
‫En realidad no está en el marco del juego.

131
00:07:22,970 --> 00:07:26,240
‫Solo tienes un controlador para incluir eso.

132
00:07:26,240 --> 00:07:28,580
‫Enséñame por ser tan indiferente al respecto.

133
00:07:28,580 --> 00:07:29,150
‫Así que ahí vamos.

134
00:07:29,150 --> 00:07:30,950
‫Ahora podemos obtener el -- del.

135
00:07:32,190 --> 00:07:34,710
‫Y como dije, también necesitamos hacer un yeso.

136
00:07:34,950 --> 00:07:41,550
‫Así que vamos a hacer un lanzamiento de qué tipo vamos a necesitar lanzar a la A del personaje del tirador.

137
00:07:41,560 --> 00:07:45,720
‫Eso es en su forma completa, un rodaje, un personaje, un rodaje, un personaje.

138
00:07:45,750 --> 00:07:48,840
‫Y vamos a tener que comprobar el resultado de esto también.

139
00:07:49,020 --> 00:07:51,300
‫Pero necesitamos incluir el carácter de brotes de ceniza.

140
00:07:51,300 --> 00:07:58,050
‫Así que el hash incluye en la parte superior que el personaje del tirador pensó que así era.

141
00:07:58,680 --> 00:08:04,170
‫Y vamos a almacenar eso en un tipo de puntero, los brotes del personaje seguirán siendo un personaje.

142
00:08:04,680 --> 00:08:06,300
‫Entonces lo llamaré, lo guardaremos allí.

143
00:08:06,960 --> 00:08:13,860
‫Y, básicamente, debemos asegurarnos de que no se devuelva el peón de obtención porque el peón de obtención podría devolver un valor nulo si

144
00:08:14,100 --> 00:08:17,280
‫el ojo no está controlando un peón en ese momento.

145
00:08:18,250 --> 00:08:24,790
‫O este lanzamiento podría devolver nulo si el tipo no es un personaje de ocho tiradores que controle un tipo diferente

146
00:08:24,790 --> 00:08:25,600
‫de peón.

147
00:08:25,960 --> 00:08:30,610
‫Afortunadamente, estos dos se llevan bastante bien juntos, por lo que si intenta lanzar un puntero nulo, el resultado es solo

148
00:08:30,610 --> 00:08:32,770
‫un puntero nulo, por lo que podemos hacer esto.

149
00:08:33,190 --> 00:08:34,630
‫Estos cheques todos en una línea.

150
00:08:35,380 --> 00:08:37,450
‫Entonces podemos hacer un carácter if.

151
00:08:39,060 --> 00:08:41,010
‫Es igual a un puntero nulo.

152
00:08:42,420 --> 00:08:44,600
‫Entonces queremos volver a fallar.

153
00:08:44,610 --> 00:08:45,690
‫Así que regresa.

154
00:08:46,900 --> 00:08:48,790
‫Resultados del nodo IBT.

155
00:08:49,510 --> 00:08:49,840
‫Colon.

156
00:08:49,840 --> 00:08:51,720
‫Colón fracasó así.

157
00:08:51,910 --> 00:08:56,110
‫Y finalmente, después de todas esas comprobaciones, sabemos que tenemos un personaje de tirador.

158
00:08:56,110 --> 00:08:57,220
‫Deberíamos poder llamar, disparar.

159
00:08:57,220 --> 00:09:01,450
‫Así que la flecha del personaje y dispara así.

160
00:09:01,900 --> 00:09:04,750
‫Entonces eso finalmente nos permitirá disparar.

161
00:09:04,760 --> 00:09:07,270
‫Vayamos a nuestro árbol de comportamiento.

162
00:09:07,930 --> 00:09:15,010
‫Y aquí vamos a querer tirar hacia abajo para colocar un nuevo nodo y buscar la nueva tarea de disparar que

163
00:09:15,010 --> 00:09:16,000
‫tenemos aquí.

164
00:09:16,480 --> 00:09:20,620
‫Y no estoy seguro de si compilé, así que me aseguraré de que todo vuelva a compilarse.

165
00:09:20,620 --> 00:09:26,530
‫Y una vez hecho esto, podemos ir y presionar reproducir y ver si este tipo aparece y dispara, ¿de acuerdo?

166
00:09:26,530 --> 00:09:27,370
‫Sí, él lo hace.

167
00:09:27,370 --> 00:09:32,680
‫Desafortunadamente, dispara repetidamente y se dispara a sí mismo en el pie.

168
00:09:32,950 --> 00:09:35,890
‫Así que algo no está del todo escrito allí.

169
00:09:35,890 --> 00:09:37,840
‫Así que hay dos cosas que van mal.

170
00:09:37,840 --> 00:09:43,270
‫Para empezar, se las arregló para suicidarse con dos disparos, y también parece que está disparando cada cuadro,

171
00:09:43,270 --> 00:09:48,100
‫lo que tendría sentido porque podemos ver al jugador, nos movemos hacia él y luego

172
00:09:48,100 --> 00:09:52,000
‫disparar es la última acción. tenemos aquí, que vamos a ejecutar repetidamente.

173
00:09:52,330 --> 00:09:56,050
‫Entonces, lo que queremos hacer es convertir esto en una secuencia.

174
00:09:56,470 --> 00:10:01,420
‫Así que voy a arrastrar un nodo aquí, haremos un nodo de secuencia, y lo que vamos a hacer

175
00:10:01,420 --> 00:10:04,780
‫es disparar, luego esperar, luego disparar, luego esperar y repetir eso indefinidamente.

176
00:10:04,780 --> 00:10:07,630
‫Así que dispara primero, espera un poco.

177
00:10:07,630 --> 00:10:13,450
‫Así que tal vez esperemos, no sé, la mitad entre tomas y luego querremos repetir esto, lo que podemos

178
00:10:13,450 --> 00:10:14,890
‫hacer con un decorador.

179
00:10:14,890 --> 00:10:20,440
‫Entonces, si hago clic con el botón derecho en Agregar decorador y busco el decorador de bucle, entonces puede ver cuántas veces desea

180
00:10:20,440 --> 00:10:21,250
‫que se reproduzca.

181
00:10:21,580 --> 00:10:22,510
‫Dice tres veces.

182
00:10:22,510 --> 00:10:23,440
‫No lo queremos tres veces.

183
00:10:23,440 --> 00:10:28,960
‫Básicamente, queremos que se repita infinitamente hasta que necesitemos movernos o perder de vista el plan.

184
00:10:28,960 --> 00:10:30,100
‫Tenemos que ir e investigar.

185
00:10:30,580 --> 00:10:32,920
‫Así que vamos a seguir adelante y presionar reproducir y ver si eso funciona.

186
00:10:32,920 --> 00:10:33,550
‫se me acerca

187
00:10:33,550 --> 00:10:35,740
‫Dispara, dispara, dispara.

188
00:10:35,950 --> 00:10:37,450
‫Pero en realidad no me está golpeando.

189
00:10:37,450 --> 00:10:41,590
‫Puedes ver que sus disparos en realidad están aterrizando en él mismo.

190
00:10:42,520 --> 00:10:46,540
‫Y vamos a tratar con ese error en una próxima conferencia.

191
00:10:46,690 --> 00:10:47,140
‫¿Mira eso?

