﻿1
00:00:04,300 --> 00:00:05,230
‫Merhaba ve hoş geldiniz.

2
00:00:05,230 --> 00:00:12,160
‫Bu derste davranış ağaçlarımızda bazı seçeneklere sahip olmayı inceleyeceğiz, öyle ki bir düşmanımın

3
00:00:12,160 --> 00:00:20,500
‫bana doğru koşmasını sağlayabilirim ve eğer beni gözden kaybederse, temelde iki davranış yaparak bilinen son konumuma gelir;

4
00:00:20,500 --> 00:00:24,250
‫bir kovalama ve sonra bir araştırma davranışı.

5
00:00:24,250 --> 00:00:26,080
‫Şimdi bunun nasıl başarılabileceğini görelim.

6
00:00:26,080 --> 00:00:27,370
‫Davranış ağaçlarını kullanma.

7
00:00:28,470 --> 00:00:34,590
‫Dolayısıyla, bu devriye davranışı çok öğretici olsa da, gerçekten uygulamak istediğimiz türden bir davranış

8
00:00:34,590 --> 00:00:35,520
‫değildir.

9
00:00:35,700 --> 00:00:39,300
‫Bizim tercih edeceğimiz şey aşağıdaki gibi bir şeydir.

10
00:00:39,300 --> 00:00:44,820
‫Oyuncuyu görebildiğimiz zaman, gidip mümkün olduğunca ona yaklaşıyoruz.

11
00:00:45,240 --> 00:00:52,670
‫Ve oyuncu gözden kaybolduğunda, onu bulmak için oyuncunun bilinen son konumuna gitmeye çalışırız.

12
00:00:52,680 --> 00:00:58,470
‫Ve bu seçeneği tükettikten sonra, belki farklı bir yere geri döneriz ya da belki

13
00:00:58,470 --> 00:01:00,390
‫şimdilik orada kalırız.

14
00:01:00,840 --> 00:01:02,430
‫Peki bunu nasıl başarabiliriz?

15
00:01:02,460 --> 00:01:05,910
‫Şu anda bunu bir dizi eylemle gerçekleştirmenin bir yolu yok.

16
00:01:05,910 --> 00:01:09,240
‫Elimizdeki verilere dayanarak bir seçim yapmamız gerekiyor.

17
00:01:09,240 --> 00:01:15,270
‫Oyuncuyu görebiliyor muyuz, göremiyor muyuz, oyuncunun bilinen son konumu var mı, yok mu,

18
00:01:15,270 --> 00:01:18,680
‫bu tür şeyler arasında seçim yapmamız gerekiyor.

19
00:01:18,720 --> 00:01:24,060
‫Bunu yapmak için davranış ağacında seçici düğüm adı verilen yeni bir düğüm türüne ihtiyacımız var.

20
00:01:24,060 --> 00:01:29,280
‫Sağ tıklayıp kompozitlerimize bakarsak, oradaki seçeneklerden biri seçicidir.

21
00:01:29,430 --> 00:01:33,330
‫Şimdi dizinin aksine seçici şu şekilde çalışır.

22
00:01:33,360 --> 00:01:40,740
‫Seçicinin altında bir grup göreviniz varsa, ilki başarılı olana kadar çalışacaktır.

23
00:01:40,740 --> 00:01:45,420
‫Ve temelde, içlerinden biri başarılı olana kadar hepsinin başarısız olmasını beklemektir.

24
00:01:45,660 --> 00:01:48,210
‫Şimdi dizi tam tersini yaptı.

25
00:01:48,210 --> 00:01:50,460
‫Biri başarısız olana kadar hepsini çalıştırır.

26
00:01:50,640 --> 00:01:52,820
‫Peki bu neden yararlı?

27
00:01:52,830 --> 00:01:56,640
‫Seçicinin bunlardan birini çalıştırması ve yine de birinin başarılı olması neden yararlıdır?

28
00:01:56,640 --> 00:02:01,140
‫Çünkü temelde uygulanabilir olan ilk seçeneği seçmesini istiyoruz.

29
00:02:01,830 --> 00:02:06,840
‫Şimdi, bunu yapmanın yolu aslında seçicinin altında görevleri çalıştırmak değil, seçicinin

30
00:02:06,840 --> 00:02:08,970
‫altında dizileri çalıştırmaktır.

31
00:02:08,970 --> 00:02:12,360
‫Yani kök seviyesinde bir seçici düğüm yapacağız.

32
00:02:12,570 --> 00:02:17,160
‫Ve sonra bunun altında, bu diziyi bir kenara bırakalım ve başka diziler oluşturalım.

33
00:02:17,160 --> 00:02:23,220
‫Burada bir sekansımız olacak ve yapabileceğimiz şey aslında sekansı sekans

34
00:02:23,220 --> 00:02:31,080
‫olmaktan Chase gibi bir şeye yeniden adlandırabiliriz ve sonra buraya başka bir sekans ekleyebiliriz,

35
00:02:31,080 --> 00:02:35,280
‫bu da araştırma satırları boyunca olacaktır.

36
00:02:35,990 --> 00:02:41,600
‫Ve bunlar temelde aralarında seçim yapabilmeyi istediğimiz iki davranışımızdır.

37
00:02:42,140 --> 00:02:49,210
‫Ve onları başarısız kılmak için düğümlere dekoratör adı verilen şeyler ekleyebiliriz.

38
00:02:49,220 --> 00:02:55,130
‫Bir düğüme sağ tıklayıp dekoratör ekle derseniz, burada bir dizi seçenek olduğunu ve temelde

39
00:02:55,370 --> 00:02:59,500
‫bu düğümün çalışma şeklini değiştirdiklerini görebilirsiniz.

40
00:02:59,510 --> 00:03:00,920
‫O zaman bunu çeşitli şekillerde yapabilirler.

41
00:03:00,920 --> 00:03:05,870
‫Örneğin, bu koşullu döngü, bu koşul doğru olduğu sürece sıradaki tüm eylemler arasında

42
00:03:05,870 --> 00:03:08,960
‫tekrar döngü oluşturmanıza olanak tanır.

43
00:03:09,110 --> 00:03:15,830
‫Burada koni kontrolü gibi görünürlük ve benzeri güzel şeylerle ilgili başka şeylerimiz de var.

44
00:03:15,830 --> 00:03:17,990
‫Sadece saf bir döngümüz var.

45
00:03:18,110 --> 00:03:23,450
‫Bir zaman sınırımız var, yani bu dizinin içinde sadece belirli bir süre kalabiliriz.

46
00:03:23,450 --> 00:03:27,200
‫Temel olarak bu dizinin davranışını değiştiren pek çok şey.

47
00:03:27,200 --> 00:03:33,320
‫Ancak bizim ilgilendiğimiz kara tahta, çünkü bu bir kara tahta durumu.

48
00:03:33,320 --> 00:03:38,150
‫Ve altındaki yazıdan da görebileceğiniz gibi, varsayılan olarak "Bu kendi kendine aktör

49
00:03:38,150 --> 00:03:39,950
‫ayarlı mı?" gibi bir şey yazıyor.

50
00:03:40,130 --> 00:03:47,000
‫Ve bu ayarlanmazsa, otomatik olarak bu düğüm ve altındaki her şey başarısız olur, bu da seçicimizin ikinci

51
00:03:47,000 --> 00:03:51,050
‫seçeneğe, yani araştırmaya geçeceği anlamına gelir.

52
00:03:51,170 --> 00:03:53,840
‫Bu durumda, aslında bunu değiştirmek istiyoruz.

53
00:03:53,840 --> 00:03:55,220
‫Bu işleyişi değiştirmek istiyoruz.

54
00:03:55,220 --> 00:04:02,420
‫Yani oyuncu konumumuz, bunun yalnızca oyuncu görünür olduğunda ayarlanacak şekilde olmasını istiyoruz.

55
00:04:02,420 --> 00:04:10,310
‫Ve sonra buraya tekrar yeni bir değişken eklemek istiyoruz, bilinen son oyuncu konumu olacak bir vektör

56
00:04:10,310 --> 00:04:16,250
‫ve oyuncu görünür olduğunda bilinen son oyuncu konumu aynı olacak.

57
00:04:16,400 --> 00:04:22,460
‫Ancak oyuncu görünmez olduğunda, oyuncu konumu ayarlanmamış olur ve bilinen son oyuncu konumu gitmek

58
00:04:22,460 --> 00:04:24,080
‫isteyeceğimiz yerdir.

59
00:04:24,590 --> 00:04:30,290
‫Bunu, Blackboard Base koşulumuza giderek ve sorgunun Evet olarak ayarlanmasını sağlayacak şekilde

60
00:04:30,290 --> 00:04:35,330
‫değiştirerek yapabiliriz, ancak ayarlanmasını istediğimiz şey oyuncunun konumudur.

61
00:04:35,330 --> 00:04:41,960
‫Eğer oyuncu konumu ayarlanmışsa, Chase'i vereceğiz ve Chase'i temelde sadece bir

62
00:04:41,960 --> 00:04:48,020
‫move to yaparak vereceğiz ve oyuncu konumuna şu şekilde hareket edeceğiz.

63
00:04:48,020 --> 00:04:51,770
‫Şimdi bu dizinin altında başka bir şey yapmıyoruz.

64
00:04:51,770 --> 00:04:58,490
‫Aslında bu karatahta koşulunu doğrudan hareketin üzerine de koyabilirsiniz, ancak çekim gibi başka şeyler yapmak isteyebileceğimiz

65
00:04:58,490 --> 00:05:02,390
‫için şimdilik bunu bir sekans olarak bırakacağım.

66
00:05:02,510 --> 00:05:04,070
‫Ve sonra bu soruşturma var.

67
00:05:04,070 --> 00:05:10,490
‫Araştırma da temelde bir hareket yapacak, ancak oyuncunun konumuna

68
00:05:10,490 --> 00:05:16,250
‫gitmek yerine, bilinen son oyuncu konumuna gidecektir.

69
00:05:16,490 --> 00:05:23,030
‫Ve bunun üzerinde bir koşulumuz olmadığını görebilirsiniz çünkü bu koşul başarısız olursa bu düşer.

70
00:05:23,300 --> 00:05:29,240
‫Bu karatahta koşulları hakkında dikkat edilmesi gereken önemli bir nokta, varsayılan olarak, bu düğümü yürütmeye

71
00:05:29,240 --> 00:05:34,130
‫başlama kararını verdikten sonra, bunu yeniden değerlendirmeyeceğimizdir.

72
00:05:34,130 --> 00:05:39,830
‫Dolayısıyla, oyuncunun bulunduğu yere doğru ilerlerken herhangi bir nedenle oyuncuyu gözden kaybedersek, oraya

73
00:05:39,830 --> 00:05:41,810
‫ulaşmaya çalışmaya devam edeceğiz.

74
00:05:41,960 --> 00:05:49,610
‫Dolayısıyla, bu düğümün yürütülmesini iptal edebilmesini istiyorsak, bunun için bir seçenek vardır.

75
00:05:49,610 --> 00:05:53,780
‫Akış kontrolüne giderseniz, bildirilen gözlemciler var ve altında da var.

76
00:05:53,780 --> 00:05:56,270
‫Gözlemci hiçbiri olarak ayarlandığı anda iptal eder.

77
00:05:56,510 --> 00:05:58,700
‫Ancak birkaç seçenek arasından seçim yapabilirsiniz.

78
00:05:59,180 --> 00:06:00,830
‫Kendi kendine ayarlayabilirsiniz.

79
00:06:00,830 --> 00:06:07,850
‫Yani bu, bu koşul aniden yanlış hale gelirse, yaptığınız her şeyi durdurun ve seçicinizi yeniden değerlendirin

80
00:06:07,850 --> 00:06:09,800
‫ve görün diyor.

81
00:06:09,800 --> 00:06:11,780
‫Belki de şimdi araştırma yapmamız gerekiyor.

82
00:06:11,780 --> 00:06:18,530
‫Not Buradaki diğer seçenek daha düşük önceliklidir ve burada vurgulananları değiştirdiğini görebilirsiniz.

83
00:06:18,530 --> 00:06:24,440
‫Eğer aniden bu kara tahta koşulu doğru hale gelirse, yaptığımız diğer her şeyi durdurun ve bu takip

84
00:06:24,440 --> 00:06:27,050
‫koşulunu çalıştırmaya başlayın diyor.

85
00:06:27,260 --> 00:06:29,840
‫Son seçenek ise her ikisi de.

86
00:06:29,840 --> 00:06:31,160
‫Bizim istediğimiz de bu.

87
00:06:31,160 --> 00:06:37,220
‫Temel olarak, bu karatahta tabanlı koşulun doğru olması durumunda, bu diziyi hemen yürütmeye başlayacağımızı

88
00:06:37,220 --> 00:06:38,690
‫söylüyor.

89
00:06:38,690 --> 00:06:44,150
‫Yanlış olursa, hemen yürütmeyi durdururuz veya devam eden başka ne varsa onu yürütmeyi durdururuz.

90
00:06:44,150 --> 00:06:51,380
‫Temelde her zaman gitmek ve bu kara tahta koşulu tarafından dikte edilen yolu yapmak istiyoruz.

91
00:06:51,380 --> 00:06:56,750
‫Umarım bu, gözlemcinin eylemdeki durdurma işlemlerini iptal etmesini mantıklı kılar, aksi takdirde yeniden

92
00:06:56,750 --> 00:06:59,960
‫değerlendirmeden önce eylem bitene kadar bekleyecektir.

93
00:07:00,380 --> 00:07:07,130
‫Şimdi gerçekten de devam edip bilinen son oyun konumumuzu ve oyuncu konumumuzu uygulamak istiyoruz,

94
00:07:07,130 --> 00:07:13,100
‫çünkü şu anda C++'ya gidip kendimize biraz daha yer açarsak, bu oyuncu konumunu yalnızca Oyuna

95
00:07:13,100 --> 00:07:16,370
‫Başla'da ayarladığımızı görebilirsiniz.

96
00:07:16,370 --> 00:07:21,440
‫İdeal olarak, oyuncu piyonumuzla her görüş hattımız olduğunda bunu yapıyor olmalıyız, bu yüzden aslında

97
00:07:21,440 --> 00:07:23,780
‫görüş hattı kodumuzu burada kaldırabiliriz.

98
00:07:23,960 --> 00:07:27,470
‫Ve muhtemelen else kodunu da kaldırmak istiyoruz.

99
00:07:27,470 --> 00:07:32,330
‫Ancak bu durumda odağı temizlemeyeceğiz ve hareketi doğrudan durdurmayacağız.

100
00:07:32,330 --> 00:07:35,570
‫Devam edip bunları tamamen kaldırabilirim çünkü.

101
00:07:35,640 --> 00:07:37,830
‫Şu anda işleri bu şekilde yürütmüyoruz.

102
00:07:38,010 --> 00:07:48,200
‫Bunun yerine, kodu kaldırırsam yapmak istediğimiz şey, burada oyuncunun konumunu ayarlamaktır.

103
00:07:48,210 --> 00:07:59,820
‫Ayrıca orada bilinen son konumu ayarlamak istiyoruz ve başka bir yerde oyuncu konumunu temizlemek istiyoruz.

104
00:08:00,210 --> 00:08:07,860
‫Şimdi bunu yapmak için, vektör olarak ayarlanmış değer yerine kullanabileceğimiz bir fonksiyonumuz

105
00:08:07,860 --> 00:08:17,250
‫var, eğer devam edip kara tahta bileşenimizi açarsak, net bir değer var ve bu sadece f adını alıyor, bir tür veya başka bir

106
00:08:17,250 --> 00:08:24,090
‫şey almasına gerek yok ya da çünkü o değişkende ne varsa tamamen siliyoruz.

107
00:08:24,480 --> 00:08:28,140
‫İşte size kene setimizi doldurmanız için bir görev veriyorum.

108
00:08:28,140 --> 00:08:35,010
‫Görüş hattı olduğunda iki değişken, temel olarak if ifadesinin bu ilk kısmını doldurur ve ardından

109
00:08:35,010 --> 00:08:39,270
‫alt'a sahip olduğumuzda oyuncu konumunu temizler.

110
00:08:39,270 --> 00:08:42,210
‫Yani görüş hattını kaybettiğimizde, artık bir oyuncu konumumuz yok.

111
00:08:42,240 --> 00:08:48,510
‫Dünyadaki düşmanın hızını azaltın, böylece ondan daha kolay uzaklaşabilirsiniz.

112
00:08:48,510 --> 00:08:54,780
‫Ve sonra işlevselliği kontrol edin, bir köşenin arkasına saklanabildiğinizi ve sizi bulmaya çalışmak için bilinen

113
00:08:54,780 --> 00:08:57,150
‫son konuma gittiğini kontrol edin.

114
00:08:57,240 --> 00:08:59,460
‫Videoyu duraklatın ve bunu deneyin.

115
00:09:00,490 --> 00:09:00,820
‫Tamam.

116
00:09:00,820 --> 00:09:01,420
‫Tekrar hoş geldiniz.

117
00:09:01,420 --> 00:09:02,560
‫O zaman bir deneyelim.

118
00:09:02,560 --> 00:09:04,240
‫Öncelikle oyun konumunu ayarlıyoruz.

119
00:09:04,240 --> 00:09:07,240
‫Bunu başlangıç oyunundan çıkarıp buraya taşıyacağım.

120
00:09:07,330 --> 00:09:12,880
‫Bu yüzden oyuncu konumunu, oyuncu piyonunu buradan almamız ve tekrar işaretlememiz gereken yere ayarlayacağız.

121
00:09:12,880 --> 00:09:19,180
‫Bu yüzden bu satırı kaldıracağım ve burada bilinen son oyuncu konumumuz için tamamen aynı şeyi,

122
00:09:19,180 --> 00:09:22,000
‫tamamen aynı kod satırını yapıyoruz.

123
00:09:22,000 --> 00:09:28,060
‫Öyleyse tahtaya gidelim ve kopyaladığımızdan emin olalım, böylece tam olarak aynı adı alalım ve sonra

124
00:09:28,060 --> 00:09:33,160
‫sadece temizlemek istiyoruz, bu son şey buradaki oyuncu konumumuzu temizlemektir.

125
00:09:33,160 --> 00:09:39,610
‫Yani clear value olacak ve sonunda temizlemeye çalıştığımız değer olarak bu metin

126
00:09:39,610 --> 00:09:41,980
‫oynatıcı konumunu alacak.

127
00:09:42,280 --> 00:09:46,870
‫Devam edip derleyebilir ve çalışıp çalışmadığını görebiliriz.

128
00:09:48,640 --> 00:09:50,530
‫Derleme başarılı oldu.

129
00:09:50,530 --> 00:09:55,870
‫Hata ayıklamamızı kolaylaştırmak için yapmamızı söylediğim diğer şey, düşmanı

130
00:09:55,870 --> 00:10:04,360
‫seçmekti ve hareket bileşenlerine gidip yürümeyi bularak ve hızlarını bularak hızlarını değiştirebiliriz.

131
00:10:04,360 --> 00:10:07,270
‫Yani Maksimum Yürüme hızı burada 600'dür.

132
00:10:07,300 --> 00:10:11,470
‫400'e ayarlayalım ki onlardan kolayca uzaklaşabilelim.

133
00:10:11,470 --> 00:10:15,220
‫Biraz yavaş yürüyecekler ve devam edip oynayacaklar.

134
00:10:15,220 --> 00:10:16,720
‫Bize doğru yavaşça yürüyorlar.

135
00:10:16,720 --> 00:10:18,010
‫Kaçabiliriz.

136
00:10:18,040 --> 00:10:22,840
‫Bir köşeye saklanıyoruz ve her seferinde bizi aramaya geliyorlar.

137
00:10:22,840 --> 00:10:28,120
‫Ama umarım iki köşenin arkasına saklanırsak bizi bulamazlar.

138
00:10:28,120 --> 00:10:31,210
‫Oraya saklanıyorum, buraya saklanıyorum, buraya saklanıyorum.

139
00:10:31,210 --> 00:10:35,350
‫Ve gidip bilinen son yeri araştıracak, görüyorsunuz, köşeden kafasını

140
00:10:35,350 --> 00:10:39,730
‫uzattı, ama sonra orada sıkışıp kaldı çünkü ne yapacağını bilmiyordu.

141
00:10:39,790 --> 00:10:46,960
‫Davranış ağacımıza bir göz atacak olursak ve bunu bir tarafa, oyunu da diğer tarafa koyup

142
00:10:46,960 --> 00:10:50,110
‫kendime biraz yer açacak olursak.

143
00:10:50,200 --> 00:10:54,940
‫Daha sonra davranış ağacına bakarsak, burada bir tür caz olduğunu görebiliriz

144
00:10:54,940 --> 00:10:56,680
‫çünkü ikisini de yapamaz.

145
00:10:56,680 --> 00:11:00,400
‫Bilinen son yere gitmeye çalışıyor ve bunu başarıyor.

146
00:11:00,400 --> 00:11:01,930
‫Yani burada biraz sıkışıyor.

147
00:11:01,930 --> 00:11:05,980
‫Ama görüş alanına girersem, bana doğru geldiğini görebilirsiniz.

148
00:11:05,980 --> 00:11:11,830
‫Eğer beni gözden kaybederse, o zaman soruşturma durumuna geçer.

149
00:11:11,830 --> 00:11:12,760
‫O zaman görüşünü kaybet.

150
00:11:12,760 --> 00:11:14,110
‫Araştıracak.

151
00:11:14,110 --> 00:11:18,130
‫Sonra gelip beni görüyor ve sonra beni kovalamaya devam ediyor.

152
00:11:18,130 --> 00:11:20,800
‫Yani bu davranış aslında işe yarıyor.

153
00:11:20,800 --> 00:11:29,710
‫Artık bu karatahta davranışına dayanarak kovalamaya çalışmak ile araştırmaya çalışmak arasında bir seçim yapabiliyoruz.

154
00:11:29,710 --> 00:11:37,210
‫Oyuncu soru işaretini görebilmek için bu yazı tahtasının adını davranış olarak değiştirelim.

155
00:11:37,210 --> 00:11:38,890
‫Yani bunu okumak çok daha kolay olacak.

156
00:11:38,890 --> 00:11:43,990
‫Şimdi bu seçici oyuncuyu görebiliyor, o zaman kovalamalıyız, aksi takdirde araştırmalıyız

157
00:11:43,990 --> 00:11:49,120
‫ve bu diziyi buradan silebiliriz çünkü bu artık kullanılmıyor.

158
00:11:49,150 --> 00:11:54,730
‫Umarım artık davranış ağaçlarının seçim ve sıralama oluşturmak için nasıl birbirine bağlanabileceğini ve daha

159
00:11:54,730 --> 00:12:01,690
‫karmaşık davranışları gerçekten kolayca oluşturmak için birçok görevi bir araya getirebileceğinizi biraz daha iyi anlamışsınızdır.

160
00:12:01,690 --> 00:12:08,020
‫Bir sonraki derste, C++'da kendi özel görevlerimizi nasıl oluşturabileceğimize bakacağız, böylece bazı çekim

161
00:12:08,020 --> 00:12:10,510
‫eylemleri gerçekleştirebileceğiz.

162
00:12:10,510 --> 00:12:11,980
‫Bir sonraki videoda görüşürüz.

