﻿1
00:00:04,320 --> 00:00:05,280
‫Hallo en welkom.

2
00:00:05,280 --> 00:00:11,460
‫In deze lezing gaan we een vijand meer een bedreiging maken door een schietknooppunt in C++ te implementeren.

3
00:00:11,670 --> 00:00:13,530
‫Laten we erin duiken en kijken hoe we het moeten doen.

4
00:00:14,670 --> 00:00:19,730
‫Dus een stukje functionaliteit dat duidelijk ontbreekt in onze gedragsboom, is de mogelijkheid om te schieten.

5
00:00:20,070 --> 00:00:24,900
‫Wat ik idealiter zou willen doen, is naar de locatie van de speler gaan en dan schieten.

6
00:00:24,900 --> 00:00:28,500
‫Maar we willen eerst een beetje veranderen hoe we de beweging doen.

7
00:00:28,500 --> 00:00:33,090
‫Er zijn een paar dingen die ik wil aanpassen, dus als ik de verplaatsing naar Node selecteer, is een ding dat

8
00:00:33,090 --> 00:00:34,260
‫ik wil veranderen de straal.

9
00:00:34,260 --> 00:00:39,960
‫Ik wil niet dat de vijand recht op me af komt, dus als ik de acceptabele straal verander,

10
00:00:39,960 --> 00:00:42,870
‫stopt hij vijf meter van me af te bewegen.

11
00:00:42,870 --> 00:00:43,560
‫Dus het gaat stoppen.

12
00:00:43,740 --> 00:00:45,660
‫Geef me een mooie vijf meter afstand.

13
00:00:45,660 --> 00:00:48,150
‫Hij komt naar me toe, ze gaan en hij stopt en staart.

14
00:00:48,180 --> 00:00:53,610
‫Het andere dat ik wil doen, is hier beneden in het schoolbordgedeelte, je kunt zien dat er

15
00:00:53,610 --> 00:00:54,750
‫een schoolbordwaarde is.

16
00:00:54,750 --> 00:00:58,170
‫Als we dat niet hebben aangevinkt, laten we eens kijken wat er gebeurt als ik beweeg.

17
00:00:58,620 --> 00:01:03,630
‫Hij eigenlijk en dit was iets duidelijker toen we een kleinere acceptabele straal hadden.

18
00:01:03,630 --> 00:01:06,570
‫Dus laten we dat daar beneden houden tot vijf vier nu.

19
00:01:07,110 --> 00:01:09,810
‫En als ik op play druk, kun je dat zien terwijl ik beweeg.

20
00:01:09,810 --> 00:01:14,850
‫Hij gaat naar mijn laatste locatie en dan komt hij pas als hij die heeft bereikt een update.

21
00:01:14,940 --> 00:01:16,080
‫Dat is niet wat we willen.

22
00:01:16,410 --> 00:01:19,500
‫Wat we willen is dat het constant op ons afkomt.

23
00:01:19,500 --> 00:01:25,260
‫En als je de waargenomen schoolbordwaarde controleert, dan zegt het in wezen dat elke

24
00:01:25,260 --> 00:01:29,910
‫keer dat de speellocatie verandert, we updaten waar we naartoe gaan.

25
00:01:30,330 --> 00:01:36,870
‫Dus als ik doorga en op play en move druk, kun je zien dat hij me continu volgt en zijn pad

26
00:01:36,870 --> 00:01:37,470
‫bijwerkt.

27
00:01:37,830 --> 00:01:38,970
‫Dat is precies wat we willen.

28
00:01:39,300 --> 00:01:43,800
‫Dus nu kunnen we onze acceptatieradius veranderen in 500 en het wordt minder voor de hand liggend.

29
00:01:43,800 --> 00:01:47,190
‫Maar toch is het goed dat we daar onze schoolbordwaarde hebben.

30
00:01:47,220 --> 00:01:52,950
‫En dan is het gedrag dat we willen, dat als hij eenmaal binnen de straal van ons komt, hij gaat stoppen en

31
00:01:53,280 --> 00:01:54,210
‫op ons schieten.

32
00:01:54,300 --> 00:01:56,760
‫Daarvoor hebben we een nieuw soort taken nodig.

33
00:01:56,760 --> 00:01:58,740
‫Gaan we hier een nieuwe C++-taak maken?

34
00:01:59,070 --> 00:02:02,070
‫Het gaat een nieuwe, nieuwe C++-klasse toevoegen.

35
00:02:02,070 --> 00:02:06,690
‫Dan gaan we alle klassen laten zien en zoeken naar de bètataak.

36
00:02:07,110 --> 00:02:08,280
‫Welke willen we nu?

37
00:02:08,280 --> 00:02:11,730
‫Het bètataakknooppunt of de bètataakbordbasis?

38
00:02:12,150 --> 00:02:16,440
‫We hebben eigenlijk geen sleutel nodig, want we gaan gewoon proberen te schieten.

39
00:02:16,440 --> 00:02:17,490
‫Dat is alles wat we gaan doen.

40
00:02:17,490 --> 00:02:19,470
‫We halen de trekker over van ons pistool.

41
00:02:19,740 --> 00:02:23,310
‫Al het richten zal elders in onze gedragsboom worden gedaan.

42
00:02:23,760 --> 00:02:31,410
‫Dus laten we het bètataakknooppunt openen, de basisklasse hier, en we gaan dit Beaty Task noemen.

43
00:02:32,390 --> 00:02:33,140
‫Laag streepje.

44
00:02:33,410 --> 00:02:33,860
‫Schieten.

45
00:02:34,790 --> 00:02:36,560
‫Laten we doorgaan en die klas maken.

46
00:02:36,710 --> 00:02:39,230
‫Dan eindigen we met zoiets als dit.

47
00:02:39,590 --> 00:02:41,900
‫Dus we willen dezelfde opstelling doen.

48
00:02:41,900 --> 00:02:47,620
‫Dus een kleine uitdaging voor ons om dezelfde opstelling te doen als voor ons schoolbord.

49
00:02:47,660 --> 00:02:48,860
‫Duidelijke schoolbordwaarde.

50
00:02:48,860 --> 00:02:50,200
‫We willen een naam hebben.

51
00:02:50,210 --> 00:02:53,780
‫We willen taaknotities uitvoeren, een video pauzeren en dat proberen.

52
00:02:54,030 --> 00:02:54,260
‫Oké.

53
00:02:54,270 --> 00:02:54,870
‫Welkom terug.

54
00:02:54,890 --> 00:02:56,440
‫Dat was dus een mini-opdracht.

55
00:02:56,450 --> 00:03:01,970
‫Ik ga gewoon de handtekeningen kopiëren van mijn heldere schoolbordvallei om te fotograferen, inclusief

56
00:03:02,150 --> 00:03:04,310
‫de openbare en beschermde secties.

57
00:03:04,670 --> 00:03:07,430
‫Ik ga de naam van onze constructor veranderen.

58
00:03:07,730 --> 00:03:10,100
‫Ik ga door en implementeer een constructor.

59
00:03:10,130 --> 00:03:12,020
‫En wat was het dat we moesten doen?

60
00:03:12,020 --> 00:03:16,130
‫We moeten de node-naam gelijk stellen aan shoot.

61
00:03:16,430 --> 00:03:17,480
‫Zo gaan we het noemen.

62
00:03:17,660 --> 00:03:23,380
‫Dan terug naar de koptekst voor de schiettaak en we gaan nu proberen de taak uit te voeren.

63
00:03:23,390 --> 00:03:29,420
‫En we hoeven alleen maar een soort kopie op te roepen uit ons Clear Blackboard Values CP-bestand en dan

64
00:03:29,570 --> 00:03:32,580
‫zijn we klaar om te beginnen met implementeren.

65
00:03:32,600 --> 00:03:37,160
‫Dus het eerste wat we hier moeten doen, laten we wat meer ruimte hebben,

66
00:03:37,160 --> 00:03:39,800
‫is dat we onze pion moeten pakken.

67
00:03:39,800 --> 00:03:41,510
‫Waarom moeten we onze pion te pakken krijgen?

68
00:03:41,510 --> 00:03:44,990
‫Laten we eens kijken naar het schietpersonage, dat een pion is.

69
00:03:44,990 --> 00:03:46,490
‫Herinner je je het shooter-personage nog?

70
00:03:46,490 --> 00:03:48,820
‫Dot H heeft een schietmethode.

71
00:03:48,830 --> 00:03:54,740
‫Dat is wat we in wezen hetzelfde willen noemen als wij als de speler doen.

72
00:03:54,740 --> 00:03:58,460
‫Hij houdt de triggerknop ingedrukt en dat heet deze schietmethode.

73
00:03:58,460 --> 00:04:01,040
‫We willen dat de man hetzelfde kan doen.

74
00:04:01,040 --> 00:04:06,770
‫Als je de schiettaak hebt, houd je de triggerknop ingedrukt of druk je herhaaldelijk op die triggerknop, zodat

75
00:04:06,770 --> 00:04:10,040
‫de uitvoeringstaak de juiste plaats is om dit te doen.

76
00:04:10,040 --> 00:04:15,230
‫We gaan hier waarschijnlijk wat teruggeven, want onthoud, deze actie is slechts een schot.

77
00:04:15,230 --> 00:04:16,730
‫Het is niet continu fotograferen.

78
00:04:16,730 --> 00:04:17,510
‫Wat gaan we doen?

79
00:04:17,540 --> 00:04:21,140
‫We gaan het lege notitieresultaat succes retourneren.

80
00:04:21,140 --> 00:04:22,400
‫Als het ons allemaal gelukt is.

81
00:04:22,400 --> 00:04:28,370
‫Als het ons is gelukt want we hoeven niet continu te bellen vink dan aan.

82
00:04:28,400 --> 00:04:32,540
‫We hebben deze taak niet langer nodig dan een enkel frame.

83
00:04:32,570 --> 00:04:36,950
‫En het andere dat we moeten doen is, zoals ik al zei, die pionnenklasse te pakken krijgen.

84
00:04:36,950 --> 00:04:41,300
‫Wel, wat ik ga doen, is dat ik je ga laten zien hoe je de luchtcontroller te pakken kunt krijgen.

85
00:04:41,300 --> 00:04:47,360
‫En van de luchtcontroller weten we dat we pion ophalen kunnen roepen om de pion te krijgen die werd gecontroleerd.

86
00:04:47,600 --> 00:04:53,540
‫En we weten dat we die gecontroleerde pion naar onze shooter-personageimplementatie kunnen werpen.

87
00:04:53,540 --> 00:04:58,640
‫Dus hoe krijgen we de luchtcontroller hieruit?

88
00:04:58,850 --> 00:05:03,500
‫Wel, we hebben onze gedragsboomcomponent, waarvan we weten dat deze op een luchtcontroller zit.

89
00:05:03,500 --> 00:05:09,200
‫Dus misschien heeft dat iets dat we kunnen gebruiken als we naar de gedragsboomcomponent gaan en hier

90
00:05:09,500 --> 00:05:12,320
‫kijken naar methoden die nuttig kunnen zijn.

91
00:05:12,320 --> 00:05:18,050
‫Er zit veel in, maar als we naar controller zoeken, zien we niets anders dan misschien

92
00:05:18,050 --> 00:05:23,720
‫ergens in een van de basisklassen, omdat de bovenliggende klasse voor de boomcomponent gebruiksgedrag de je-hersencomponent

93
00:05:23,720 --> 00:05:24,290
‫is.

94
00:05:24,650 --> 00:05:27,320
‫We volgen die op om hier naar een controller te zoeken.

95
00:05:27,320 --> 00:05:29,150
‫Je kunt zien dat er een eigenschap voor is.

96
00:05:29,570 --> 00:05:31,040
‫Is er een doorzetter?

97
00:05:31,040 --> 00:05:38,660
‫Ja, er wordt luchteigenaar genoemd en dat zou moeten terugkeren als we eroverheen gaan en ik een aanwijzer bestuur.

98
00:05:38,960 --> 00:05:44,360
‫Dus je zou dat moeten kunnen gebruiken om de pion te pakken te krijgen, deze naar een shooter-personage te werpen

99
00:05:44,360 --> 00:05:46,250
‫en vervolgens de shoot-methode aan te roepen.

100
00:05:46,370 --> 00:05:47,570
‫Dus dat wordt jouw uitdaging.

101
00:05:47,570 --> 00:05:47,870
‫De oproep.

102
00:05:47,870 --> 00:05:54,920
‫De schietmethode, openbaar maken, pion pakken, pion roepen, schieten en dan testen in

103
00:05:54,920 --> 00:05:56,420
‫je gedragsboom.

104
00:05:56,420 --> 00:05:57,620
‫Pauzeer de video en laat hem gaan.

105
00:05:57,950 --> 00:05:58,250
‫Oké.

106
00:05:58,250 --> 00:05:58,820
‫Welkom terug.

107
00:05:58,820 --> 00:06:04,520
‫De eerste stap is dus dat we deze opnamemethode openbaar moeten maken, omdat deze van

108
00:06:04,520 --> 00:06:07,070
‫buiten deze klasse moet worden aangeroepen.

109
00:06:07,400 --> 00:06:11,480
‫Dus we zullen het gewoon schaden, we zullen schieten, er een beetje ruimte aan geven, een

110
00:06:11,480 --> 00:06:12,170
‫beetje ademruimte.

111
00:06:12,170 --> 00:06:14,270
‫Ik hou van witte ruimte helpt me te zien, help me denken.

112
00:06:14,660 --> 00:06:17,000
‫Dan gaan we naar de Beatty taakshoot.

113
00:06:17,300 --> 00:06:21,470
‫We gaan eerst controleren of de controller niet null is.

114
00:06:21,470 --> 00:06:24,320
‫Anders kunnen we de pijl-operator er niet op gebruiken.

115
00:06:24,320 --> 00:06:27,140
‫Gewoon een algemene goede gewoonte om deze nagelcontroles uit te voeren.

116
00:06:27,140 --> 00:06:32,270
‫Dus als deze eigenaar niet gelijk is, is deze gelijk aan nulaanwijzer.

117
00:06:32,600 --> 00:06:35,390
‫We willen vroeg terugkeren met een mislukking.

118
00:06:35,390 --> 00:06:38,510
‫Deze taak zal dus mislukken als we geen luchtcontroller hebben.

119
00:06:38,510 --> 00:06:39,890
‫Dat is vrij eenvoudig.

120
00:06:39,890 --> 00:06:43,280
‫Dus ik kan de resultaten van een leeg knooppunt retourneren.

121
00:06:43,280 --> 00:06:43,670
‫Dikke darm.

122
00:06:43,670 --> 00:06:45,560
‫Colon faalde zo.

123
00:06:45,560 --> 00:06:52,340
‫En dan gaan we de eigenaar doen, de eigenaar van de componenten, we gaan aan de slag.

124
00:06:52,340 --> 00:06:54,650
‫Het is zelfs zo dat we hier misschien een hoofdbestand moeten opnemen.

125
00:06:54,650 --> 00:07:03,650
‫Dus laten we een hash include doen en het wordt het spelframework en de controller en als ik denk, ja, elke controller zou het moeten doen, maar ik

126
00:07:03,650 --> 00:07:10,430
‫denk dat we de luchtcontroller nodig hebben, want dat is het soort punten dat we teruggaan en dan gaan we

127
00:07:10,430 --> 00:07:15,590
‫een pijl doen en we gaan een get -- hier klagen over iets in mijn hoofd,

128
00:07:15,590 --> 00:07:18,590
‫een bestand, misschien heb ik iets niet goed.

129
00:07:18,590 --> 00:07:21,410
‫Dus schuine streep naar voren. Het lijkt erop dat ik het verkeerd heb.

130
00:07:21,410 --> 00:07:22,970
‫Het zit niet echt in het gameframework.

131
00:07:22,970 --> 00:07:26,240
‫Je hebt gewoon een controller om dat op te nemen.

132
00:07:26,240 --> 00:07:28,580
‫Leer me dat ik daar zo blasé over ben.

133
00:07:28,580 --> 00:07:29,150
‫Dus daar gaan we.

134
00:07:29,150 --> 00:07:30,950
‫We kunnen nu de -- van de.

135
00:07:32,190 --> 00:07:34,710
‫En zoals ik al zei, we moeten ook een cast doen.

136
00:07:34,950 --> 00:07:41,550
‫Dus we gaan een cast doen naar welk type we moeten casten naar de A van het shooter-personage.

137
00:07:41,560 --> 00:07:45,720
‫Dus dat is in zijn volledige vorm, een shoot een personage, een shoot, een personage.

138
00:07:45,750 --> 00:07:48,840
‫En we moeten ook het resultaat hiervan controleren.

139
00:07:49,020 --> 00:07:51,300
‫Maar we moeten het karakter van asscheuten opnemen.

140
00:07:51,300 --> 00:07:58,050
‫Dus hash bevat bovenaan het personage van de schutter dacht dat hij dat leuk vond.

141
00:07:58,680 --> 00:08:04,170
‫En we gaan dat opslaan in een aanwijzertype dat schietkarakter nog steeds een personage zal zijn.

142
00:08:04,680 --> 00:08:06,300
‫Dus ik noem het, we zullen het daar opslaan.

143
00:08:06,960 --> 00:08:13,860
‫En eigenlijk moeten we ervoor zorgen dat de get-pion niet terugkeert, omdat de get-pion nul kan retourneren

144
00:08:14,100 --> 00:08:17,280
‫als het oog momenteel geen pion controleert.

145
00:08:18,250 --> 00:08:24,790
‫Of deze cast zou nul kunnen retourneren als het type geen acht-schieter-personage is van zijn controle over een ander

146
00:08:24,790 --> 00:08:25,600
‫type pion.

147
00:08:25,960 --> 00:08:30,610
‫Gelukkig komen deze twee goed samen, dus als je een null-pointer probeert te casten, is het resultaat slechts

148
00:08:30,610 --> 00:08:32,770
‫een null-pointer, en daarom kunnen we dit doen.

149
00:08:33,190 --> 00:08:34,630
‫Deze controles allemaal op één regel.

150
00:08:35,380 --> 00:08:37,450
‫Dan kunnen we een if-teken doen.

151
00:08:39,060 --> 00:08:41,010
‫Is gelijk aan null pointer.

152
00:08:42,420 --> 00:08:44,600
‫Dan willen we weer falen.

153
00:08:44,610 --> 00:08:45,690
‫Dus terug.

154
00:08:46,900 --> 00:08:48,790
‫IBT-knooppuntresultaten.

155
00:08:49,510 --> 00:08:49,840
‫Dikke darm.

156
00:08:49,840 --> 00:08:51,720
‫Colon faalde zo.

157
00:08:51,910 --> 00:08:56,110
‫En tot slot, na al die controles, weten we dat we een schietpersonage hebben.

158
00:08:56,110 --> 00:08:57,220
‫We zouden moeten kunnen bellen, schieten.

159
00:08:57,220 --> 00:09:01,450
‫Dus karakterpijl en schiet zo.

160
00:09:01,900 --> 00:09:04,750
‫Zodat we eindelijk kunnen schieten.

161
00:09:04,760 --> 00:09:07,270
‫Laten we naar onze gedragsboom gaan.

162
00:09:07,930 --> 00:09:15,010
‫En hier willen we naar beneden trekken om een nieuwe knoop te plaatsen en zoeken naar de nieuwe schiettaak die we

163
00:09:15,010 --> 00:09:16,000
‫hier hebben.

164
00:09:16,480 --> 00:09:20,620
‫En ik weet niet zeker of ik gecompileerd heb, dus ik ga er gewoon voor zorgen dat alles opnieuw compileert.

165
00:09:20,620 --> 00:09:26,530
‫En als dat eenmaal gedaan is, kunnen we naar de play-knop gaan en kijken of deze man komt en schiet, oké?

166
00:09:26,530 --> 00:09:27,370
‫Ja, dat doet hij.

167
00:09:27,370 --> 00:09:32,680
‫Helaas schiet hij herhaaldelijk en schiet hij zichzelf in de voet.

168
00:09:32,950 --> 00:09:35,890
‫Er gaat dus iets niet helemaal goed daar.

169
00:09:35,890 --> 00:09:37,840
‫Er gaan dus twee dingen mis.

170
00:09:37,840 --> 00:09:43,270
‫Om te beginnen slaagde hij erin zelfmoord te plegen met twee schoten, en het lijkt ook alsof hij elk frame

171
00:09:43,270 --> 00:09:48,100
‫schiet, wat logisch zou zijn omdat we de speler te zien krijgen, we gaan naar hem toe en

172
00:09:48,100 --> 00:09:52,000
‫dan is schieten de laatste actie we zijn hier, die we herhaaldelijk zullen uitvoeren.

173
00:09:52,330 --> 00:09:56,050
‫Dus wat we willen doen, is dit in een reeks veranderen.

174
00:09:56,470 --> 00:10:01,420
‫Dus ik ga hier een knoop wegslepen, we maken een reeksknoop, en wat we gaan doen is gaan schieten,

175
00:10:01,420 --> 00:10:04,780
‫dan wachten, dan schieten, dan wachten en dat voor onbepaalde tijd herhalen.

176
00:10:04,780 --> 00:10:07,630
‫Dus eerst schieten, even wachten.

177
00:10:07,630 --> 00:10:13,450
‫Dus misschien wachten we, ik weet het niet, op 1/2 tussen opnamen en dan willen we dit herhalen, wat we kunnen

178
00:10:13,450 --> 00:10:14,890
‫doen met een binnenhuisarchitect.

179
00:10:14,890 --> 00:10:20,440
‫Dus als ik met de rechtermuisknop klik op decorator toevoegen en zoek naar de lus-decorateur, dan kun je zien hoe vaak je wilt dat het

180
00:10:20,440 --> 00:10:21,250
‫een lus wordt.

181
00:10:21,580 --> 00:10:22,510
‫Er staat drie keer.

182
00:10:22,510 --> 00:10:23,440
‫We willen het niet drie keer.

183
00:10:23,440 --> 00:10:28,960
‫We willen dat het in principe oneindig doorloopt totdat we moeten verhuizen of we het plan uit het oog moeten verliezen.

184
00:10:28,960 --> 00:10:30,100
‫We moeten op onderzoek uitgaan.

185
00:10:30,580 --> 00:10:32,920
‫Dus we gaan door en druk op play en kijken of dat werkt.

186
00:10:32,920 --> 00:10:33,550
‫Komt op mij af.

187
00:10:33,550 --> 00:10:35,740
‫Schiet, schiet, schiet.

188
00:10:35,950 --> 00:10:37,450
‫Maar hij slaat me niet echt.

189
00:10:37,450 --> 00:10:41,590
‫Je kunt zien dat zijn schoten eigenlijk op hemzelf landen.

190
00:10:42,520 --> 00:10:46,540
‫En we gaan die bug behandelen in een komende lezing.

191
00:10:46,690 --> 00:10:47,140
‫Zie dat?

