﻿1
00:00:04,320 --> 00:00:05,280
‫Ciao e Benvenuto.

2
00:00:05,280 --> 00:00:11,460
‫In questa lezione, renderemo un nemico più una minaccia implementando un nodo di ripresa in C++.

3
00:00:11,670 --> 00:00:13,530
‫Entriamo e vediamo come farlo.

4
00:00:14,670 --> 00:00:19,730
‫Quindi una funzionalità che manca chiaramente al nostro albero del comportamento è la capacità di scattare.

5
00:00:20,070 --> 00:00:24,900
‫Quello che idealmente vorrei fare è spostarmi nella posizione del giocatore e poi sparare.

6
00:00:24,900 --> 00:00:28,500
‫Ma prima vogliamo cambiare un po' il modo in cui eseguiamo il movimento.

7
00:00:28,500 --> 00:00:33,090
‫Ci sono un paio di cose che voglio modificare, quindi se seleziono lo spostamento su Node, una cosa che voglio

8
00:00:33,090 --> 00:00:34,260
‫cambiare è il raggio.

9
00:00:34,260 --> 00:00:39,960
‫Non voglio che il nemico venga verso di me, quindi se cambio il raggio accettabile, smetterà

10
00:00:39,960 --> 00:00:42,870
‫di allontanarsi di cinque metri da me.

11
00:00:42,870 --> 00:00:43,560
‫Quindi si fermerà.

12
00:00:43,740 --> 00:00:45,660
‫Dammi una bella distanza di cinque metri.

13
00:00:45,660 --> 00:00:48,150
‫Si avvicina a me, loro vanno e lui si ferma e mi fissa.

14
00:00:48,180 --> 00:00:53,610
‫Ora l'altra cosa che voglio fare è quaggiù nella sezione della lavagna, puoi vedere che c'è un valore di

15
00:00:53,610 --> 00:00:54,750
‫osservazione della lavagna.

16
00:00:54,750 --> 00:00:58,170
‫Se non lo abbiamo controllato, vediamo cosa succede mentre mi muovo.

17
00:00:58,620 --> 00:01:03,630
‫Fondamentalmente e questo era leggermente più ovvio quando avevamo un raggio accettabile più piccolo.

18
00:01:03,630 --> 00:01:06,570
‫Quindi fissiamolo laggiù a cinque e quattro ora.

19
00:01:07,110 --> 00:01:09,810
‫E se premo play, puoi vederlo mentre mi muovo.

20
00:01:09,810 --> 00:01:14,850
‫Va nella mia ultima posizione e solo allora quando l'ha raggiunta, viene aggiornato.

21
00:01:14,940 --> 00:01:16,080
‫Non è quello che vogliamo.

22
00:01:16,410 --> 00:01:19,500
‫Quello che vogliamo è che venga costantemente verso di noi.

23
00:01:19,500 --> 00:01:25,260
‫E se controlli il valore osservato della lavagna, in sostanza quello che sta dicendo è che ogni

24
00:01:25,260 --> 00:01:29,910
‫volta che la posizione di gioco cambia, aggiorneremo dove ci stiamo spostando.

25
00:01:30,330 --> 00:01:36,870
‫Quindi, se vado avanti e premo play e muovi, puoi vedere che mi segue continuamente e aggiorna il suo

26
00:01:36,870 --> 00:01:37,470
‫percorso.

27
00:01:37,830 --> 00:01:38,970
‫Questo è esattamente quello che vogliamo.

28
00:01:39,300 --> 00:01:43,800
‫Quindi ora possiamo cambiare il nostro raggio di accettazione a 500 e diventa meno ovvio.

29
00:01:43,800 --> 00:01:47,190
‫Ma è comunque positivo che abbiamo il nostro valore di lavagna osservato lì.

30
00:01:47,220 --> 00:01:52,950
‫E poi il comportamento che vogliamo è che una volta che arriva nel raggio di noi in questo modo, si fermerà

31
00:01:53,280 --> 00:01:54,210
‫e ci sparerà.

32
00:01:54,300 --> 00:01:56,760
‫Per questo abbiamo bisogno di un nuovo tipo di compiti.

33
00:01:56,760 --> 00:01:58,740
‫Creeremo qui una nuova attività C++?

34
00:01:59,070 --> 00:02:02,070
‫Arriverà ad aggiungere una nuova, nuova classe C++.

35
00:02:02,070 --> 00:02:06,690
‫Quindi andremo a mostrare tutte le classi e cercheremo l'attività beta.

36
00:02:07,110 --> 00:02:08,280
‫Ora, quale vogliamo?

37
00:02:08,280 --> 00:02:11,730
‫Il nodo delle attività beta o la base della lavagna delle attività beta?

38
00:02:12,150 --> 00:02:16,440
‫Bene, in realtà non abbiamo bisogno di usare una chiave perché cercheremo solo di sparare.

39
00:02:16,440 --> 00:02:17,490
‫Questo è tutto ciò che faremo.

40
00:02:17,490 --> 00:02:19,470
‫Premiamo il grilletto della nostra pistola.

41
00:02:19,740 --> 00:02:23,310
‫Tutta la mira verrà eseguita altrove nel nostro albero del comportamento.

42
00:02:23,760 --> 00:02:31,410
‫Quindi apriamo il nodo dell'attività beta, la classe base qui, e chiameremo questa attività Beaty.

43
00:02:32,390 --> 00:02:33,140
‫Sottolineare.

44
00:02:33,410 --> 00:02:33,860
‫Sparare.

45
00:02:34,790 --> 00:02:36,560
‫Andiamo avanti e creiamo quella classe.

46
00:02:36,710 --> 00:02:39,230
‫Quindi finiamo con qualcosa del genere.

47
00:02:39,590 --> 00:02:41,900
‫Quindi vogliamo fare la stessa configurazione.

48
00:02:41,900 --> 00:02:47,620
‫Quindi è una piccola sfida per noi fare lo stesso tipo di configurazione che abbiamo per la nostra lavagna.

49
00:02:47,660 --> 00:02:48,860
‫Cancella valore lavagna.

50
00:02:48,860 --> 00:02:50,200
‫Vogliamo avere un nome.

51
00:02:50,210 --> 00:02:53,780
‫Vogliamo eseguire le note sull'attività, mettere in pausa il video e provare a farlo.

52
00:02:54,030 --> 00:02:54,260
‫Bene.

53
00:02:54,270 --> 00:02:54,870
‫Ben tornato.

54
00:02:54,890 --> 00:02:56,440
‫Quindi era un mini compito.

55
00:02:56,450 --> 00:03:01,970
‫Copierò solo le firme dalla mia chiara valle della lavagna per le riprese, comprese

56
00:03:02,150 --> 00:03:04,310
‫le sezioni pubbliche e protette.

57
00:03:04,670 --> 00:03:07,430
‫Ho intenzione di cambiare il nome del nostro costruttore.

58
00:03:07,730 --> 00:03:10,100
‫Ho intenzione di andare avanti e implementare un costruttore.

59
00:03:10,130 --> 00:03:12,020
‫E cosa dovevamo fare?

60
00:03:12,020 --> 00:03:16,130
‫Dobbiamo impostare il nome del nodo uguale a sparare.

61
00:03:16,430 --> 00:03:17,480
‫È così che lo chiameremo.

62
00:03:17,660 --> 00:03:23,380
‫Quindi torniamo all'intestazione per l'attività di ripresa e proveremo a implementare l'attività di esecuzione ora.

63
00:03:23,390 --> 00:03:29,420
‫E dobbiamo solo richiamare una sorta di copia che dal nostro file Clear Blackboard Values CP

64
00:03:29,570 --> 00:03:32,580
‫e quindi siamo pronti per iniziare l'implementazione.

65
00:03:32,600 --> 00:03:37,160
‫Quindi la prima cosa che dovremo fare qui, diamo un po' più di spazio,

66
00:03:37,160 --> 00:03:39,800
‫è che dovremo impadronirci della nostra pedina.

67
00:03:39,800 --> 00:03:41,510
‫Perché dobbiamo impadronirci della nostra pedina?

68
00:03:41,510 --> 00:03:44,990
‫Bene, diamo un'occhiata al personaggio dello sparatutto, che è una pedina.

69
00:03:44,990 --> 00:03:46,490
‫Ricordi il personaggio sparatutto?

70
00:03:46,490 --> 00:03:48,820
‫Il punto H ha un metodo di ripresa.

71
00:03:48,830 --> 00:03:54,740
‫Questo è ciò che vogliamo chiamare essenzialmente lo stesso che stiamo facendo noi del giocatore.

72
00:03:54,740 --> 00:03:58,460
‫Sta tenendo premuto il pulsante di attivazione e questo chiama questo metodo di tiro.

73
00:03:58,460 --> 00:04:01,040
‫Vogliamo che il ragazzo sia in grado di fare lo stesso.

74
00:04:01,040 --> 00:04:06,770
‫Quando hai l'attività di tiro, tieni premuto il pulsante di attivazione o premi ripetutamente quel pulsante di attivazione in modo

75
00:04:06,770 --> 00:04:10,040
‫che l'attività di esecuzione sia il posto giusto per farlo.

76
00:04:10,040 --> 00:04:15,230
‫Probabilmente restituiremo ciò che qui, perché ricorda, questa azione è solo un colpo.

77
00:04:15,230 --> 00:04:16,730
‫Non è uno scatto continuo.

78
00:04:16,730 --> 00:04:17,510
‫Cosa faremo?

79
00:04:17,540 --> 00:04:21,140
‫Restituiremo il successo del risultato della nota vuota.

80
00:04:21,140 --> 00:04:22,400
‫Se ci riuscissimo tutti.

81
00:04:22,400 --> 00:04:28,370
‫Se ci siamo riusciti perché non abbiamo bisogno di chiamare continuamente tick.

82
00:04:28,400 --> 00:04:32,540
‫Non è necessario che questa attività venga eseguita più a lungo di un singolo frame.

83
00:04:32,570 --> 00:04:36,950
‫E l'altra cosa che dobbiamo fare è prendere possesso, come ho detto, di quella classe di pedoni.

84
00:04:36,950 --> 00:04:41,300
‫Bene, quello che farò è mostrarti come puoi entrare in possesso del controller dell'aria.

85
00:04:41,300 --> 00:04:47,360
‫E dal controller aereo, sappiamo che possiamo chiamare get pedone per ottenere il pedone che era controllato.

86
00:04:47,600 --> 00:04:53,540
‫E sappiamo che possiamo lanciare quella pedina controllata nell'implementazione del nostro personaggio sparatutto.

87
00:04:53,540 --> 00:04:58,640
‫Quindi, come otteniamo il controller aereo da questo?

88
00:04:58,850 --> 00:05:03,500
‫Bene, abbiamo il nostro componente dell'albero del comportamento, che sappiamo essere su un controller aereo.

89
00:05:03,500 --> 00:05:09,200
‫Quindi forse ha qualcosa che possiamo usare se andiamo al componente dell'albero del comportamento e diamo un'occhiata qui

90
00:05:09,500 --> 00:05:12,320
‫per tutti i metodi che potrebbero essere utili.

91
00:05:12,320 --> 00:05:18,050
‫C'è molto qui dentro, ma se cerchiamo il controller, non vediamo nient'altro che forse da qualche parte in una delle

92
00:05:18,050 --> 00:05:23,720
‫sue classi base perché la classe genitore per il componente dell'albero del comportamento d'uso è il componente del tuo

93
00:05:23,720 --> 00:05:24,290
‫cervello.

94
00:05:24,650 --> 00:05:27,320
‫Seguiamo quello per cercare il controller qui.

95
00:05:27,320 --> 00:05:29,150
‫Puoi vedere che c'è una proprietà per questo.

96
00:05:29,570 --> 00:05:31,040
‫C'è un getter?

97
00:05:31,040 --> 00:05:38,660
‫Sì, c'è chiamato get air owner e dovrebbe tornare se ci passiamo sopra e controllo un puntatore.

98
00:05:38,960 --> 00:05:44,360
‫Quindi dovresti essere in grado di usarlo per prendere il pedone, lanciarlo su un personaggio sparatutto e quindi

99
00:05:44,360 --> 00:05:46,250
‫chiamare il metodo di tiro.

100
00:05:46,370 --> 00:05:47,570
‫Quindi questa sarà la tua sfida.

101
00:05:47,570 --> 00:05:47,870
‫La chiamata.

102
00:05:47,870 --> 00:05:54,920
‫Il metodo di tiro, rendilo pubblico, prendi il pedone, lancia la chiamata del pedone, spara e poi provalo nel

103
00:05:54,920 --> 00:05:56,420
‫tuo albero del comportamento.

104
00:05:56,420 --> 00:05:57,620
‫Metti in pausa il video e fallo partire.

105
00:05:57,950 --> 00:05:58,250
‫Bene.

106
00:05:58,250 --> 00:05:58,820
‫Ben tornato.

107
00:05:58,820 --> 00:06:04,520
‫Quindi, prima di tutto, il primo passo è rendere pubblico questo metodo di ripresa perché deve

108
00:06:04,520 --> 00:06:07,070
‫essere chiamato dall'esterno di questa classe.

109
00:06:07,400 --> 00:06:11,480
‫Quindi lo metteremo solo subendo danni, dovremo sparare, dargli un po' di spazio, un po'

110
00:06:11,480 --> 00:06:12,170
‫di respiro.

111
00:06:12,170 --> 00:06:14,270
‫Mi piace lo spazio bianco mi aiuta a vedere, aiutami a pensare.

112
00:06:14,660 --> 00:06:17,000
‫Poi andremo al servizio fotografico di Beatty.

113
00:06:17,300 --> 00:06:21,470
‫Prima di tutto verificheremo che I controller non sia nullo.

114
00:06:21,470 --> 00:06:24,320
‫Altrimenti non possiamo usare l'operatore freccia su di esso.

115
00:06:24,320 --> 00:06:27,140
‫Solo una buona pratica generale per fare questi controlli delle unghie.

116
00:06:27,140 --> 00:06:32,270
‫Quindi, se questo proprietario non è uguale, è uguale a puntatore nullo.

117
00:06:32,600 --> 00:06:35,390
‫Vorremo tornare presto con un fallimento.

118
00:06:35,390 --> 00:06:38,510
‫Quindi questo compito fallirà se non abbiamo un controller aereo.

119
00:06:38,510 --> 00:06:39,890
‫È abbastanza semplice.

120
00:06:39,890 --> 00:06:43,280
‫Quindi posso restituire i risultati del nodo vuoto.

121
00:06:43,280 --> 00:06:43,670
‫Colon.

122
00:06:43,670 --> 00:06:45,560
‫Il colon ha fallito in questo modo.

123
00:06:45,560 --> 00:06:52,340
‫E poi faremo il proprietario, il proprietario del componente, andremo avanti.

124
00:06:52,340 --> 00:06:54,650
‫In effetti, potremmo aver bisogno di includere un capo di file qui.

125
00:06:54,650 --> 00:07:03,650
‫Quindi facciamo un hash include e sarà la struttura di gioco e il controller e se penso, sì, qualsiasi controller dovrebbe fare, ma penso che

126
00:07:03,650 --> 00:07:10,430
‫abbiamo bisogno del controller dell'aria perché questo è il tipo di punti su cui torneremo e poi faremo una

127
00:07:10,430 --> 00:07:15,590
‫freccia e faremo un get -- qui a lamentarmi di qualcosa nella mia testa,

128
00:07:15,590 --> 00:07:18,590
‫un file, forse non ho qualcosa di giusto.

129
00:07:18,590 --> 00:07:21,410
‫Quindi taglio in avanti mi sembra di aver sbagliato.

130
00:07:21,410 --> 00:07:22,970
‫In realtà non è nella struttura del gioco.

131
00:07:22,970 --> 00:07:26,240
‫Hai solo un controller per includerlo.

132
00:07:26,240 --> 00:07:28,580
‫Insegnami per essere così blasé su questo.

133
00:07:28,580 --> 00:07:29,150
‫Quindi eccoci qua.

134
00:07:29,150 --> 00:07:30,950
‫Ora possiamo ottenere il -- dal.

135
00:07:32,190 --> 00:07:34,710
‫E come ho detto, dobbiamo anche fare un cast.

136
00:07:34,950 --> 00:07:41,550
‫Quindi faremo un cast per il tipo di cui avremo bisogno per lanciare la A del personaggio dello sparatutto.

137
00:07:41,560 --> 00:07:45,720
‫Quindi è nella sua forma completa, sparare a un personaggio, sparare, un personaggio.

138
00:07:45,750 --> 00:07:48,840
‫E dovremo controllare anche il risultato di questo.

139
00:07:49,020 --> 00:07:51,300
‫Ma dobbiamo includere il personaggio di Ash Shoots.

140
00:07:51,300 --> 00:07:58,050
‫Quindi l'hash include nella parte superiore il personaggio dello sparatutto pensato in questo modo.

141
00:07:58,680 --> 00:08:04,170
‫E memorizzeremo che in un tipo di puntatore spara il personaggio sarà ancora un personaggio.

142
00:08:04,680 --> 00:08:06,300
‫Quindi lo chiamerò, lo conserveremo lì.

143
00:08:06,960 --> 00:08:13,860
‫Fondamentalmente, dobbiamo assicurarci che neanche il pedone get restituisca perché get pedone potrebbe restituire null se

144
00:08:14,100 --> 00:08:17,280
‫l'occhio non sta attualmente controllando un pedone.

145
00:08:18,250 --> 00:08:24,790
‫Oppure questo cast potrebbe restituire null se il tipo non è un personaggio da otto tiratori che controlla un diverso tipo

146
00:08:24,790 --> 00:08:25,600
‫di pedone.

147
00:08:25,960 --> 00:08:30,610
‫Fortunatamente, questi due vanno abbastanza bene insieme, quindi se provi a lanciare un puntatore nullo, il risultato è solo

148
00:08:30,610 --> 00:08:32,770
‫un puntatore nullo, motivo per cui possiamo farlo.

149
00:08:33,190 --> 00:08:34,630
‫Questi controlli tutti in una riga.

150
00:08:35,380 --> 00:08:37,450
‫Quindi possiamo fare un carattere if.

151
00:08:39,060 --> 00:08:41,010
‫È uguale a puntatore nullo.

152
00:08:42,420 --> 00:08:44,600
‫Allora vogliamo fallire di nuovo.

153
00:08:44,610 --> 00:08:45,690
‫Quindi torna.

154
00:08:46,900 --> 00:08:48,790
‫Risultati del nodo IBT.

155
00:08:49,510 --> 00:08:49,840
‫Colon.

156
00:08:49,840 --> 00:08:51,720
‫Il colon ha fallito in questo modo.

157
00:08:51,910 --> 00:08:56,110
‫E infine, dopo tutti questi controlli, sappiamo di avere un personaggio sparatutto.

158
00:08:56,110 --> 00:08:57,220
‫Dovremmo essere in grado di chiamare, sparare.

159
00:08:57,220 --> 00:09:01,450
‫Quindi personaggio freccia e spara in questo modo.

160
00:09:01,900 --> 00:09:04,750
‫Quindi questo ci permetterà finalmente di sparare.

161
00:09:04,760 --> 00:09:07,270
‫Passiamo al nostro albero del comportamento.

162
00:09:07,930 --> 00:09:15,010
‫E qui vorremo tirare verso il basso per posizionare un nuovo nodo e cercare il nuovo compito di ripresa che

163
00:09:15,010 --> 00:09:16,000
‫abbiamo qui.

164
00:09:16,480 --> 00:09:20,620
‫E non sono sicuro di aver compilato, quindi mi assicurerò che tutto venga compilato di nuovo.

165
00:09:20,620 --> 00:09:26,530
‫E una volta fatto, possiamo andare oltre e premere play e vedere se questo tizio si avvicina e spara, ok?

166
00:09:26,530 --> 00:09:27,370
‫Si lo fa.

167
00:09:27,370 --> 00:09:32,680
‫Sfortunatamente, sta sparando ripetutamente e si sta sparando a un piede.

168
00:09:32,950 --> 00:09:35,890
‫Quindi qualcosa non sta proprio scrivendo proprio lì.

169
00:09:35,890 --> 00:09:37,840
‫Quindi ci sono due cose che vanno storte.

170
00:09:37,840 --> 00:09:43,270
‫Per cominciare, è riuscito a uccidersi con due colpi, e sembra anche che stia riprendendo ogni singolo

171
00:09:43,270 --> 00:09:48,100
‫fotogramma, il che avrebbe senso perché stiamo vedendo il giocatore, ci spostiamo verso di loro

172
00:09:48,100 --> 00:09:52,000
‫e poi sparare è l'ultima azione siamo arrivati, che eseguiremo ripetutamente.

173
00:09:52,330 --> 00:09:56,050
‫Quindi quello che vogliamo fare è in realtà trasformarlo in una sequenza.

174
00:09:56,470 --> 00:10:01,420
‫Quindi trascinerò un nodo qui, creeremo un nodo sequenza e quello che faremo è girare,

175
00:10:01,420 --> 00:10:04,780
‫quindi aspettare, quindi sparare, quindi aspettare e ripetere all'infinito.

176
00:10:04,780 --> 00:10:07,630
‫Quindi spara prima, aspetta un po'.

177
00:10:07,630 --> 00:10:13,450
‫Quindi forse aspettiamo, non so, 1/2 tra gli scatti e poi vorremo ripetere questo, cosa che possiamo

178
00:10:13,450 --> 00:10:14,890
‫fare con un decoratore.

179
00:10:14,890 --> 00:10:20,440
‫Quindi, se faccio clic con il pulsante destro del mouse su Aggiungi decoratore e cerco il decoratore di loop, puoi vedere quante volte vuoi

180
00:10:20,440 --> 00:10:21,250
‫che si ripeta.

181
00:10:21,580 --> 00:10:22,510
‫Si dice tre volte.

182
00:10:22,510 --> 00:10:23,440
‫Non lo vogliamo tre volte.

183
00:10:23,440 --> 00:10:28,960
‫In pratica, vogliamo che si svolga all'infinito fino a quando non abbiamo bisogno di muoverci o dobbiamo perdere di vista il piano.

184
00:10:28,960 --> 00:10:30,100
‫Dobbiamo andare a indagare.

185
00:10:30,580 --> 00:10:32,920
‫Quindi andremo avanti e premiamo play e vediamo se funziona.

186
00:10:32,920 --> 00:10:33,550
‫Viene da me.

187
00:10:33,550 --> 00:10:35,740
‫Spara, spara, spara.

188
00:10:35,950 --> 00:10:37,450
‫Ma in realtà non mi sta picchiando.

189
00:10:37,450 --> 00:10:41,590
‫Puoi vedere che i suoi colpi stanno effettivamente atterrando su se stesso.

190
00:10:42,520 --> 00:10:46,540
‫E affronteremo questo bug in una lezione imminente.

191
00:10:46,690 --> 00:10:47,140
‫Guarda quello?

