﻿1
00:00:04,330 --> 00:00:05,170
‫Hallo en welkom.

2
00:00:05,170 --> 00:00:12,100
‫In deze lezing gaan we kijken naar het hebben van een keuze in onze gedragsbomen, zodat ik een vijand naar

3
00:00:12,100 --> 00:00:20,200
‫me toe kan laten rennen en als hij me uit het oog verliest, komt hij naar mijn laatst bekende locatie en doet in feite

4
00:00:20,590 --> 00:00:24,190
‫twee gedragingen, een achtervolging en dan Ik onderzoek gedrag.

5
00:00:24,190 --> 00:00:26,050
‫Laten we erin duiken en kijken hoe dat haalbaar is.

6
00:00:26,050 --> 00:00:27,130
‫Gedragsbomen gebruiken.

7
00:00:28,530 --> 00:00:34,530
‫Dus hoewel dit patrouillegedrag erg leerzaam is, is het niet echt het soort gedrag dat we

8
00:00:34,530 --> 00:00:35,280
‫willen implementeren.

9
00:00:35,790 --> 00:00:39,150
‫Wat we liever hebben, is iets in de trant van.

10
00:00:39,330 --> 00:00:44,580
‫Als we de speler kunnen zien, gaan we zo dicht mogelijk naar hem toe.

11
00:00:45,330 --> 00:00:51,840
‫En wanneer de speler uit het zicht verdwijnt, proberen we naar de laatst bekende locatie van de speler te gaan om ze

12
00:00:51,840 --> 00:00:52,500
‫te vinden.

13
00:00:52,800 --> 00:00:58,410
‫En als we die optie eenmaal hebben uitgeput, gaan we misschien terug naar een andere locatie, of

14
00:00:58,410 --> 00:01:00,150
‫misschien blijven we daar voorlopig.

15
00:01:00,930 --> 00:01:02,400
‫Dus hoe kunnen we dit bereiken?

16
00:01:02,430 --> 00:01:05,880
‫Op dit moment kunnen we dit niet bereiken met een reeks acties.

17
00:01:05,880 --> 00:01:09,200
‫We moeten een keuze maken op basis van de gegevens die we beschikbaar hebben.

18
00:01:09,210 --> 00:01:15,210
‫We moeten kiezen tussen of we de speler kunnen zien of niet, of we een laatst

19
00:01:15,210 --> 00:01:18,450
‫bekende spelerlocatie hebben of niet, dat soort dingen.

20
00:01:18,870 --> 00:01:24,000
‫Om dit te doen, hebben we een nieuw type knooppunt in de gedragsboom nodig, een selectornotitie genaamd.

21
00:01:24,060 --> 00:01:29,070
‫Dus als we met de rechtermuisknop klikken en naar onze composieten kijken, is een van de opties daar de selector.

22
00:01:29,550 --> 00:01:33,090
‫Nu loopt de selector in tegenstelling tot de reeks als volgt.

23
00:01:33,480 --> 00:01:40,410
‫Als je een heleboel taken onder de selector hebt, wordt deze uitgevoerd totdat de eerste slaagt.

24
00:01:40,830 --> 00:01:45,150
‫En eigenlijk verwacht het dat ze allemaal zullen falen totdat een van hen slaagt.

25
00:01:45,780 --> 00:01:48,140
‫Nu deed de reeks het tegenovergestelde.

26
00:01:48,150 --> 00:01:50,220
‫Het loopt ze allemaal totdat een van hen faalt.

27
00:01:50,730 --> 00:01:52,750
‫Dus waarom is dat handig?

28
00:01:52,800 --> 00:01:56,610
‫Waarom is het handig dat de selector er een uitvoert totdat een van hen slaagt?

29
00:01:56,610 --> 00:02:00,900
‫Omdat we eigenlijk willen dat het de eerste optie kiest die haalbaar is.

30
00:02:01,920 --> 00:02:06,780
‫De manier waarop we dit gaan doen, is niet door taken onder de selector uit te voeren, maar door

31
00:02:06,780 --> 00:02:08,910
‫reeksen onder de selector uit te voeren.

32
00:02:08,910 --> 00:02:12,120
‫Dus op het hoofdniveau gaan we een selectienotitie maken.

33
00:02:12,690 --> 00:02:16,920
‫En daaronder, laten we deze reeks opzij schuiven en andere reeksen maken.

34
00:02:17,250 --> 00:02:19,930
‫We gaan hier één reeks hebben.

35
00:02:20,670 --> 00:02:26,640
‫En wat we kunnen doen, is dat we de reeks daadwerkelijk kunnen hernoemen van reeks naar zoiets als Chase.

36
00:02:27,330 --> 00:02:35,010
‫En dan kunnen we hier nog een reeks toevoegen, die in de lijn van onderzoek zal zijn.

37
00:02:36,050 --> 00:02:41,330
‫En dit zijn in feite onze twee gedragingen waaruit we willen kunnen kiezen.

38
00:02:42,260 --> 00:02:48,980
‫En om ze te laten mislukken, kunnen we dingen toevoegen aan knooppunten die decorateurs worden genoemd.

39
00:02:49,370 --> 00:02:54,890
‫Dus als je met de rechtermuisknop op een knooppunt klikt en decorateur toevoegt, kun je hier zien dat er een heleboel opties zijn.

40
00:02:55,460 --> 00:02:59,330
‫En ze veranderen in feite de manier waarop dit knooppunt werkt.

41
00:02:59,450 --> 00:03:00,890
‫Dan kunnen ze dat op verschillende manieren doen.

42
00:03:00,920 --> 00:03:05,810
‫We hebben bijvoorbeeld deze voorwaardelijke lus waarmee je alle acties in de reeks opnieuw kunt doorlopen,

43
00:03:05,810 --> 00:03:08,720
‫zo vaak als deze voorwaardelijke lus correct is.

44
00:03:09,200 --> 00:03:15,800
‫We hebben hier andere dingen, zoals een codecontrole, die gaat over zichtbaarheid en andere mooie dingen.

45
00:03:15,800 --> 00:03:17,660
‫We hebben gewoon een pure lus.

46
00:03:18,090 --> 00:03:19,350
‫We hebben een tijdslimiet.

47
00:03:19,370 --> 00:03:23,240
‫Dus dit kan alleen, we kunnen maar een bepaalde tijd in deze reeks blijven.

48
00:03:23,540 --> 00:03:27,020
‫In principe veel dingen die het gedrag van deze reeks wijzigen.

49
00:03:27,290 --> 00:03:33,290
‫Maar degene waar we in geïnteresseerd zijn, is het schoolbord, omdat dit een schoolbordconditie is.

50
00:03:33,290 --> 00:03:38,360
‫En zoals je kunt zien aan het schrift eronder, is de standaard iets in de trant van:

51
00:03:38,360 --> 00:03:39,710
‫is deze zelfhandeling ingesteld?

52
00:03:40,250 --> 00:03:46,940
‫En als dit niet is ingesteld, dan zal automatisch dit knooppunt en alles eronder falen, wat betekent

53
00:03:46,940 --> 00:03:50,810
‫dat onze selector naar optie twee gaat, namelijk onderzoeken.

54
00:03:51,290 --> 00:03:53,800
‫Dus in dit geval willen we dit eigenlijk veranderen.

55
00:03:53,810 --> 00:03:55,160
‫We willen veranderen hoe dit werkt.

56
00:03:55,160 --> 00:04:02,120
‫Dus onze spelerslocatie, we willen dat deze zodanig is dat deze alleen wordt ingesteld wanneer de speler zichtbaar is.

57
00:04:02,510 --> 00:04:09,980
‫En dan willen we hier weer een nieuwe variabele toevoegen, een vector die de laatst bekende spelerlocatie zal zijn

58
00:04:10,400 --> 00:04:16,010
‫en de laatst bekende spelerlocatie wanneer de speler zichtbaar is, dezelfde zal zijn.

59
00:04:16,490 --> 00:04:20,660
‫Maar zodra de speler onzichtbaar wordt, wordt de locatie van de speler uitgeschakeld.

60
00:04:21,080 --> 00:04:23,840
‫En de laatst bekende spelerslocatie is waar we heen willen.

61
00:04:24,620 --> 00:04:30,230
‫We kunnen dit dus doen door naar onze Blackboard Base-voorwaarde te gaan en deze te wijzigen in de

62
00:04:30,230 --> 00:04:31,850
‫vraag Ja is ingesteld.

63
00:04:32,300 --> 00:04:35,300
‫Maar het ding dat we willen zijn, is de locatie van de speler.

64
00:04:35,300 --> 00:04:41,900
‫Dus als de speellocatie is ingesteld, dan gaan we achtervolgen en we gaan Chase geven door

65
00:04:41,900 --> 00:04:47,960
‫eigenlijk gewoon een verplaatsing te doen naar en we gaan naar de spelerlocatie zoals.

66
00:04:47,960 --> 00:04:51,730
‫Dus nu doen we niet veel anders onder de volgorde.

67
00:04:51,740 --> 00:04:57,240
‫Dus in feite zou je deze schoolbordconditie ook direct in beweging kunnen zetten.

68
00:04:57,680 --> 00:05:01,700
‫Maar omdat we misschien andere dingen willen doen, zoals fotograferen, laat ik het voor nu als een

69
00:05:01,700 --> 00:05:02,150
‫reeks.

70
00:05:02,660 --> 00:05:04,010
‫Dan hebben we dit onderzoek.

71
00:05:04,010 --> 00:05:10,430
‫Investigate gaat in principe ook een zet doen, maar het gaat naar in

72
00:05:10,460 --> 00:05:15,980
‫plaats van naar de spelerslocatie, maar naar de laatst bekende spelerlocatie.

73
00:05:16,580 --> 00:05:22,730
‫En je kunt zien dat we daar geen voorwaarde voor hebben, want dit gaat niet door als deze voorwaarde faalt.

74
00:05:23,420 --> 00:05:29,210
‫Een belangrijk ding om op te merken over deze blackboard-voorwaarden is dat we dat standaard niet opnieuw gaan

75
00:05:29,210 --> 00:05:33,890
‫evalueren als we de beslissing hebben genomen om dit knooppunt uit te voeren.

76
00:05:34,160 --> 00:05:39,770
‫Dus als we om de een of andere reden de speler uit het oog verliezen terwijl we naar de locatie van die speler

77
00:05:39,770 --> 00:05:41,570
‫verhuizen, blijven we proberen daar te komen.

78
00:05:42,080 --> 00:05:49,580
‫Dus als we de uitvoering van deze notitie willen kunnen afbreken, dan is daar een optie voor.

79
00:05:49,580 --> 00:05:53,720
‫Als je naar de flow control gaat, zijn er waarnemers waarnemers en daaronder.

80
00:05:53,720 --> 00:05:56,030
‫Observer breekt af op het moment ingesteld op geen.

81
00:05:56,600 --> 00:05:58,490
‫Maar u kunt kiezen uit een aantal opties.

82
00:05:59,180 --> 00:06:00,590
‫Je kunt het zelf instellen.

83
00:06:00,860 --> 00:06:07,790
‫Dus dit wil zeggen dat als deze voorwaarde plotseling onwaar wordt, stop dan met wat je ook doet en je

84
00:06:07,790 --> 00:06:09,710
‫selector opnieuw evalueert en kijk.

85
00:06:09,740 --> 00:06:12,050
‫Misschien moeten we nu de onderzoeksnota doen.

86
00:06:12,650 --> 00:06:18,470
‫De andere optie hier heeft een lagere prioriteit en je kunt zien dat het is veranderd wat hier is gemarkeerd.

87
00:06:18,470 --> 00:06:24,380
‫Het zegt dat als deze schoolbordvoorwaarde plotseling waar wordt, stop met wat we verder aan het doen waren en

88
00:06:24,380 --> 00:06:26,790
‫begin met het uitvoeren van deze achtervolgingsvoorwaarde.

89
00:06:27,380 --> 00:06:29,630
‫En dan is de laatste optie beide.

90
00:06:29,900 --> 00:06:31,050
‫En dit is degene die we willen.

91
00:06:31,070 --> 00:06:37,160
‫Kortom, het zegt dat deze op schoolbord gebaseerde voorwaarde, als het waar wordt, we de reeks onmiddellijk beginnen

92
00:06:37,160 --> 00:06:38,480
‫uit te voeren.

93
00:06:38,690 --> 00:06:44,100
‫Als het onwaar wordt, stoppen we onmiddellijk met het uitvoeren ervan of stoppen we met het uitvoeren van wat er nog meer aan de hand was.

94
00:06:44,120 --> 00:06:51,350
‫We willen eigenlijk altijd het pad volgen dat wordt bepaald door deze schoolbordconditie.

95
00:06:51,350 --> 00:06:56,690
‫Dus hopelijk is het logisch dat de waarnemersrapporten dingen in actie stoppen, anders zal het wachten tot

96
00:06:56,690 --> 00:06:59,720
‫de actie is voltooid voordat het opnieuw wordt geëvalueerd.

97
00:07:00,470 --> 00:07:07,370
‫Dus echt, nu willen we doorgaan en onze laatst bekende locatie en speellocatie implementeren, want als we op dit moment

98
00:07:07,640 --> 00:07:13,520
‫overgaan naar onze C++ en onszelf een beetje meer ruimte geven, dan kun je zien dat we

99
00:07:13,520 --> 00:07:16,220
‫dit alleen instellen speellocatie in Start Play.

100
00:07:16,340 --> 00:07:21,380
‫In het ideale geval zouden we dit elke keer doen als we een zichtlijn hebben naar onze spelerspool, en

101
00:07:21,380 --> 00:07:23,540
‫dus kunnen we hier onze zichtlijncode verwijderen.

102
00:07:24,110 --> 00:07:27,320
‫En we willen waarschijnlijk ook de else-code verwijderen.

103
00:07:27,560 --> 00:07:32,300
‫Maar in dit geval gaan we de focus niet opruimen en de beweging direct stoppen.

104
00:07:32,300 --> 00:07:35,570
‫Ik kan doorgaan en deze volledig verwijderen omdat.

105
00:07:35,610 --> 00:07:37,590
‫Zo doen we het momenteel niet.

106
00:07:38,130 --> 00:07:47,130
‫In plaats daarvan, wat we willen doen, als ik de code verwijder, is dat we hier de locatie van de speler willen

107
00:07:47,130 --> 00:07:47,940
‫instellen.

108
00:07:48,300 --> 00:07:53,500
‫Ook willen we daar de laatst bekende locatie neerzetten.

109
00:07:54,000 --> 00:07:59,520
‫En anders willen we de locatie van de speler wissen.

110
00:08:00,270 --> 00:08:07,800
‫Om dat te doen, hebben we een functie tot onze beschikking, die in plaats van de ingestelde waarde

111
00:08:07,800 --> 00:08:15,210
‫als vector is, als we doorgaan en onze schoolbordcomponent dot h openen, is er een duidelijke waarde.

112
00:08:15,630 --> 00:08:21,150
‫En dit heeft alleen de f-naam, hoeft geen type of iets anders te zijn, of omdat we gewoon

113
00:08:21,150 --> 00:08:23,850
‫volledig wissen wat er in die variabele stond.

114
00:08:24,570 --> 00:08:27,360
‫Dus hier heb ik een uitdaging voor je om ons vinkje in te vullen.

115
00:08:27,780 --> 00:08:30,420
‫Stel de twee variabelen in bij zichtlijn.

116
00:08:30,450 --> 00:08:38,790
‫Vul in principe dit eerste deel van de F-instructie in en wis vervolgens de spelerslocatie wanneer we de else

117
00:08:38,790 --> 00:08:39,240
‫hebben.

118
00:08:39,240 --> 00:08:41,940
‫Dus als we het zicht verliezen, hebben we geen speellocatie meer.

119
00:08:42,360 --> 00:08:48,300
‫Verminder de snelheid van de vijand die in de wereld is, zodat je gemakkelijker bij hem weg kunt komen.

120
00:08:48,630 --> 00:08:54,720
‫En controleer dan de functionaliteit, controleer of je je achter een hoek kunt verstoppen en of hij naar de laatst bekende locatie

121
00:08:54,720 --> 00:08:56,920
‫gaat om je te proberen te vinden.

122
00:08:57,330 --> 00:08:59,190
‫Pauzeer de video en probeer het eens.

123
00:09:00,460 --> 00:09:00,780
‫Oké.

124
00:09:00,790 --> 00:09:01,370
‫Welkom terug.

125
00:09:01,390 --> 00:09:02,500
‫Dus laten we dit een kans geven.

126
00:09:02,530 --> 00:09:04,210
‫Allereerst stellen we de speellocatie in.

127
00:09:04,210 --> 00:09:06,970
‫Ik ga dat uit het begin van het spel halen en in plaats daarvan hierheen verplaatsen.

128
00:09:07,480 --> 00:09:12,670
‫Dus als we de spelerslocatie gaan instellen, moeten we de speler a hier krijgen en opnieuw nemen.

129
00:09:13,000 --> 00:09:14,320
‫Dus ik zal die regel verwijderen.

130
00:09:14,800 --> 00:09:21,100
‫En dan doen we precies hetzelfde, precies dezelfde regel code voor onze laatst bekende spelerslocatie

131
00:09:21,100 --> 00:09:21,930
‫hier.

132
00:09:21,940 --> 00:09:28,030
‫Dus laten we naar ons schoolbord gaan en ervoor zorgen dat we het kopiëren zodat we precies dezelfde naam krijgen en

133
00:09:28,030 --> 00:09:33,100
‫dan willen we gewoon duidelijk maken dat het laatste is om onze spelerslocatie hier te wissen.

134
00:09:33,100 --> 00:09:39,550
‫Dus het wordt een duidelijke waarde en het zal deze tekstspelerlocatie nemen als de waarde die we aan

135
00:09:39,550 --> 00:09:41,740
‫het einde proberen te wissen.

136
00:09:42,400 --> 00:09:46,600
‫En we kunnen doorgaan en compileren en kijken of dit werkt.

137
00:09:48,700 --> 00:09:50,500
‫Terwijl Compile succesvol was.

138
00:09:50,500 --> 00:09:56,500
‫Het andere dat ik zei om het debuggen gemakkelijker te maken, was om de vijand te

139
00:09:56,500 --> 00:10:04,300
‫selecteren en we kunnen hun snelheid veranderen door naar hun bewegingscomponenten te gaan en de lopende en hun snelheid te vinden.

140
00:10:04,310 --> 00:10:07,060
‫Dus de maximale loopsnelheid is hier 600.

141
00:10:07,390 --> 00:10:11,440
‫Laten we het op 400 zetten, zodat we er gemakkelijk vanaf kunnen komen.

142
00:10:11,440 --> 00:10:15,140
‫Ze gaan een beetje langzaam lopen en gaan spelen.

143
00:10:15,160 --> 00:10:16,660
‫Ze lopen langzaam naar een.

144
00:10:16,660 --> 00:10:17,740
‫We kunnen weglopen.

145
00:10:18,130 --> 00:10:20,230
‫We verschuilen ons achter een hoek en daar gaan ze.

146
00:10:20,230 --> 00:10:22,570
‫Kom ons elke keer opzoeken.

147
00:10:22,960 --> 00:10:27,820
‫Maar hopelijk kunnen ze ons niet vinden als we ons achter twee hoeken verstoppen.

148
00:10:28,240 --> 00:10:30,880
‫Dus ik verstop me daar, verberg me hier, verberg me hier.

149
00:10:31,330 --> 00:10:35,320
‫En hij gaat op onderzoek uit op de laatst bekende locatie, zie je, hij heeft net zijn

150
00:10:35,320 --> 00:10:39,490
‫hoofd om de hoek gestoken, maar dan zit hij daar vast omdat hij niet weet wat hij moet doen.

151
00:10:39,940 --> 00:10:46,870
‫En als we naar onze gedragsboom zouden gaan kijken en dit aan de ene kant en het spel aan de andere kant

152
00:10:46,870 --> 00:10:49,870
‫zouden leggen en mezelf een beetje ruimte zouden geven.

153
00:10:50,350 --> 00:10:54,850
‫Als we dan naar de gedragsboom kijken, kunnen we zien dat het hier een beetje aan het swingen is,

154
00:10:54,850 --> 00:10:56,560
‫omdat het geen van beide kan.

155
00:10:56,560 --> 00:11:00,220
‫Het probeert te verhuizen naar de laatst bekende locatie en dat lukt.

156
00:11:00,460 --> 00:11:01,720
‫Het loopt hier dus een beetje vast.

157
00:11:02,020 --> 00:11:05,710
‫Maar als ik in zicht kom, zie je dat hij naar me toe beweegt.

158
00:11:06,070 --> 00:11:11,530
‫Als hij mij uit het oog verliest, gaat hij over naar de onderzoekstoestand.

159
00:11:11,920 --> 00:11:12,730
‫Dus uit het oog verliezen.

160
00:11:12,730 --> 00:11:13,840
‫Hij gaat op onderzoek.

161
00:11:14,230 --> 00:11:17,890
‫En dan komt hij en ziet me en dan gaat hij weer achter me aan.

162
00:11:18,250 --> 00:11:20,740
‫Dus dit gedrag werkt echt.

163
00:11:20,740 --> 00:11:29,140
‫Nu kunnen we een keuze maken tussen proberen te jagen en proberen te onderzoeken op basis van dit

164
00:11:29,140 --> 00:11:29,650
‫schoolbordgedrag.

165
00:11:29,650 --> 00:11:37,060
‫Laten we de naam van dit schoolbord veranderen in gedrag hier om een vraagteken te kunnen zien spelen.

166
00:11:37,300 --> 00:11:38,860
‫Dus dat zal veel gemakkelijker te lezen zijn.

167
00:11:38,860 --> 00:11:43,960
‫Nu hebben we deze selector die het spel kan zien en dan moeten we achtervolgen, anders moeten we

168
00:11:43,960 --> 00:11:48,820
‫het onderzoeken en we kunnen deze reeks hier verwijderen omdat die niet meer in gebruik is.

169
00:11:49,300 --> 00:11:54,700
‫Dus hopelijk heb je nu een beetje een beter begrip van hoe gedragsbomen aan elkaar kunnen

170
00:11:54,700 --> 00:12:01,390
‫worden gekoppeld om keuze en volgorde te creëren en veel taken samen te voegen om meer complex gedrag heel gemakkelijk te maken.

171
00:12:01,780 --> 00:12:07,990
‫In de volgende lezing gaan we kijken hoe we onze eigen aangepaste taken in C++ kunnen maken,

172
00:12:07,990 --> 00:12:10,330
‫zodat we wat schietactie kunnen krijgen.

173
00:12:10,450 --> 00:12:11,740
‫Ik zie je in de volgende video.

