﻿1
00:00:04,320 --> 00:00:05,280
‫Cześć i witaj.

2
00:00:05,280 --> 00:00:11,460
‫W tym wykładzie zamierzamy uczynić wroga większym zagrożeniem, implementując węzeł strzelania w C++.

3
00:00:11,670 --> 00:00:13,530
‫Zanurzmy się i zobaczmy, jak to zrobić.

4
00:00:14,670 --> 00:00:19,730
‫Tak więc jedną z funkcji, której wyraźnie brakuje w naszym drzewie zachowań, jest możliwość strzelania.

5
00:00:20,070 --> 00:00:24,900
‫To, co idealnie chciałbym zrobić, to przenieść się do miejsca gracza, a następnie strzelić.

6
00:00:24,900 --> 00:00:28,500
‫Ale najpierw chcemy trochę zmienić sposób, w jaki wykonujemy ruch.

7
00:00:28,500 --> 00:00:33,090
‫Jest kilka rzeczy, które chcę poprawić, więc jeśli wybiorę przeniesienie do węzła, jedną rzeczą, którą chcę

8
00:00:33,090 --> 00:00:34,260
‫zmienić, jest promień.

9
00:00:34,260 --> 00:00:39,960
‫Nie chcę, żeby wróg podchodził prosto do mnie, więc jeśli zmienię akceptowalny promień, to

10
00:00:39,960 --> 00:00:42,870
‫przestanie się poruszać pięć metrów ode mnie.

11
00:00:42,870 --> 00:00:43,560
‫Więc to się skończy.

12
00:00:43,740 --> 00:00:45,660
‫Daj mi ładny pięciometrowy dystans.

13
00:00:45,660 --> 00:00:48,150
‫Podchodzi do mnie, idą, a on zatrzymuje się i patrzy.

14
00:00:48,180 --> 00:00:53,610
‫Teraz inna rzecz, którą chcę zrobić, to tutaj, w sekcji tablicy, widać, że jest tam

15
00:00:53,610 --> 00:00:54,750
‫wartość obserwacji tablicy.

16
00:00:54,750 --> 00:00:58,170
‫Jeśli nie mamy tego zaznaczonego, zobaczmy, co się stanie, gdy się przeprowadzę.

17
00:00:58,620 --> 00:01:03,630
‫Zasadniczo i było to nieco bardziej oczywiste, gdy mieliśmy mniejszy akceptowalny promień.

18
00:01:03,630 --> 00:01:06,570
‫Więc ograniczmy to teraz do pięciu czterech.

19
00:01:07,110 --> 00:01:09,810
‫A jeśli wcisnę Play, możesz to zobaczyć, gdy się poruszam.

20
00:01:09,810 --> 00:01:14,850
‫Udaje się do mojej ostatniej lokalizacji i dopiero wtedy, gdy tam dotrze, przychodzi aktualizacja.

21
00:01:14,940 --> 00:01:16,080
‫Nie tego chcemy.

22
00:01:16,410 --> 00:01:19,500
‫To, czego pragniemy, to to, żeby nieustannie zbliżać się do nas.

23
00:01:19,500 --> 00:01:25,260
‫A jeśli sprawdzisz obserwowaną wartość tablicy, to zasadniczo oznacza to, że za każdym razem,

24
00:01:25,260 --> 00:01:29,910
‫gdy zmienia się lokalizacja gry, będziemy aktualizować, dokąd się przemieszczamy.

25
00:01:30,330 --> 00:01:36,870
‫Więc jeśli pójdę dalej i wcisnę odtwarzanie i ruch, zobaczysz, że ciągle za mną podąża i aktualizuje swoją

26
00:01:36,870 --> 00:01:37,470
‫ścieżkę.

27
00:01:37,830 --> 00:01:38,970
‫Właśnie tego chcemy.

28
00:01:39,300 --> 00:01:43,800
‫Więc teraz możemy zmienić nasz promień akceptacji na 500 i stanie się to mniej oczywiste.

29
00:01:43,800 --> 00:01:47,190
‫Ale nadal dobrze, że mamy tam naszą obserwowaną wartość tablicy.

30
00:01:47,220 --> 00:01:52,950
‫A potem zachowanie, którego chcemy, to to, że kiedy znajdzie się w promieniu od nas, zatrzyma się i do

31
00:01:53,280 --> 00:01:54,210
‫nas strzeli.

32
00:01:54,300 --> 00:01:56,760
‫Do tego potrzebujemy nowego typu zadań.

33
00:01:56,760 --> 00:01:58,740
‫Czy stworzymy tutaj nowe zadanie C++?

34
00:01:59,070 --> 00:02:02,070
‫Będzie miał zamiar dodać nową, nową klasę C++.

35
00:02:02,070 --> 00:02:06,690
‫Następnie pokażemy wszystkie klasy i poszukamy zadania beta.

36
00:02:07,110 --> 00:02:08,280
‫Teraz, którego chcemy?

37
00:02:08,280 --> 00:02:11,730
‫Węzeł zadania beta czy podstawa tablicy zadań beta?

38
00:02:12,150 --> 00:02:16,440
‫Cóż, właściwie nie musimy używać klucza, bo po prostu spróbujemy strzelać.

39
00:02:16,440 --> 00:02:17,490
‫To wszystko, co zamierzamy zrobić.

40
00:02:17,490 --> 00:02:19,470
‫Pociągniemy za spust naszego pistoletu.

41
00:02:19,740 --> 00:02:23,310
‫Całe celowanie będzie się odbywać w innym miejscu naszego drzewa zachowań.

42
00:02:23,760 --> 00:02:31,410
‫Otwórzmy więc węzeł zadania beta, podstawową klasę tutaj, i nazwiemy to zadanie Beaty.

43
00:02:32,390 --> 00:02:33,140
‫Podkreślać.

44
00:02:33,410 --> 00:02:33,860
‫Strzelać.

45
00:02:34,790 --> 00:02:36,560
‫Chodźmy dalej i stwórzmy tę klasę.

46
00:02:36,710 --> 00:02:39,230
‫Wtedy otrzymujemy coś takiego.

47
00:02:39,590 --> 00:02:41,900
‫Więc chcemy zrobić to samo.

48
00:02:41,900 --> 00:02:47,620
‫Więc trochę mini wyzwanie dla nas, aby zrobić ten sam rodzaj konfiguracji, jak w przypadku naszej tablicy.

49
00:02:47,660 --> 00:02:48,860
‫Wyczyść wartość tablicy.

50
00:02:48,860 --> 00:02:50,200
‫Chcemy mieć imię.

51
00:02:50,210 --> 00:02:53,780
‫Chcemy mieć notatki dotyczące wykonywania zadań, wstrzymać wideo i spróbować.

52
00:02:54,030 --> 00:02:54,260
‫Dobra.

53
00:02:54,270 --> 00:02:54,870
‫Witamy spowrotem.

54
00:02:54,890 --> 00:02:56,440
‫Więc to było mini zadanie.

55
00:02:56,450 --> 00:03:01,970
‫Zamierzam tylko skopiować podpisy z mojej czystej doliny tablicy, aby zrobić zdjęcie, w

56
00:03:02,150 --> 00:03:04,310
‫tym sekcje publiczne i chronione.

57
00:03:04,670 --> 00:03:07,430
‫Zmienię nazwę naszego konstruktora.

58
00:03:07,730 --> 00:03:10,100
‫Zamierzam śmiało zaimplementować konstruktora.

59
00:03:10,130 --> 00:03:12,020
‫I co to było, co musieliśmy zrobić?

60
00:03:12,020 --> 00:03:16,130
‫Musimy ustawić nazwę węzła równą strzelaniu.

61
00:03:16,430 --> 00:03:17,480
‫Tak to nazwiemy.

62
00:03:17,660 --> 00:03:23,380
‫Następnie wróć do nagłówka zadania strzelania i spróbujemy teraz wdrożyć zadanie wykonania.

63
00:03:23,390 --> 00:03:29,420
‫I musimy tylko wywołać super jakąś kopię tego z naszego pliku Clear Blackboard Values CP,

64
00:03:29,570 --> 00:03:32,580
‫a potem jesteśmy gotowi do rozpoczęcia implementacji.

65
00:03:32,600 --> 00:03:37,160
‫Więc pierwszą rzeczą, którą musimy tutaj zrobić, mamy trochę więcej miejsca,

66
00:03:37,160 --> 00:03:39,800
‫będziemy musieli złapać naszego pionka.

67
00:03:39,800 --> 00:03:41,510
‫Dlaczego musimy złapać naszego pionka?

68
00:03:41,510 --> 00:03:44,990
‫Cóż, spójrzmy na postać strzelca, która jest pionkiem.

69
00:03:44,990 --> 00:03:46,490
‫Pamiętasz postać strzelca?

70
00:03:46,490 --> 00:03:48,820
‫Dot H ma metodę strzelania.

71
00:03:48,830 --> 00:03:54,740
‫To jest to, co chcemy nazywać zasadniczo tak samo jak my jako gracz.

72
00:03:54,740 --> 00:03:58,460
‫Trzyma wciśnięty przycisk spustu i nazywa się to tą metodą strzelania.

73
00:03:58,460 --> 00:04:01,040
‫Chcemy, żeby facet mógł zrobić to samo.

74
00:04:01,040 --> 00:04:06,770
‫Kiedy masz zadanie strzelania, przytrzymasz przycisk spustu lub kilkakrotnie go naciśniesz, aby zadanie

75
00:04:06,770 --> 00:04:10,040
‫wykonania było właściwym miejscem do tego.

76
00:04:10,040 --> 00:04:15,230
‫Prawdopodobnie zwrócimy to, co tutaj, bo pamiętaj, ta akcja to tylko jeden strzał.

77
00:04:15,230 --> 00:04:16,730
‫To nie jest ciągłe fotografowanie.

78
00:04:16,730 --> 00:04:17,510
‫Co zrobimy?

79
00:04:17,540 --> 00:04:21,140
‫Zwrócimy sukces wyniku pustej nuty.

80
00:04:21,140 --> 00:04:22,400
‫Gdyby nam się udało.

81
00:04:22,400 --> 00:04:28,370
‫Jeśli nam się udało, bo nie musimy ciągle wywoływać tika.

82
00:04:28,400 --> 00:04:32,540
‫Nie potrzebujemy, aby to zadanie działało dłużej niż pojedyncza klatka.

83
00:04:32,570 --> 00:04:36,950
‫A drugą rzeczą, którą musimy zrobić, to, jak powiedziałem, zdobyć tę klasę pionków.

84
00:04:36,950 --> 00:04:41,300
‫Cóż, zamierzam pokazać ci, jak zdobyć kontroler powietrza.

85
00:04:41,300 --> 00:04:47,360
‫A z kontrolera powietrza wiemy, że możemy wywołać pobranie pionka, aby uzyskać kontrolowanego pionka.

86
00:04:47,600 --> 00:04:53,540
‫I wiemy, że możemy rzucić ten kontrolowany pionek do naszej implementacji postaci strzelanki.

87
00:04:53,540 --> 00:04:58,640
‫Więc jak możemy z tego uzyskać kontroler powietrza?

88
00:04:58,850 --> 00:05:03,500
‫Cóż, mamy komponent drzewa zachowania, o którym wiemy, że znajduje się na kontrolerze powietrza.

89
00:05:03,500 --> 00:05:09,200
‫Więc może ma coś, czego możemy użyć, jeśli przejdziemy do komponentu drzewa zachowań i zajrzymy tutaj,

90
00:05:09,500 --> 00:05:12,320
‫aby znaleźć metody, które mogą być pomocne.

91
00:05:12,320 --> 00:05:18,050
‫Jest tu dużo, ale jeśli szukamy kontrolera, nie widzimy niczego poza jedną z

92
00:05:18,050 --> 00:05:23,720
‫jego klas bazowych, ponieważ klasą nadrzędną dla komponentu drzewa zachowań użytkowych jest komponent

93
00:05:23,720 --> 00:05:24,290
‫„mózg”.

94
00:05:24,650 --> 00:05:27,320
‫Podążamy za tym, aby znaleźć tutaj kontroler.

95
00:05:27,320 --> 00:05:29,150
‫Widać, że jest na to nieruchomość.

96
00:05:29,570 --> 00:05:31,040
‫Czy istnieje pobieracz?

97
00:05:31,040 --> 00:05:38,660
‫Tak, nazywa się get air owner, która powinna powrócić, jeśli najedziemy na nią i kontroluję wskaźnik.

98
00:05:38,960 --> 00:05:44,360
‫Powinieneś więc być w stanie użyć tego, aby złapać pionka, rzucić go na postać strzelca,

99
00:05:44,360 --> 00:05:46,250
‫a następnie wywołać metodę strzelania.

100
00:05:46,370 --> 00:05:47,570
‫Więc to będzie twoje wyzwanie.

101
00:05:47,570 --> 00:05:47,870
‫Telefon.

102
00:05:47,870 --> 00:05:54,920
‫Metoda strzelania, upublicznij, zdobądź pionka, rzuć wezwanie pionka, strzelaj, a następnie przetestuj to w swoim

103
00:05:54,920 --> 00:05:56,420
‫drzewie zachowań.

104
00:05:56,420 --> 00:05:57,620
‫Wstrzymaj wideo i gotowe.

105
00:05:57,950 --> 00:05:58,250
‫Dobra.

106
00:05:58,250 --> 00:05:58,820
‫Witamy spowrotem.

107
00:05:58,820 --> 00:06:04,520
‫Po pierwsze, najpierw musimy upublicznić tę metodę strzelania, ponieważ musi być

108
00:06:04,520 --> 00:06:07,070
‫wywoływana spoza tej klasy.

109
00:06:07,400 --> 00:06:11,480
‫Więc postawimy go po prostu zadać obrażenia, będziemy strzelać, dać mu trochę miejsca,

110
00:06:11,480 --> 00:06:12,170
‫trochę wytchnienia.

111
00:06:12,170 --> 00:06:14,270
‫Lubię, gdy biała przestrzeń pomaga mi widzieć, pomaga myśleć.

112
00:06:14,660 --> 00:06:17,000
‫Następnie przejdziemy do sesji zdjęciowej Beatty'ego.

113
00:06:17,300 --> 00:06:21,470
‫Przede wszystkim sprawdzimy, czy I kontroler nie jest pusty.

114
00:06:21,470 --> 00:06:24,320
‫W przeciwnym razie nie możemy użyć na nim operatora strzałki.

115
00:06:24,320 --> 00:06:27,140
‫Tylko ogólna dobra praktyka, aby wykonać te kontrole gwoździ.

116
00:06:27,140 --> 00:06:32,270
‫Więc jeśli ten właściciel nie jest równy, jest równy wskaźnikowi null.

117
00:06:32,600 --> 00:06:35,390
‫Będziemy chcieli wrócić wcześniej z porażką.

118
00:06:35,390 --> 00:06:38,510
‫Więc to zadanie się nie powiedzie, jeśli nie będziemy mieli kontrolera powietrza.

119
00:06:38,510 --> 00:06:39,890
‫To całkiem proste.

120
00:06:39,890 --> 00:06:43,280
‫Więc mogę zwrócić wyniki pustego węzła.

121
00:06:43,280 --> 00:06:43,670
‫Okrężnica.

122
00:06:43,670 --> 00:06:45,560
‫Colon zawiódł w ten sposób.

123
00:06:45,560 --> 00:06:52,340
‫A potem zajmiemy się właścicielem, właścicielem komponentu, zajmiemy się -- dalej.

124
00:06:52,340 --> 00:06:54,650
‫W rzeczywistości być może będziemy musieli dołączyć tutaj nagłówek akt.

125
00:06:54,650 --> 00:07:03,650
‫Więc zróbmy hash, który będzie zawierał framework gry i kontroler, a jeśli myślę, tak, każdy kontroler powinien wystarczyć, ale myślę,

126
00:07:03,650 --> 00:07:10,430
‫że potrzebujemy kontrolera powietrza, ponieważ jest to rodzaj punktów, do których wracamy i potem zrobimy

127
00:07:10,430 --> 00:07:15,590
‫strzałę i zrobimy get -- tutaj narzekam na coś w mojej głowie,

128
00:07:15,590 --> 00:07:18,590
‫plik, może nie mam czegoś dobrego.

129
00:07:18,590 --> 00:07:21,410
‫Więc ukośnik wygląda na to, że się pomyliłem.

130
00:07:21,410 --> 00:07:22,970
‫To nie jest właściwie framework gry.

131
00:07:22,970 --> 00:07:26,240
‫Po prostu masz kontroler, który to zawiera.

132
00:07:26,240 --> 00:07:28,580
‫Naucz mnie tego, że jestem tak zblazowany.

133
00:07:28,580 --> 00:07:29,150
‫Więc jedziemy.

134
00:07:29,150 --> 00:07:30,950
‫Teraz możemy uzyskać -- z.

135
00:07:32,190 --> 00:07:34,710
‫I jak powiedziałem, musimy też zrobić obsadę.

136
00:07:34,950 --> 00:07:41,550
‫Więc zrobimy rzut na typ, który będziemy musieli rzucić na A postaci strzelca.

137
00:07:41,560 --> 00:07:45,720
‫Więc to jest w pełnej formie, strzelanie do postaci, strzelanie do postaci.

138
00:07:45,750 --> 00:07:48,840
‫I będziemy musieli również sprawdzić wynik tego.

139
00:07:49,020 --> 00:07:51,300
‫Ale musimy uwzględnić charakter pędów popiołu.

140
00:07:51,300 --> 00:07:58,050
‫Więc hasz zawiera u góry postać strzelca, która tak myślała.

141
00:07:58,680 --> 00:08:04,170
‫I zamierzamy przechowywać to w strzałach typu wskaźnikowego, postać nadal będzie postacią.

142
00:08:04,680 --> 00:08:06,300
‫Więc nazwijmy to, przechowamy to tam.

143
00:08:06,960 --> 00:08:13,860
‫I zasadniczo, musimy upewnić się, że ani pionek get nie zostanie zwrócony, ponieważ pionek get może zwrócić wartość

144
00:08:14,100 --> 00:08:17,280
‫null, jeśli oko aktualnie nie kontroluje pionka.

145
00:08:18,250 --> 00:08:24,790
‫Lub to rzucenie może zwrócić wartość null, jeśli typem nie jest postać z ośmioma strzelcami, która kontroluje inny

146
00:08:24,790 --> 00:08:25,600
‫typ pionka.

147
00:08:25,960 --> 00:08:30,610
‫Na szczęście te dwa układy się do siebie całkiem dobrze, więc jeśli spróbujesz rzucić wskaźnik zerowy, wynikiem będzie

148
00:08:30,610 --> 00:08:32,770
‫tylko wskaźnik zerowy, dlatego możemy to zrobić.

149
00:08:33,190 --> 00:08:34,630
‫Wszystkie te kontrole w jednej linii.

150
00:08:35,380 --> 00:08:37,450
‫Następnie możemy zrobić znak if.

151
00:08:39,060 --> 00:08:41,010
‫Jest równy wskaźnikowi zerowemu.

152
00:08:42,420 --> 00:08:44,600
‫Wtedy znowu chcemy ponieść porażkę.

153
00:08:44,610 --> 00:08:45,690
‫Więc wróć.

154
00:08:46,900 --> 00:08:48,790
‫Wyniki węzła IBT.

155
00:08:49,510 --> 00:08:49,840
‫Okrężnica.

156
00:08:49,840 --> 00:08:51,720
‫Colon zawiódł w ten sposób.

157
00:08:51,910 --> 00:08:56,110
‫I wreszcie, po tych wszystkich sprawdzeniach, wiemy, że mamy postać strzelca.

158
00:08:56,110 --> 00:08:57,220
‫Powinniśmy być w stanie zadzwonić, strzelić.

159
00:08:57,220 --> 00:09:01,450
‫Więc strzałka postaci i strzelanie w ten sposób.

160
00:09:01,900 --> 00:09:04,750
‫Dzięki temu w końcu będziemy mogli strzelać.

161
00:09:04,760 --> 00:09:07,270
‫Przejdźmy do naszego drzewa zachowań.

162
00:09:07,930 --> 00:09:15,010
‫A tutaj będziemy chcieli ściągnąć w dół, aby umieścić nowy węzeł i poszukać nowego zadania strzelania, które

163
00:09:15,010 --> 00:09:16,000
‫mamy tutaj.

164
00:09:16,480 --> 00:09:20,620
‫I nie jestem pewien, czy skompilowałem, więc upewnię się, że wszystko się ponownie skompiluje.

165
00:09:20,620 --> 00:09:26,530
‫A kiedy już to zrobimy, możemy podejść i nacisnąć przycisk „Odtwarzaj” i zobaczyć, czy ten facet podejdzie i strzeli, dobrze?

166
00:09:26,530 --> 00:09:27,370
‫Tak, ma.

167
00:09:27,370 --> 00:09:32,680
‫Niestety wielokrotnie strzela i strzela sobie w stopę.

168
00:09:32,950 --> 00:09:35,890
‫Więc coś tam nie do końca pisze.

169
00:09:35,890 --> 00:09:37,840
‫Więc dwie rzeczy się nie zgadzają.

170
00:09:37,840 --> 00:09:43,270
‫Na początek udało mu się zabić dwoma strzałami, wydaje się też, że kręci każdą

171
00:09:43,270 --> 00:09:48,100
‫klatkę, co miałoby sens, ponieważ widzimy gracza, podchodzimy do niego i strzelanie

172
00:09:48,100 --> 00:09:52,000
‫jest ostatnią akcją tu mamy, co będziemy powtarzać wielokrotnie.

173
00:09:52,330 --> 00:09:56,050
‫Więc to, co chcemy zrobić, to właściwie przekształcić to w sekwencję.

174
00:09:56,470 --> 00:10:01,420
‫Więc zamierzam przeciągnąć węzeł tutaj, stworzymy węzeł sekwencji i to, co zrobimy, to strzelić, potem

175
00:10:01,420 --> 00:10:04,780
‫czekać, strzelić, potem czekać i powtarzać to w nieskończoność.

176
00:10:04,780 --> 00:10:07,630
‫Więc najpierw strzelaj, poczekaj trochę.

177
00:10:07,630 --> 00:10:13,450
‫Więc może poczekamy, nie wiem, na 1/2 między ujęciami, a potem będziemy chcieli to powtórzyć, co możemy

178
00:10:13,450 --> 00:10:14,890
‫zrobić z dekoratorem.

179
00:10:14,890 --> 00:10:20,440
‫Więc jeśli kliknę prawym przyciskiem myszy dodaj dekorator i poszukam dekoratora pętli, zobaczysz, ile razy chcesz

180
00:10:20,440 --> 00:10:21,250
‫go zapętlić.

181
00:10:21,580 --> 00:10:22,510
‫Mówi trzy razy.

182
00:10:22,510 --> 00:10:23,440
‫Nie chcemy tego trzy razy.

183
00:10:23,440 --> 00:10:28,960
‫Chcemy, aby w zasadzie zapętlił się w nieskończoność, dopóki nie będziemy musieli się ruszyć lub stracimy z oczu plan.

184
00:10:28,960 --> 00:10:30,100
‫Musimy iść i zbadać.

185
00:10:30,580 --> 00:10:32,920
‫Więc pójdziemy dalej, wciśniemy play i zobaczymy, czy to zadziała.

186
00:10:32,920 --> 00:10:33,550
‫Podchodzi do mnie.

187
00:10:33,550 --> 00:10:35,740
‫Pędy, pędy, pędy.

188
00:10:35,950 --> 00:10:37,450
‫Ale on właściwie mnie nie bije.

189
00:10:37,450 --> 00:10:41,590
‫Widać, że jego strzały faktycznie trafiają na niego.

190
00:10:42,520 --> 00:10:46,540
‫I zajmiemy się tym błędem w nadchodzącym wykładzie.

191
00:10:46,690 --> 00:10:47,140
‫Zobaczyć, że?

