﻿1
00:00:03,990 --> 00:00:09,630
‫Quindi creeremo una funzione di fuoco e associeremo questa funzione al nostro pulsante sinistro del

2
00:00:09,630 --> 00:00:10,110
‫mouse.

3
00:00:10,110 --> 00:00:16,350
‫E qui puoi vedere che sto disegnando sfere di debug sulla punta della nostra torretta solo per dimostrare

4
00:00:16,350 --> 00:00:18,210
‫che questa mappatura dell'azione funziona.

5
00:00:18,210 --> 00:00:21,360
‫Ogni volta che clicco con il tasto sinistro del mouse, succede qualcosa.

6
00:00:21,720 --> 00:00:23,090
‫Ehi, bentornato.

7
00:00:23,100 --> 00:00:28,770
‫In questo video parleremo della creazione di una funzione di fuoco o di una funzione che possiamo utilizzare

8
00:00:28,770 --> 00:00:31,020
‫quando vogliamo generare i nostri proiettili.

9
00:00:31,020 --> 00:00:36,090
‫Quindi creeremo una funzione di fuoco e la legheremo a una mappatura delle azioni.

10
00:00:36,090 --> 00:00:38,370
‫Ora, abbiamo utilizzato le mappature degli assi.

11
00:00:38,370 --> 00:00:40,260
‫Una mappatura delle azioni è simile.

12
00:00:40,260 --> 00:00:41,550
‫Parliamone ora.

13
00:00:41,550 --> 00:00:47,280
‫Ecco una sezione di uno screenshot della mappatura dell'azione antincendio che abbiamo nelle impostazioni del nostro progetto.

14
00:00:47,280 --> 00:00:51,690
‫Vedrai che abbiamo il pulsante sinistro del mouse assegnato alla mappatura dell'azione di fuoco.

15
00:00:51,690 --> 00:00:55,290
‫Ora una mappatura delle azioni è molto simile a una mappatura degli assi.

16
00:00:55,290 --> 00:00:57,720
‫È possibile assegnargli una chiave o un pulsante.

17
00:00:57,720 --> 00:01:03,420
‫E proprio come una mappatura degli assi, richiede una funzione che può essere collegata alla mappatura dell'azione.

18
00:01:03,420 --> 00:01:07,440
‫Ora, le mappature degli assi attivano ogni singolo fotogramma del gioco.

19
00:01:07,440 --> 00:01:12,840
‫Sono come la funzione tic e il valore float passato cambia a seconda dei pulsanti

20
00:01:12,840 --> 00:01:13,590
‫premuti.

21
00:01:13,590 --> 00:01:15,930
‫Le mappature delle azioni sono leggermente diverse.

22
00:01:15,960 --> 00:01:22,740
‫Una funzione di callback associata a una mappatura di azioni non accetta parametri di input e tutto ciò che accade è quando si

23
00:01:22,740 --> 00:01:25,200
‫preme il pulsante, la funzione viene chiamata.

24
00:01:25,200 --> 00:01:29,430
‫Quello che succede all'interno della funzione dipende da noi come sviluppatori.

25
00:01:29,430 --> 00:01:31,590
‫Ora, le mappature delle azioni sono una tantum.

26
00:01:31,590 --> 00:01:33,030
‫Non succedono ad ogni frame.

27
00:01:33,030 --> 00:01:35,790
‫Succedono solo una volta quando si preme il pulsante.

28
00:01:35,790 --> 00:01:40,950
‫Quindi, se si rilascia il pulsante e lo si preme nuovamente, la funzione verrà richiamata ancora una volta.

29
00:01:40,980 --> 00:01:47,280
‫Ora, quando abbiamo associato le funzioni alle mappature degli assi, abbiamo usato bind axis per le mappature delle

30
00:01:47,280 --> 00:01:52,650
‫azioni, usiamo una funzione chiamata bind action e prende input simili a bind axis.

31
00:01:52,650 --> 00:01:56,400
‫Prende il nome della mappatura dell'azione come una stringa letterale.

32
00:01:56,430 --> 00:01:58,710
‫Richiede anche un puntatore alla classe.

33
00:01:58,710 --> 00:02:04,470
‫Stiamo vincolando la funzione per la quale possiamo usarlo e richiede, ovviamente, una funzione di callback.

34
00:02:04,470 --> 00:02:11,580
‫Ora un parametro aggiuntivo richiede che l'asse di collegamento non richieda come costante enum specificando se desideriamo o

35
00:02:11,580 --> 00:02:17,130
‫meno che questa funzione venga chiamata quando premiamo il pulsante o quando rilasciamo il

36
00:02:17,130 --> 00:02:17,640
‫pulsante.

37
00:02:17,640 --> 00:02:24,000
‫Quindi ci sono due opzioni per questo parametro di input, la costante enum, i. e. premuto e la costante enum,

38
00:02:24,000 --> 00:02:25,350
‫i. e. rilasciato.

39
00:02:25,350 --> 00:02:31,110
‫Ciò significa che possiamo chiamare azione vincolante che passa in i. e. premuto se vorremmo associare una funzione di callback per

40
00:02:31,110 --> 00:02:36,960
‫quando premiamo il pulsante e invece se abbiamo usato i. e. rilasciato, la nostra funzione di richiamata sarebbe

41
00:02:36,960 --> 00:02:40,380
‫stata chiamata quando il pulsante è stato rilasciato per la nostra funzione di fuoco.

42
00:02:40,380 --> 00:02:42,900
‫Ci interessa quando premiamo il pulsante.

43
00:02:42,900 --> 00:02:46,890
‫Quindi creiamo una funzione di fuoco e la leghiamo alla mappatura dell'azione di fuoco.

44
00:02:46,890 --> 00:02:53,490
‫Ora sono qui nello spawn di base e il motivo per cui sono qui nello stagno di base è perché questa funzione di

45
00:02:53,490 --> 00:02:57,270
‫fuoco è qualcosa che possiamo usare nella classe tank e nella classe tower.

46
00:02:57,270 --> 00:03:03,030
‫Quindi, se lo posizioniamo qui nello stagno di base, sia il serbatoio che la torre erediteranno questa funzione.

47
00:03:03,030 --> 00:03:08,850
‫E poiché sia il carro armato che la torre spareranno proiettili, possono semplicemente ereditare la

48
00:03:08,850 --> 00:03:10,230
‫funzione e usarla.

49
00:03:10,260 --> 00:03:16,530
‫Ora, dal momento che vorrei accedere alla funzione in entrambe le classi figlie, posso posizionare questa funzione qui

50
00:03:16,530 --> 00:03:19,500
‫nella sezione protetta, proprio come ruotare la torretta.

51
00:03:19,500 --> 00:03:26,220
‫Quindi sotto rotazione torretta creerò una funzione vuota chiamata fire che non riceve input e possiamo andare

52
00:03:26,220 --> 00:03:30,780
‫avanti e definire la funzione fire in base a CPP.

53
00:03:30,780 --> 00:03:36,990
‫Quindi qui è basato su CPP e appena sotto la torretta di rotazione, posizionerò la funzione di fuoco e

54
00:03:36,990 --> 00:03:41,430
‫dobbiamo qualificare completamente questo nome di funzione e dargli un corpo di funzione.

55
00:03:41,430 --> 00:03:43,680
‫Quindi ora abbiamo una funzione di fuoco.

56
00:03:43,680 --> 00:03:47,040
‫Ora il passaggio successivo è associare questo a una mappatura delle azioni.

57
00:03:47,040 --> 00:03:53,190
‫Ora vogliamo solo associare questa funzione nella classe tank perché il tank è l'unica classe che

58
00:03:53,190 --> 00:03:54,720
‫prenderà l'input dell'utente.

59
00:03:54,720 --> 00:03:59,610
‫In seguito chiameremo la funzione fire nella classe tower, ma ciò sarà come risultato del

60
00:03:59,610 --> 00:04:02,820
‫codice che creiamo e non come risultato dell'input dell'utente.

61
00:04:02,820 --> 00:04:08,730
‫Quindi siamo qui in Tank CP e collegheremo questo e imposteremo il componente di input del giocatore proprio come

62
00:04:08,730 --> 00:04:10,290
‫abbiamo usato l'asse di collegamento.

63
00:04:10,290 --> 00:04:12,900
‫Quindi useremo il componente di input del giocatore.

64
00:04:12,900 --> 00:04:18,720
‫Quindi il componente di input del giocatore e la funzione saranno l'azione vincolante.

65
00:04:18,720 --> 00:04:24,150
‫Ora il primo input sarà la stringa letterale, che andremo a racchiudere in una macro di testo come

66
00:04:24,150 --> 00:04:24,780
‫al solito.

67
00:04:24,780 --> 00:04:27,810
‫E questa mappatura delle azioni è chiamata fuoco.

68
00:04:27,960 --> 00:04:34,080
‫Ora il prossimo parametro sarà quella costante enum che determina se vogliamo che questa funzione venga chiamata

69
00:04:34,080 --> 00:04:39,000
‫o meno quando premiamo il pulsante rispetto a quando rilasciamo il pulsante.

70
00:04:39,000 --> 00:04:42,150
‫E useremo, sottolineo premuto.

71
00:04:43,170 --> 00:04:46,260
‫Dal momento che vorremmo che la nostra funzione venisse chiamata quando premiamo il pulsante.

72
00:04:46,260 --> 00:04:49,520
‫Ora, il prossimo è l'oggetto della classe utente che sarà questo.

73
00:04:49,530 --> 00:04:55,620
‫E infine abbiamo la nostra funzione di richiamata così possiamo dire un incendio di carro armato.

74
00:04:55,770 --> 00:05:00,690
‫E ora la nostra funzione di fuoco è legata alla mappatura dell'azione di fuoco.

75
00:05:00,690 --> 00:05:07,200
‫Quindi sappiamo che la nostra funzione di fuoco è legata alla mappatura dell'azione di fuoco, ma vorremmo una conferma

76
00:05:07,200 --> 00:05:09,900
‫visiva ed è questa la tua sfida.

77
00:05:09,900 --> 00:05:14,130
‫Quindi, nella funzione di fuoco, vorrei che tu disegnassi una sfera di debug.

78
00:05:14,130 --> 00:05:19,440
‫Abbiamo già visto come farlo, quindi vai avanti e compila i parametri con i valori

79
00:05:19,440 --> 00:05:20,640
‫che ritieni appropriati.

80
00:05:20,670 --> 00:05:24,030
‫Usa la posizione del punto di spawn del proiettile.

81
00:05:24,270 --> 00:05:30,210
‫Ora il punto di spawn del proiettile è un componente della scena d'uso e hai visto che i componenti hanno una

82
00:05:30,210 --> 00:05:32,100
‫funzione chiamata ottieni posizione del componente.

83
00:05:32,100 --> 00:05:33,780
‫Questo restituisce un vettore F.

84
00:05:33,810 --> 00:05:38,220
‫Questo è ciò che puoi usare per ottenere la posizione del punto di spawn del proiettile.

85
00:05:38,220 --> 00:05:45,630
‫Ora, quando chiami draw debug sphere, usa una durata di circa 3 secondi in modo che possiamo vedere quella sfera per

86
00:05:45,630 --> 00:05:47,760
‫un po' prima che scompaia.

87
00:05:47,760 --> 00:05:50,460
‫Metti in pausa il video e fallo ora.

88
00:05:53,360 --> 00:05:53,550
‫Bene.

89
00:05:53,660 --> 00:05:56,810
‫Quindi sono tornato qui a Bass Pond e qui a Bass Pond.

90
00:05:57,110 --> 00:06:00,770
‫CP Includerò gli helper di debug del disegno.

91
00:06:00,770 --> 00:06:03,500
‫Quindi abbiamo accesso per disegnare la sfera di debug.

92
00:06:03,500 --> 00:06:07,010
‫Quindi dirò di includere draw debug helpers.

93
00:06:08,240 --> 00:06:12,320
‫E ora quaggiù nella funzione fire, possiamo disegnare la sfera di debug.

94
00:06:12,350 --> 00:06:18,050
‫Ora, la prima cosa che voglio fare è ottenere la posizione del punto di spawn del proiettile.

95
00:06:18,080 --> 00:06:26,240
‫Ora posso creare un vettore f locale per questo e posso chiamare questa posizione del punto di spawn del proiettile e

96
00:06:26,240 --> 00:06:29,870
‫posso inizializzarla usando il punto di spawn del proiettile.

97
00:06:32,030 --> 00:06:35,780
‫E chiamando ottieni la posizione del componente.

98
00:06:35,780 --> 00:06:43,100
‫Quindi ora ho la posizione del punto di spawn del proiettile e questo è ciò che posso usare quando chiamo draw

99
00:06:43,100 --> 00:06:43,850
‫debug sphere.

100
00:06:43,850 --> 00:06:46,130
‫Quindi chiamerò draw debug sphere.

101
00:06:47,450 --> 00:06:53,720
‫E per il primo input abbiamo bisogno del mondo e sappiamo che possiamo ottenere il mondo usando get world next.

102
00:06:53,720 --> 00:06:59,810
‫Abbiamo bisogno del centro della sfera che sarà la nostra posizione del punto di spawn del proiettile.

103
00:06:59,810 --> 00:07:04,190
‫Quindi sarà quello che passerò come secondo parametro.

104
00:07:04,190 --> 00:07:06,190
‫E poi abbiamo bisogno del raggio della sfera.

105
00:07:06,200 --> 00:07:08,330
‫Ora avrò una piccola sfera.

106
00:07:08,480 --> 00:07:15,920
‫Gli darò un raggio di 25 F per il numero di segmenti che userò solo 12 e per il colore posso

107
00:07:15,920 --> 00:07:17,690
‫usare il colore F.

108
00:07:18,680 --> 00:07:21,380
‫Leggi ora quattro disegnano linee persistenti.

109
00:07:21,380 --> 00:07:27,500
‫Avremo le nostre battute in sospeso per 3 secondi in modo da poterlo rendere falso perché non vogliamo

110
00:07:27,500 --> 00:07:28,910
‫che persistano per sempre.

111
00:07:28,940 --> 00:07:36,380
‫Daremo a questa sfera di debug una vita di tre F Quindi andiamo avanti e compiliamo questo ora e premo

112
00:07:36,380 --> 00:07:42,230
‫play e clicco e ora possiamo vedere la nostra sfera di debug e ovviamente scompare dopo

113
00:07:42,230 --> 00:07:43,310
‫3 secondi.

114
00:07:43,640 --> 00:07:49,880
‫Ora questa è una buona conferma che la nostra mappatura delle azioni sta funzionando e ci sta anche dando

115
00:07:49,880 --> 00:07:53,450
‫la verifica della posizione del punto di spawn del proiettile.

116
00:07:53,450 --> 00:07:59,600
‫Quindi, una volta che iniziamo effettivamente a generare proiettili, sappiamo che si genereranno nella posizione corretta,

117
00:07:59,600 --> 00:08:02,420
‫come indicato dalla sfera di debug.

118
00:08:02,420 --> 00:08:03,500
‫Quindi questo è fantastico.

119
00:08:03,650 --> 00:08:09,470
‫Quindi in questo video abbiamo creato una funzione di fuoco e l'abbiamo collegata alla mappatura dell'azione di fuoco.

120
00:08:09,740 --> 00:08:15,800
‫E per dimostrare che stava funzionando, abbiamo disegnato una sfera di debug nel punto di spawn del proiettile ogni volta che facciamo clic con

121
00:08:15,830 --> 00:08:21,710
‫il pulsante sinistro del mouse in modo da avere una funzione di fuoco, siamo quasi pronti per iniziare a generare i proiettili.

122
00:08:21,710 --> 00:08:25,250
‫E abbiamo anche inserito questa funzione nella classe pong di base.

123
00:08:25,250 --> 00:08:27,980
‫In questo modo anche la nostra torre può usarlo.

124
00:08:27,980 --> 00:08:32,990
‫Quindi, nel prossimo video, discuteremo di come la nostra torre utilizzerà questa funzione.

125
00:08:33,530 --> 00:08:34,460
‫Ci vediamo presto.

