﻿1
00:00:03,990 --> 00:00:09,630
‫Así que vamos a crear una función de disparo y vamos a asociar esta función con el botón izquierdo del

2
00:00:09,630 --> 00:00:10,110
‫mouse.

3
00:00:10,110 --> 00:00:16,350
‫Y aquí pueden ver que estoy dibujando esferas de depuración en la punta de nuestro barril de torreta solo para probar que

4
00:00:16,350 --> 00:00:18,210
‫este mapeo de acción está funcionando.

5
00:00:18,210 --> 00:00:21,360
‫Cada vez que hago clic con el botón izquierdo del mouse, algo está sucediendo.

6
00:00:21,720 --> 00:00:23,090
‫Oye, bienvenido de nuevo.

7
00:00:23,100 --> 00:00:28,770
‫En este video, vamos a hablar sobre cómo crear una función de disparo o una función que podamos

8
00:00:28,770 --> 00:00:31,020
‫usar cuando queramos generar nuestros proyectiles.

9
00:00:31,020 --> 00:00:36,090
‫Así que vamos a crear una función de disparo y la vincularemos a un mapeo de acción.

10
00:00:36,090 --> 00:00:38,370
‫Ahora, hemos estado usando asignaciones de ejes.

11
00:00:38,370 --> 00:00:40,260
‫Un mapeo de acciones es similar.

12
00:00:40,260 --> 00:00:41,550
‫Hablemos de eso ahora.

13
00:00:41,550 --> 00:00:47,280
‫Aquí hay una sección de una captura de pantalla del mapeo de acción de fuego que tenemos en la configuración de nuestro proyecto.

14
00:00:47,280 --> 00:00:51,690
‫Verá que tenemos el botón izquierdo del mouse asignado al mapeo de acción de fuego.

15
00:00:51,690 --> 00:00:55,290
‫Ahora, un mapeo de acciones es muy parecido a un mapeo de ejes.

16
00:00:55,290 --> 00:00:57,720
‫Puede asignarle una tecla o un botón.

17
00:00:57,720 --> 00:01:03,420
‫Y al igual que un mapeo de ejes, requiere una función que se pueda vincular al mapeo de acciones.

18
00:01:03,420 --> 00:01:07,440
‫Ahora, las asignaciones de ejes disparan cada fotograma del juego.

19
00:01:07,440 --> 00:01:12,840
‫Son como la función de tic y el valor flotante pasado cambia según los botones que

20
00:01:12,840 --> 00:01:13,590
‫se presionen.

21
00:01:13,590 --> 00:01:15,930
‫Las asignaciones de acciones son ligeramente diferentes.

22
00:01:15,960 --> 00:01:22,740
‫Una función de devolución de llamada vinculada a un mapeo de acción no toma parámetros de entrada, y todo lo que sucede es que cuando

23
00:01:22,740 --> 00:01:25,200
‫presiona el botón, se llama a la función.

24
00:01:25,200 --> 00:01:29,430
‫Lo que sucede dentro de la función depende de nosotros como desarrolladores.

25
00:01:29,430 --> 00:01:31,590
‫Ahora, los mapeos de acción son únicos.

26
00:01:31,590 --> 00:01:33,030
‫No suceden en cada fotograma.

27
00:01:33,030 --> 00:01:35,790
‫Solo suceden una vez cuando presionas el botón.

28
00:01:35,790 --> 00:01:40,950
‫Entonces, si suelta el botón y lo presiona nuevamente, la función se llamará una vez más.

29
00:01:40,980 --> 00:01:47,280
‫Ahora, cuando vinculamos funciones a las asignaciones de ejes, usamos el eje de vinculación para las asignaciones de acciones, usamos

30
00:01:47,280 --> 00:01:52,650
‫una función llamada acción de vinculación y toma entradas similares a las del eje de vinculación.

31
00:01:52,650 --> 00:01:56,400
‫Toma el nombre de la asignación de acciones como un literal de cadena.

32
00:01:56,430 --> 00:01:58,710
‫También requiere un puntero a la clase.

33
00:01:58,710 --> 00:02:04,470
‫Estamos vinculando la función para la que podemos usar esto y, por supuesto, requiere una función de devolución de llamada.

34
00:02:04,470 --> 00:02:11,580
‫Ahora, se necesita un parámetro adicional para que el eje de enlace no requiera una constante de enumeración que especifique si

35
00:02:11,580 --> 00:02:17,130
‫deseamos o no que se llame a esta función cuando presionamos el botón o cuando lo

36
00:02:17,130 --> 00:02:17,640
‫soltamos.

37
00:02:17,640 --> 00:02:24,000
‫Entonces, hay dos opciones para este parámetro de entrada, la constante de enumeración, i. mi. presionado y la enumeración constante,

38
00:02:24,000 --> 00:02:25,350
‫i. mi. liberado.

39
00:02:25,350 --> 00:02:31,110
‫Esto significa que podemos llamar a la acción de enlace pasando en i. mi. presionado si nos gustaría vincular una función de devolución de llamada

40
00:02:31,110 --> 00:02:36,960
‫para cuando presionamos el botón y en su lugar si usamos i. mi. liberado, nuestra función de devolución de

41
00:02:36,960 --> 00:02:40,380
‫llamada se llamaría cuando se soltara el botón para nuestra función de disparo.

42
00:02:40,380 --> 00:02:42,900
‫Nos preocupa cuando presionamos el botón.

43
00:02:42,900 --> 00:02:46,890
‫Así que hagamos una función de fuego y vinculémosla al mapeo de acción de fuego.

44
00:02:46,890 --> 00:02:53,490
‫Ahora estoy aquí en el spawn base y la razón por la que estoy aquí en el estanque base es porque esta función de fuego es algo

45
00:02:53,490 --> 00:02:57,270
‫que podemos usar en la clase de tanque y en la clase de torre.

46
00:02:57,270 --> 00:03:03,030
‫Entonces, si lo colocamos aquí en el estanque base, tanto el tanque como la torre heredarán esta función.

47
00:03:03,030 --> 00:03:08,850
‫Y dado que tanto el tanque como la torre van a disparar proyectiles, simplemente pueden heredar la

48
00:03:08,850 --> 00:03:10,230
‫función y usarla.

49
00:03:10,260 --> 00:03:16,530
‫Ahora, dado que me gustaría acceder a la función en ambas clases secundarias, puedo colocar esta función aquí en

50
00:03:16,530 --> 00:03:19,500
‫la sección protegida, al igual que rotar torreta.

51
00:03:19,500 --> 00:03:26,220
‫Entonces, bajo la rotación de la torreta, voy a crear una función de vacío llamada fuego que no requiere entradas y

52
00:03:26,220 --> 00:03:30,780
‫podemos seguir adelante y definir la función de fuego en función del CPP.

53
00:03:30,780 --> 00:03:36,990
‫Así que aquí está basado en CPP y justo debajo de la torreta giratoria, voy a colocar la función de disparo

54
00:03:36,990 --> 00:03:41,430
‫y necesitamos calificar completamente este nombre de función y darle un cuerpo de función.

55
00:03:41,430 --> 00:03:43,680
‫Así que ahora tenemos una función de fuego.

56
00:03:43,680 --> 00:03:47,040
‫Ahora, el siguiente paso es vincular esto a un mapeo de acción.

57
00:03:47,040 --> 00:03:53,190
‫Ahora solo queremos vincular esta función en la clase de tanque porque el tanque es la única clase que tomará

58
00:03:53,190 --> 00:03:54,720
‫la entrada del usuario.

59
00:03:54,720 --> 00:03:59,610
‫Llamaremos a la función de fuego en la clase torre más tarde, pero eso será como resultado del código

60
00:03:59,610 --> 00:04:02,820
‫que creamos y no como resultado de la entrada del usuario.

61
00:04:02,820 --> 00:04:08,730
‫Así que estamos aquí en Tank CP y vamos a vincular esto y configurar el componente de entrada del jugador tal como

62
00:04:08,730 --> 00:04:10,290
‫usamos el eje de vinculación.

63
00:04:10,290 --> 00:04:12,900
‫Así que vamos a usar el componente de entrada del jugador.

64
00:04:12,900 --> 00:04:18,720
‫Entonces, el componente de entrada del jugador y la función serán acciones de vinculación.

65
00:04:18,720 --> 00:04:24,150
‫Ahora, la primera entrada será el literal de cadena, que envolveremos en una macro de texto como de

66
00:04:24,150 --> 00:04:24,780
‫costumbre.

67
00:04:24,780 --> 00:04:27,810
‫Y este mapeo de acciones se llama fuego.

68
00:04:27,960 --> 00:04:34,080
‫Ahora, el siguiente parámetro será esa constante de enumeración que determina si queremos o no que se

69
00:04:34,080 --> 00:04:39,000
‫llame a esta función cuando presionamos el botón o cuando lo soltamos.

70
00:04:39,000 --> 00:04:42,150
‫Y lo vamos a utilizar, subrayo presionado.

71
00:04:43,170 --> 00:04:46,260
‫Ya que nos gustaría que se llamara a nuestra función cuando presionamos el botón.

72
00:04:46,260 --> 00:04:49,520
‫Ahora, el siguiente es el objeto de clase de usuario que será este.

73
00:04:49,530 --> 00:04:55,620
‫Y finalmente tenemos nuestra función de devolución de llamada para que podamos decir un tanque de fuego.

74
00:04:55,770 --> 00:05:00,690
‫Y ahora nuestra función de fuego está ligada al mapeo de acción de fuego.

75
00:05:00,690 --> 00:05:07,200
‫Entonces, sabemos que nuestra función de disparo está ligada al mapeo de acción de fuego, pero nos gustaría una

76
00:05:07,200 --> 00:05:09,900
‫confirmación visual y ese será su desafío.

77
00:05:09,900 --> 00:05:14,130
‫Entonces, en la función de disparo, me gustaría que dibujaras una esfera de depuración.

78
00:05:14,130 --> 00:05:19,440
‫Ya hemos visto cómo hacer esto, así que continúe y complete los parámetros con los valores

79
00:05:19,440 --> 00:05:20,640
‫que considere apropiados.

80
00:05:20,670 --> 00:05:24,030
‫Usa la ubicación del punto de generación del proyectil.

81
00:05:24,270 --> 00:05:30,210
‫Ahora, el punto de generación del proyectil es un componente de escena de uso y ha visto que los componentes tienen una

82
00:05:30,210 --> 00:05:32,100
‫función llamada obtener la ubicación del componente.

83
00:05:32,100 --> 00:05:33,780
‫Esto devuelve un vector F.

84
00:05:33,810 --> 00:05:38,220
‫Esto es lo que puede usar para obtener la ubicación del punto de generación del proyectil.

85
00:05:38,220 --> 00:05:45,630
‫Ahora, cuando llames a dibujar la esfera de depuración, utiliza una duración de unos 3 segundos para que podamos ver esa esfera durante

86
00:05:45,630 --> 00:05:47,760
‫un rato antes de que desaparezca.

87
00:05:47,760 --> 00:05:50,460
‫Pausa el video y haz esto ahora.

88
00:05:53,360 --> 00:05:53,550
‫Bueno.

89
00:05:53,660 --> 00:05:56,810
‫Así que estoy de vuelta aquí en Bass Pond y aquí en Bass Pond.

90
00:05:57,110 --> 00:06:00,770
‫CP Voy a incluir asistentes de depuración de dibujo.

91
00:06:00,770 --> 00:06:03,500
‫Entonces tenemos acceso para dibujar la esfera de depuración.

92
00:06:03,500 --> 00:06:07,010
‫Así que voy a decir que incluya ayudantes de depuración de dibujo.

93
00:06:08,240 --> 00:06:12,320
‫Y ahora aquí abajo en la función de disparo, podemos dibujar la esfera de depuración.

94
00:06:12,350 --> 00:06:18,050
‫Ahora, lo primero que quiero hacer es obtener la ubicación del punto de generación del proyectil.

95
00:06:18,080 --> 00:06:26,240
‫Ahora puedo crear un vector f local para esto y puedo llamar a esta ubicación del punto de generación del proyectil y

96
00:06:26,240 --> 00:06:29,870
‫puedo inicializarlo usando el punto de generación del proyectil.

97
00:06:32,030 --> 00:06:35,780
‫Y llamando a obtener la ubicación del componente.

98
00:06:35,780 --> 00:06:43,100
‫Así que ahora tengo la ubicación del punto de generación del proyectil y esto es lo que puedo usar cuando llamo a dibujar la esfera

99
00:06:43,100 --> 00:06:43,850
‫de depuración.

100
00:06:43,850 --> 00:06:46,130
‫Así que voy a llamar a dibujar esfera de depuración.

101
00:06:47,450 --> 00:06:53,720
‫Y para la primera entrada necesitamos el mundo y sabemos que podemos obtener el mundo usando get world next.

102
00:06:53,720 --> 00:06:59,810
‫Necesitamos el centro de la esfera que será la ubicación del punto de generación de proyectiles.

103
00:06:59,810 --> 00:07:04,190
‫Así que eso será lo que paso como el segundo parámetro.

104
00:07:04,190 --> 00:07:06,190
‫Y luego necesitamos el radio de la esfera.

105
00:07:06,200 --> 00:07:08,330
‫Ahora voy a tener una pequeña esfera.

106
00:07:08,480 --> 00:07:15,920
‫Le daré un radio de, digamos, 25 F para la cantidad de segmentos que solo usaré 12 y para el color puedo

107
00:07:15,920 --> 00:07:17,690
‫usar el color F.

108
00:07:18,680 --> 00:07:21,380
‫Lea ahora cuatro líneas persistentes de dibujo.

109
00:07:21,380 --> 00:07:27,500
‫Vamos a tener nuestras líneas colgando durante 3 segundos para que podamos hacer esto falso porque no queremos

110
00:07:27,500 --> 00:07:28,910
‫que persistan para siempre.

111
00:07:28,940 --> 00:07:36,380
‫Vamos a darle a esta esfera de depuración una vida útil de tres F Así que sigamos adelante y compilemos esto ahora y voy

112
00:07:36,380 --> 00:07:42,230
‫a presionar reproducir y hacer clic y ahora podemos ver nuestra esfera de depuración y, por supuesto, desaparece después

113
00:07:42,230 --> 00:07:43,310
‫de 3 segundos.

114
00:07:43,640 --> 00:07:49,880
‫Ahora bien, esta es una buena confirmación de que nuestro mapeo de acción está funcionando y también nos brinda

115
00:07:49,880 --> 00:07:53,450
‫verificación de la ubicación del punto de generación del proyectil.

116
00:07:53,450 --> 00:07:59,600
‫Entonces, una vez que comencemos a generar proyectiles, sabemos que se generarán en la ubicación correcta,

117
00:07:59,600 --> 00:08:02,420
‫como lo indica la esfera de depuración.

118
00:08:02,420 --> 00:08:03,500
‫Así que esto es genial.

119
00:08:03,650 --> 00:08:09,470
‫Así que en este video creamos una función de fuego y la vinculamos al mapeo de acción de fuego.

120
00:08:09,740 --> 00:08:15,800
‫Y para demostrar que funcionaba, dibujamos una esfera de depuración en el punto de generación del proyectil cada vez que hacemos clic

121
00:08:15,830 --> 00:08:21,710
‫con el botón izquierdo del mouse para tener una función de disparo, estamos casi listos para comenzar a generar proyectiles.

122
00:08:21,710 --> 00:08:25,250
‫Y también hemos colocado esta función en la clase base pong.

123
00:08:25,250 --> 00:08:27,980
‫Así nuestra torre también puede usarlo.

124
00:08:27,980 --> 00:08:32,990
‫Entonces, en el siguiente video, discutiremos cómo nuestra torre utilizará esta función.

125
00:08:33,530 --> 00:08:34,460
‫Te veré pronto.

