﻿1
00:00:04,710 --> 00:00:05,580
‫Cześć i witaj.

2
00:00:05,580 --> 00:00:10,890
‫W tym wykładzie zamierzamy sprawić, by warunek wygranej działał, abym mógł zabić wszystkich wrogów na

3
00:00:10,890 --> 00:00:14,160
‫moim poziomie, a wyświetli mi się ten ekran zwycięstwa.

4
00:00:14,160 --> 00:00:16,320
‫HAREL Zanurzmy się i zobaczmy, jak to się robi.

5
00:00:17,830 --> 00:00:22,170
‫Chcielibyśmy więc, aby nasz gracz rzeczywiście wygrał tę grę.

6
00:00:22,180 --> 00:00:23,500
‫W tej chwili nie mogą.

7
00:00:24,040 --> 00:00:25,060
‫Więc jak to zrobimy?

8
00:00:25,090 --> 00:00:27,020
‫Cóż, można to zrobić na wiele sposobów.

9
00:00:27,040 --> 00:00:32,710
‫Jednym z nich byłoby wywołanie pionka zabitego, a pionek nie jest kontrolerem gry.

10
00:00:32,710 --> 00:00:39,280
‫Ale wtedy moglibyśmy odjąć od zmiennej, która mówi, ile powietrza jest na świecie, ile musimy

11
00:00:39,280 --> 00:00:39,910
‫zabić.

12
00:00:40,120 --> 00:00:43,750
‫A kiedy spadnie do zera, możemy zakończyć grę na korzyść gracza.

13
00:00:43,840 --> 00:00:49,480
‫Myślę jednak, że jest to trochę kruche, ponieważ wymaga od nas umieszczenia liczby wrogów na świecie w

14
00:00:49,480 --> 00:00:54,160
‫dwóch miejscach, zasadniczo musi być w trybie gry, ale także musi być na świecie,

15
00:00:54,160 --> 00:00:58,720
‫gdy umieszczasz wrogowie padli i ci dwaj mogą stracić synchronizację, a to spowoduje pewne

16
00:00:58,720 --> 00:00:59,320
‫problemy.

17
00:00:59,860 --> 00:01:05,710
‫Więc wolałbym to zrobić, po prostu powiedzieć, policzmy wszystkich wrogów na świecie za każdym razem, gdy pionek zostanie zabity,

18
00:01:05,710 --> 00:01:11,740
‫zróbmy ponowne przeliczenie, policzenie wszystkich A. I. i zobacz, które jeszcze

19
00:01:11,740 --> 00:01:12,910
‫żyją.

20
00:01:13,030 --> 00:01:16,390
‫Jeśli któryś z nich nadal żyje, to jeszcze nie zakończymy gry.

21
00:01:16,640 --> 00:01:17,590
‫Miejsce gra się nie skończyła.

22
00:01:17,920 --> 00:01:22,840
‫Ale jeśli wszyscy nie żyją, a kontroler gry nie, to gracz wygrał.

23
00:01:23,620 --> 00:01:29,170
‫Abyśmy mogli to zrobić, musimy mieć sposób na zapytanie kontrolera gracza, czy jest martwy, czy

24
00:01:29,170 --> 00:01:29,920
‫nie.

25
00:01:30,100 --> 00:01:31,930
‫Przepraszam, mam na myśli kontroler.

26
00:01:32,410 --> 00:01:35,770
‫Poszukajmy więc naszego kontrolera strzelanek kropka H.

27
00:01:36,460 --> 00:01:41,740
‫Chcemy tutaj stworzyć nową metodę publiczną, która pozwoli nam zapytać, czy jest martwa, czy

28
00:01:41,740 --> 00:01:42,280
‫nie.

29
00:01:42,430 --> 00:01:49,270
‫Więc zrobimy, że pula jest oparta, jest martwa i będzie kontrastem, ponieważ nie powinna zmieniać tego, co

30
00:01:49,270 --> 00:01:52,660
‫faktycznie dzieje się w kontrolerze, gdy jest wywoływana.

31
00:01:53,530 --> 00:01:55,540
‫I możemy śmiało tworzyć implementację.

32
00:01:56,570 --> 00:02:01,740
‫Teraz powinniśmy kontrolować -- to może nam powiedzieć, czy jest martwe, czy nie.

33
00:02:01,760 --> 00:02:07,730
‫Jeśli pójdziemy i przyjrzymy się temu jeszcze raz, przyjrzymy się postaci strzelca, która jest --.

34
00:02:07,730 --> 00:02:12,020
‫Pamiętaj, że już tam mamy funkcję martwego kontaktu.

35
00:02:12,230 --> 00:02:17,180
‫Więc zasadniczo to, co chcemy zrobić, to po prostu przekazać prośbę do strzelca, którego teraz kontroluję.

36
00:02:17,480 --> 00:02:17,940
‫Tak.

37
00:02:17,960 --> 00:02:23,660
‫Jedna rzecz jest taka, że możesz powiedzieć w trybie KML all game, możesz chwycić

38
00:02:23,660 --> 00:02:30,110
‫kontroler, chwycić -- że to, co kontroluje, wykonać rzutowanie, a następnie sprawdzić, czy to -- jest martwe.

39
00:02:30,530 --> 00:02:36,350
‫Jednak generalnie nie jest to najlepsza praktyka, ponieważ oznacza to, że jeśli nagle coś

40
00:02:36,350 --> 00:02:43,460
‫zmieni się w sposobie obliczania śmierci i lub kontroler powietrza będzie kontrolować różne typy --, nagle musimy

41
00:02:43,460 --> 00:02:46,840
‫zmienić tryb gry, który nie ma sens.

42
00:02:46,850 --> 00:02:52,340
‫Więc lepiej to zrobić i wykonać bardziej solidne przekazywanie wewnątrz kontrolerów powietrza.

43
00:02:52,670 --> 00:02:58,730
‫To powstrzymuje nas od grzebania w wewnętrznych elementach klasy innej osoby, co ogólnie oznacza, że możemy

44
00:02:58,730 --> 00:03:04,280
‫ograniczyć, kiedy coś się zmieni, możemy ograniczyć liczbę klas, które musimy przejść, dotknąć, zaktualizować

45
00:03:04,280 --> 00:03:06,680
‫i zmienić, co zawsze jest dobre.

46
00:03:07,490 --> 00:03:13,130
‫Więc będziemy chcieli zrobić - i rzucić - aby upewnić się, że jest to postać strzelca.

47
00:03:13,130 --> 00:03:14,150
‫Więc zróbmy obsadę.

48
00:03:14,660 --> 00:03:17,030
‫Będzie do strzelca.

49
00:03:18,010 --> 00:03:23,200
‫Postać i myślę, że będziemy musieli to zrobić, musi zawierać u góry kontrolę wzroku, aby upewnić się,

50
00:03:23,200 --> 00:03:25,720
‫że wiemy o takiej postaci podczas sesji.

51
00:03:26,230 --> 00:03:34,120
‫A potem zrobimy obsadę, robiąc get -- i będziemy chcieli zapisać to w zmiennej,

52
00:03:34,420 --> 00:03:36,790
‫żeby to była strzelanka.

53
00:03:37,030 --> 00:03:42,370
‫Wskaźnik znakowy o nazwie nazwijmy to kontrolowany.

54
00:03:43,770 --> 00:03:44,490
‫Postać.

55
00:03:46,000 --> 00:03:52,360
‫Nie mogę nazwać tego po prostu znakiem, ponieważ jest to już zmienna na kontrolerze powietrza i wstawiamy średnik na

56
00:03:52,360 --> 00:03:56,440
‫końcu linii, a my sprawdzimy, czy to jest zero, czy nie.

57
00:03:57,070 --> 00:04:03,730
‫Tak więc znak kontrolny nie jest równy wskaźnikowi null, wtedy powinniśmy być w stanie zapytać go o jego stan, czy jest

58
00:04:03,730 --> 00:04:04,720
‫martwy, czy nie.

59
00:04:05,140 --> 00:04:09,910
‫Powinniśmy więc być w stanie zwrócić sterowaną postać.

60
00:04:11,070 --> 00:04:12,120
‫Nie żyje.

61
00:04:12,780 --> 00:04:16,170
‫Zasadniczo przekazujemy na żądanie naszej sterującej postaci.

62
00:04:16,500 --> 00:04:18,630
‫Jeśli ta postać kontrolna jest postacią strzelca.

63
00:04:19,110 --> 00:04:22,260
‫Jednak zauważ, że nie mamy tutaj oświadczenia o powrocie.

64
00:04:22,260 --> 00:04:24,720
‫W innym przypadku musimy mieć zwrot.

65
00:04:24,960 --> 00:04:26,580
‫Zawsze musi być powrót.

66
00:04:26,850 --> 00:04:28,890
‫Jeśli zwracana wartość nie jest nieważna.

67
00:04:29,280 --> 00:04:35,370
‫Musimy więc umieścić tutaj instrukcję return poza instrukcją if, aby złapać przypadek, w którym jeszcze

68
00:04:35,370 --> 00:04:37,680
‫nie wróciliśmy do instrukcji if.

69
00:04:38,160 --> 00:04:40,890
‫I tutaj powiemy tylko, czy ta postać jest martwa?

70
00:04:40,920 --> 00:04:46,230
‫No tak, w zasadzie, jeśli to nie jest prawda, to w zasadzie jest martwe.

71
00:04:46,650 --> 00:04:52,200
‫Jeśli nie mamy pionka, jeśli nie kontrolujemy pionka, to zasadniczo ten kontroler powietrza jest dla

72
00:04:52,200 --> 00:04:53,610
‫nas prawie martwy.

73
00:04:54,120 --> 00:05:00,090
‫A może tak się stać, ponieważ pamiętaj, że pionek odłącza się od swojego kontrolera, gdy umiera.

74
00:05:01,110 --> 00:05:06,390
‫Więc wrócimy do trybu gry i co będziemy chcieli tutaj robić?

75
00:05:07,080 --> 00:05:14,340
‫Zasadniczo chcemy zrobić pełną pętlę po całym i.

76
00:05:14,340 --> 00:05:16,410
‫Strzelec, ja.

77
00:05:17,730 --> 00:05:19,050
‫Na świecie.

78
00:05:20,230 --> 00:05:22,120
‫I z tym dla pętli.

79
00:05:22,690 --> 00:05:23,530
‫Co chcemy zrobić?

80
00:05:23,740 --> 00:05:25,690
‫Chcemy zobaczyć, że nie żyje.

81
00:05:27,400 --> 00:05:32,080
‫Zasadniczo i lub w zasadzie nie jest martwy.

82
00:05:33,100 --> 00:05:39,320
‫A jeśli żaden z nich nie jest martwy, od razu wiemy, że wcale nie musimy sprawdzać całego powietrza.

83
00:05:39,340 --> 00:05:44,080
‫Jeśli choć jeden facet żyje, gra się nie kończy.

84
00:05:44,080 --> 00:05:49,120
‫Możemy więc zrobić coś, co jest znane jako wczesny powrót, co prawdopodobnie widzieliście

85
00:05:49,120 --> 00:05:54,180
‫już wcześniej, co oznacza wyjście z tej funkcji bez wykonywania w niej więcej kodu.

86
00:05:54,190 --> 00:05:58,540
‫Tak więc wszystko po tym wczesnym powrocie przestanie wykonywać pełną pętlę, przestanie wykonywać wszystko po

87
00:05:58,540 --> 00:05:59,770
‫tym, jak przestanie wykonywać.

88
00:06:00,640 --> 00:06:07,180
‫Ale możemy powiedzieć, że jeśli udało nam się przejść przez tę pełną pętlę bez

89
00:06:07,180 --> 00:06:14,230
‫wcześniejszego powrotu, co oznacza, że na świecie nie ma żywych sojuszników, musimy iść naprzód i zakończyć grę.

90
00:06:15,070 --> 00:06:15,850
‫Proste.

91
00:06:16,150 --> 00:06:22,460
‫Teraz jedną z części układanki, na którą musimy się przyjrzeć, są wywołania końcowe.

92
00:06:22,780 --> 00:06:25,780
‫Gra zakończyła się na kontrolerze gracza.

93
00:06:25,840 --> 00:06:29,170
‫Przyjrzyjmy się, jak obecnie radzi sobie z tym kontroler gracza strzelającego.

94
00:06:29,200 --> 00:06:35,650
‫Jeśli przejdziemy do jego CP, obecnie widzimy, że obecnie całkowicie ignoruje, że B jest zwycięzcą, obecnie

95
00:06:35,650 --> 00:06:38,350
‫ignoruje, czy jest zwycięzcą, czy nie.

96
00:06:39,340 --> 00:06:43,900
‫Musimy więc powiedzieć, czy B jest zwycięzcą.

97
00:06:45,030 --> 00:06:48,270
‫Wtedy zrobimy coś innego.

98
00:06:49,080 --> 00:06:51,840
‫Zamierzamy wyświetlić nasz ekran przegranych.

99
00:06:52,110 --> 00:06:55,890
‫Wytnij więc tutaj te linie, które odpowiadają za wyświetlanie ekranu utraty.

100
00:06:55,890 --> 00:06:59,940
‫Umieść to w instrukcji out, a i tak uruchomimy ponownie w obu przypadkach.

101
00:07:00,810 --> 00:07:02,580
‫Więc obecnie be jest zwycięzcą.

102
00:07:02,580 --> 00:07:03,460
‫Co zrobimy?

103
00:07:03,480 --> 00:07:11,550
‫Cóż, po prostu pójdziemy dalej i prawdopodobnie stworzymy również osłonę przed wiatrem, co będzie dość

104
00:07:11,550 --> 00:07:12,410
‫proste.

105
00:07:12,420 --> 00:07:16,200
‫Przechodzimy do naszego pliku nagłówkowego, aby kręcić, aby odtworzyć kontroler.

106
00:07:16,530 --> 00:07:21,750
‫Możemy duplikować, tracić klasę ekranu i tworzyć klasę ekranu wygrywającego.

107
00:07:21,750 --> 00:07:25,200
‫I tutaj też możemy śmiało z tym walczyć.

108
00:07:25,200 --> 00:07:26,130
‫Mini wyzwanie dla Ciebie.

109
00:07:26,130 --> 00:07:29,490
‫Może śmiało skonfiguruj go tak, aby mógł zrobić ekran wygranej.

110
00:07:30,000 --> 00:07:30,630
‫Kay, witaj z powrotem.

111
00:07:30,630 --> 00:07:33,120
‫Więc miejmy nadzieję, że dałeś temu szansę.

112
00:07:33,120 --> 00:07:40,290
‫Po prostu wejdziemy i umieścimy tutaj przednią szybę, zamiast wszystkich kopii reklam strat, zasadniczo wszystkiego

113
00:07:40,290 --> 00:07:41,280
‫innego.

114
00:07:42,870 --> 00:07:43,500
‫Tak jak.

115
00:07:44,830 --> 00:07:51,760
‫Zamierzamy iść dalej i skompilować to, a następnie przejść do edytora i znaleźć

116
00:07:51,820 --> 00:07:53,610
‫klasę kontrolera odtwarzacza.

117
00:07:53,620 --> 00:07:56,680
‫I powinniśmy teraz zobaczyć, że jest pusta klasa szyby przedniej.

118
00:07:57,010 --> 00:08:02,290
‫A to, co zrobimy, to przejść do interfejsu użytkownika i powielić ekran utraty, aby wywołać

119
00:08:02,350 --> 00:08:03,430
‫przednią szybę.

120
00:08:03,670 --> 00:08:05,800
‫I możesz stworzyć swoje od podstaw, jeśli chcesz.

121
00:08:05,800 --> 00:08:11,740
‫Ale zamierzam używać go bardzo podobnie, z wyjątkiem tego, że zmienię kolor na zielony.

122
00:08:12,680 --> 00:08:16,880
‫I sprawić, że wygrasz zamiast przegrać.

123
00:08:18,090 --> 00:08:21,770
‫Ponieważ logika restartu będzie właściwie taka sama.

124
00:08:21,840 --> 00:08:25,590
‫Z jakiegoś powodu zresetowałem mój kolor, że po prostu pójdę i ponownie ustawię kolorowy ekran.

125
00:08:25,620 --> 00:08:26,430
‫Ok, więc to świetnie.

126
00:08:26,430 --> 00:08:31,680
‫Ale wciąż mamy ten fragment pseudokodu w trybie gry KML, który nie został wypełniony.

127
00:08:31,710 --> 00:08:34,590
‫A to dlatego, że Twoim wyzwaniem jest obliczenie wygranej.

128
00:08:34,980 --> 00:08:40,470
‫Wypełnij pseudokod, użyj aktywnego zakresu T od dołu w tej klasie, aby ci pomóc.

129
00:08:40,830 --> 00:08:45,360
‫Użyj nowej funkcji, którą stworzyliśmy na kontrolerze i przetestuj ją.

130
00:08:45,360 --> 00:08:49,410
‫Zobacz, czy Twoja przednia szyba pojawi się, gdy zabijesz całe powietrze na świecie.

131
00:08:49,500 --> 00:08:53,370
‫Więc zostawię to z pseudokodem na ekranie, abyś mógł się przyjrzeć.

132
00:08:54,030 --> 00:08:54,970
‫K Witamy ponownie.

133
00:08:54,990 --> 00:08:56,220
‫Zacznijmy więc od pętli for.

134
00:08:56,760 --> 00:08:59,020
‫Więc mam zamiar zrobić po co robimy za pętlę?

135
00:08:59,040 --> 00:09:00,600
‫Tym razem to nie jest kontroler.

136
00:09:00,600 --> 00:09:03,630
‫To będzie kontroler powietrza strzelca.

137
00:09:03,630 --> 00:09:05,160
‫Więc musimy to uwzględnić.

138
00:09:06,120 --> 00:09:09,300
‫To będzie strzelec.

139
00:09:10,250 --> 00:09:12,040
‫Kontroler powietrza Don H.

140
00:09:13,110 --> 00:09:20,520
‫A to oznacza, że zamierzamy zapętlić się nad sklepem z kontrolerami Shooter

141
00:09:20,520 --> 00:09:30,060
‫II, żeby po prostu ochłodzić kontroler, szorty, a potem znowu zrobimy serię aktorów, niż kontroler powietrzny strzelca.

142
00:09:30,060 --> 00:09:33,810
‫Musimy dopasować te dwa typy, a następnie zdobyć świat.

143
00:09:34,290 --> 00:09:36,290
‫Więc robimy to na tym poziomie.

144
00:09:37,800 --> 00:09:42,450
‫A potem mamy ciało pełnej pętli, w której będziemy pytać, czy nie jest martwy.

145
00:09:42,480 --> 00:09:47,820
‫Więc jeśli nie, Controller Arrow nie żyje.

146
00:09:49,660 --> 00:09:52,240
‫Zasadniczo mówiąc, upewnij się, że nie jesteśmy martwi.

147
00:09:52,720 --> 00:09:58,300
‫A jeśli nie jest martwy, po prostu idziemy dalej i wracamy do tego wczesnego powrotu, ponieważ wiemy, że gra

148
00:09:58,300 --> 00:09:59,860
‫nie może się jeszcze skończyć.

149
00:10:00,310 --> 00:10:05,860
‫W przeciwnym razie, jeśli przeszliśmy całą pełną pętlę bez powrotu, musimy zakończyć grę, ponieważ

150
00:10:05,980 --> 00:10:10,090
‫gracz musiał wygrać, zabić całą sztuczną inteligencję na poziomie.

151
00:10:10,600 --> 00:10:13,000
‫Więc w tym przypadku moglibyśmy zrobić grę końcową.

152
00:10:13,250 --> 00:10:13,830
‫Prawdziwe.

153
00:10:13,870 --> 00:10:15,060
‫Ponieważ gracz ma jeden.

154
00:10:15,430 --> 00:10:20,170
‫A to powinno powiadomić wszystkich kontrolerów graczy i kontrolerów powietrza.

155
00:10:20,860 --> 00:10:21,370
‫Fajny.

156
00:10:21,430 --> 00:10:24,760
‫Więc przejdźmy i skompilujmy to przede wszystkim.

157
00:10:24,940 --> 00:10:27,760
‫Potem przejdę do Unreal i zagram.

158
00:10:27,790 --> 00:10:32,350
‫Z jakiegoś powodu mój edytor myśli, że jestem w tej operacji z określonym kolorem, więc po

159
00:10:32,350 --> 00:10:33,820
‫prostu ją zamknę i zrestartuję.

160
00:10:33,970 --> 00:10:38,610
‫Teraz, gdy jest za darmo, pójdę dalej i wcisnę „odtwarzaj” i zostanę zabity.

161
00:10:38,620 --> 00:10:40,400
‫Przede wszystkim tak, wciąż przegrywam.

162
00:10:40,420 --> 00:10:41,080
‫To wspaniale.

163
00:10:41,090 --> 00:10:43,780
‫A teraz zobaczmy, czy uda mi się zabić tego gościa, zanim on zabije mnie.

164
00:10:44,670 --> 00:10:45,210
‫Chodźmy.

165
00:10:45,210 --> 00:10:46,860
‫Boom, boom, boom, boom, boom, boom, boom.

166
00:10:47,220 --> 00:10:48,110
‫Za szybko przegrywam.

167
00:10:48,120 --> 00:10:52,120
‫Chodźmy ponownie znaleźć broń i ustawić.

168
00:10:52,140 --> 00:10:55,260
‫Mamy naprawdę duże obrażenia od pistoletu.

169
00:10:55,290 --> 00:11:00,450
‫Dla celów testowych zamierzam tym razem zmniejszyć obrażenia z powrotem do może 20.

170
00:11:00,840 --> 00:11:02,940
‫Więc nadal jest szybki, ale nie tak szybki.

171
00:11:03,360 --> 00:11:06,240
‫Idź, zagraj i uderz tego gościa kilka razy.

172
00:11:06,450 --> 00:11:12,160
‫I zobaczyliśmy, że faktycznie wygrałem, ponieważ poziom został wznowiony.

173
00:11:12,180 --> 00:11:15,630
‫Więc jeśli znowu pójdę i zabiję tego gościa, nic się nie dzieje.

174
00:11:15,630 --> 00:11:19,830
‫W dzienniku komunikatów podaje to, co zostało wywołane z klasą null.

175
00:11:19,830 --> 00:11:25,830
‫Powodem tego jest to, że jeśli ponownie przejdziemy do kontrolera strzelanek BP, widać, że nie podłączyliśmy

176
00:11:25,830 --> 00:11:27,300
‫naszej przedniej szyby.

177
00:11:27,360 --> 00:11:31,290
‫Jedna rzecz, o której zapomniałem zrobić, żeby móc kompilować, zapisywać i grać.

178
00:11:31,290 --> 00:11:37,740
‫A teraz mam nadzieję, że jeśli zabiję tego gościa do nowej zagłady, wygram i zrestartuję za 5 sekund.

179
00:11:38,100 --> 00:11:40,860
‫I chcę wam pokazać, że to samo jest prawdą.

180
00:11:41,070 --> 00:11:46,080
‫Jeśli umieszczę więcej kontrolerów graczy na świecie, będzie to wymagało ode mnie zabicia ich obu.

181
00:11:46,410 --> 00:11:49,890
‫Więc chodźmy i sprowadźmy tutaj strzelca.

182
00:11:50,670 --> 00:11:52,890
‫A to będzie mój drugi wróg do zabicia.

183
00:11:52,890 --> 00:11:53,760
‫Więc zabij tego faceta.

184
00:11:53,790 --> 00:11:54,210
‫Bum.

185
00:11:55,410 --> 00:11:56,640
‫I nie wygrał.

186
00:11:56,880 --> 00:11:58,440
‫Potem podchodzę do drugiego faceta.

187
00:11:58,710 --> 00:11:59,050
‫Bum.

188
00:11:59,400 --> 00:12:00,570
‫A teraz mam jeden.

189
00:12:00,570 --> 00:12:05,010
‫Ponieważ zabiłem wszystkie alfa i nie musieliśmy zmieniać żadnych zmiennych, aby to zrobić.

190
00:12:05,010 --> 00:12:09,360
‫Bo ja na pętlę liczę wszystkich żyjących za każdym razem od zera.

191
00:12:09,420 --> 00:12:12,230
‫Więc obecnie żyjemy w dość cichym świecie.

192
00:12:12,240 --> 00:12:18,210
‫Więc w następnym wykładzie chcę zacząć trochę przyglądać się, jak możemy zrobić trochę dźwięku.

193
00:12:18,300 --> 00:12:19,020
‫Zobaczę cię tam.

