﻿1
00:00:04,130 --> 00:00:04,610
‫Hej.

2
00:00:04,610 --> 00:00:05,450
‫Witamy spowrotem.

3
00:00:05,480 --> 00:00:09,080
‫Teraz stworzyliśmy już podstawową -- klasę C++.

4
00:00:09,200 --> 00:00:16,310
‫W tym filmie zamierzamy wyprowadzić z tej klasy nową klasę potomną opartą na bazie --.

5
00:00:16,340 --> 00:00:19,310
‫Porozmawiajmy więc, dlaczego chcielibyśmy zrobić coś takiego.

6
00:00:19,580 --> 00:00:26,300
‫Mamy więc tę bazę -- class i wiemy, że będziemy mieć dwie różne klasy, które pochodzą od bazy

7
00:00:26,300 --> 00:00:27,080
‫--.

8
00:00:27,080 --> 00:00:30,020
‫Będziemy mieć nasz czołg i wieżę.

9
00:00:30,050 --> 00:00:34,760
‫Teraz baza zawiera siatki, kapsułę oraz punkt odradzania.

10
00:00:34,760 --> 00:00:38,210
‫I to są rzeczy, które Tank i wieża mogą odziedziczyć.

11
00:00:38,360 --> 00:00:44,480
‫Ale czołg i wieża będą również miały pewne funkcje, które różnią się od siebie.

12
00:00:44,480 --> 00:00:50,060
‫Po pierwsze, nasz czołg będzie się poruszał po świecie i będzie również kontrolowany przez

13
00:00:50,060 --> 00:00:50,720
‫gracza.

14
00:00:50,720 --> 00:00:55,220
‫Musi być więc skonfigurowany do przyjmowania danych wejściowych z klawiatury i myszy.

15
00:00:55,220 --> 00:00:57,950
‫Z drugiej strony wieża po prostu tam będzie siedzieć.

16
00:00:57,980 --> 00:01:03,860
‫Nie wymaga żadnych danych wejściowych od gracza, ponieważ wszystkie jego działania będą kontrolowane przez kod.

17
00:01:03,860 --> 00:01:10,010
‫Tak więc, ponieważ czołg i wieża będą zachowywać się inaczej, użyjemy dziedziczenia, aby stworzyć podstawowe klasy

18
00:01:10,010 --> 00:01:16,730
‫potomne -- więc możemy odziedziczyć to, co mają ze sobą wspólnego, a następnie dodać do każdej klasy te

19
00:01:16,730 --> 00:01:18,290
‫cechy, które będą inne.

20
00:01:18,290 --> 00:01:23,960
‫Wracamy więc do edytora i zamierzam przejść do naszych klas C++, folderu Tune Tank, w

21
00:01:23,960 --> 00:01:29,240
‫którym mamy naszą bazę -- klasę i to będzie klasa, z której wywodzimy.

22
00:01:29,240 --> 00:01:35,480
‫Teraz możemy kliknąć tutaj prawym przyciskiem myszy i wybrać utwórz klasę C++ wyprowadzoną z bazy --.

23
00:01:35,480 --> 00:01:41,690
‫Więc wybierzmy to i pozwolę jej umieścić tę klasę w tym samym katalogu czołgów ze slashem źródłowym,

24
00:01:41,690 --> 00:01:43,550
‫co w bazie --.

25
00:01:43,610 --> 00:01:47,360
‫I nazwałem to czołgiem.

26
00:01:47,360 --> 00:01:54,560
‫Więc nasza klasa czołgów będzie klasą dla naszego rzeczywistego czołgu -- którym kontrolujemy i poruszamy się po

27
00:01:54,560 --> 00:01:55,400
‫świecie.

28
00:01:55,430 --> 00:01:57,410
‫Kliknijmy więc, aby utworzyć klasę.

29
00:01:57,560 --> 00:02:06,470
‫Ok, więc skompilowaliśmy i vs code otworzyło się z naszym nowym plikiem czołgu i mamy też Tank CP.

30
00:02:06,500 --> 00:02:08,210
‫Teraz są całkiem nagie.

31
00:02:08,210 --> 00:02:14,570
‫Tak naprawdę nic tu nie ma, ale chociaż ich nie widzimy, odziedziczyliśmy kilka rzeczy z

32
00:02:14,570 --> 00:02:15,950
‫bazy -- class.

33
00:02:15,950 --> 00:02:19,580
‫Mamy te komponenty, które dodaliśmy do bazy --.

34
00:02:19,580 --> 00:02:23,810
‫Mimo że są to zmienne prywatne, nadal istnieją w tej klasie.

35
00:02:23,810 --> 00:02:29,030
‫Więc teraz, gdy stworzyliśmy naszą klasę czołgów, porozmawiajmy o kilku rzeczach.

36
00:02:29,030 --> 00:02:31,880
‫Czołg będzie potrzebował, czego wieża nie.

37
00:02:31,880 --> 00:02:37,490
‫Cóż, ponieważ zamierzamy kontrolować czołg, będziemy potrzebować sposobu na skupienie się na czołgu, który

38
00:02:37,490 --> 00:02:39,530
‫toczy się przez cały poziom.

39
00:02:39,950 --> 00:02:43,880
‫Na tym zdjęciu jest to element aparatu.

40
00:02:43,880 --> 00:02:47,030
‫To klasa C++ to twój komponent aparatu.

41
00:02:47,180 --> 00:02:55,100
‫Ta czerwona linia nazywa się komponentem ramienia sprężynowego, a jego klasa C++ to komponent ramienia sprężynowego.

42
00:02:55,100 --> 00:03:01,370
‫Dodanie tych elementów do -- pozwala nam oglądać -- z punktu widzenia kamery.

43
00:03:01,370 --> 00:03:07,790
‫A jeśli aparat i jego sprężynowe ramię są przymocowane do -- w jakiś sposób będą podążać za

44
00:03:07,790 --> 00:03:08,930
‫-- dookoła świata.

45
00:03:08,930 --> 00:03:14,540
‫Teraz, wracając do edytora, jeśli wrócimy do naszego folderu -- i otworzymy BP -- tank, możemy

46
00:03:14,540 --> 00:03:16,730
‫kliknąć widok, aby wszystko zobaczyć.

47
00:03:16,730 --> 00:03:22,100
‫Następnie możemy wybrać kompozycję kapsuły i kliknąć dodaj i wybrać ramię sprężyny.

48
00:03:22,100 --> 00:03:24,080
‫To jest element ramienia sprężynowego.

49
00:03:24,080 --> 00:03:25,610
‫Wygląda jak czerwona linia.

50
00:03:25,730 --> 00:03:31,490
‫Teraz, po wybraniu naszego komponentu ramienia sprężynowego, możemy dodać kolejny komponent i wybrać kamerę.

51
00:03:31,490 --> 00:03:37,400
‫Teraz, gdy dodaliśmy kamerę przymocowaną do ramienia sprężynowego, mamy teraz sposób na patrzenie z

52
00:03:37,400 --> 00:03:41,230
‫punktu widzenia kamery, gdy faktycznie zaczniemy kontrolować --.

53
00:03:41,240 --> 00:03:43,040
‫Teraz ramię sprężynowe jest całkiem przydatne.

54
00:03:43,040 --> 00:03:49,250
‫Ma tę docelową długość ramienia i jeśli ją wyregulujesz, zobaczysz, że kamera dostosowuje się wraz z ramieniem

55
00:03:49,250 --> 00:03:49,940
‫sprężynowym.

56
00:03:49,940 --> 00:03:54,470
‫Jest to więc sposób na kontrolowanie odległości kamery od --.

57
00:03:54,470 --> 00:04:00,170
‫Są to więc zdecydowanie rzeczy, których chcemy w naszej klasie --, ale dodamy je

58
00:04:00,170 --> 00:04:04,460
‫od strony C++, a nie tylko tutaj, w planie.

59
00:04:04,460 --> 00:04:05,750
‫Więc zamierzam je usunąć.

60
00:04:05,750 --> 00:04:10,130
‫Więc dla twojego wyzwania chciałbym, żebyś dodał kilka rzeczy do klasy czołgów.

61
00:04:10,130 --> 00:04:15,890
‫Po pierwsze, potrzebujemy komponentu ramienia sprężynowego i komponentu kamery, więc utwórz te zmienne i uczyń

62
00:04:15,890 --> 00:04:16,790
‫je wskaźnikami.

63
00:04:16,790 --> 00:04:21,920
‫Śmiało, stwórz sekcję publiczną i prywatną i umieść te zmienne w sekcji prywatnej.

64
00:04:21,920 --> 00:04:27,590
‫Teraz potrzebujemy, aby były to właściwości U, więc daj im makra właściwości i wypełnij te makra odpowiednimi

65
00:04:27,590 --> 00:04:31,610
‫specyfikatorami w oparciu o to, czego nauczyłeś się w poprzednich wykładach.

66
00:04:31,640 --> 00:04:36,920
‫Teraz, po utworzeniu tych zmiennych, stwórz konstruktor i umieść go w sekcji

67
00:04:36,920 --> 00:04:44,120
‫publicznej i zdefiniuj w pliku CP, a następnie wewnątrz konstruktora skonstruuj nasze komponenty aparatu i ramienia sprężynowego,

68
00:04:44,120 --> 00:04:46,340
‫używając domyślnego obiektu podrzędnego.

69
00:04:46,340 --> 00:04:50,750
‫Upewnij się, że używasz załącznika instalacyjnego, aby dołączyć te komponenty do czegoś.

70
00:04:50,750 --> 00:04:54,380
‫Chcielibyśmy, aby nasz komponent ramienia sprężynowego był dołączony do komponentu głównego.

71
00:04:54,380 --> 00:05:00,500
‫Użyj więc elementu głównego i ustaw mocowanie, a dla kamery przymocuj go do ramienia sprężynowego.

72
00:05:00,500 --> 00:05:02,870
‫Możesz odwołać się z powrotem do klasy podstawowej.

73
00:05:03,020 --> 00:05:05,950
‫Przypomnij sobie, jak wygląda kod, aby wykonać te czynności.

74
00:05:05,960 --> 00:05:09,710
‫Śmiało, zatrzymaj wideo i dodaj te rzeczy do klasy czołgów.

75
00:05:12,580 --> 00:05:13,180
‫W porządku.

76
00:05:13,180 --> 00:05:14,380
‫Więc jesteśmy w Tanku.

77
00:05:15,250 --> 00:05:16,540
‫Teraz pierwsze rzeczy.

78
00:05:16,540 --> 00:05:20,110
‫Chciałbym mieć sekcję publiczną i prywatną.

79
00:05:20,350 --> 00:05:24,840
‫Tak więc sekcja prywatna będzie miejscem, w którym dodamy te dwa nowe komponenty.

80
00:05:24,850 --> 00:05:32,290
‫Będziemy potrzebować komponentu ramienia sprężynowego U, który będzie wskaźnikiem i możemy nazwać to ramię sprężynowe.

81
00:05:32,290 --> 00:05:37,760
‫Będziemy też potrzebować nowego komponentu kamery i nazwiemy tę kamerę.

82
00:05:37,780 --> 00:05:38,260
‫W porządku.

83
00:05:38,260 --> 00:05:39,970
‫Jeśli twoje imiona są nieco inne.

84
00:05:40,090 --> 00:05:45,070
‫Teraz, od razu, widzę tutaj błędy IntelliSense, co oznacza, że będę musiał

85
00:05:45,070 --> 00:05:46,420
‫je zadeklarować.

86
00:05:46,420 --> 00:05:51,280
‫Więc zamierzam używać klasy z ramieniem sprężynowym i klasy z aparatem.

87
00:05:51,280 --> 00:05:53,150
‫A teraz są to zadeklarowane do przodu.

88
00:05:53,170 --> 00:05:55,240
‫Teraz potrzebujemy naszych nowych nieruchomości.

89
00:05:55,240 --> 00:05:57,460
‫Dodajmy więc nowe makra właściwości.

90
00:05:57,970 --> 00:06:02,930
‫A wewnątrz makra właściwości będziemy chcieli mieć pewne specyfikatory.

91
00:06:02,950 --> 00:06:09,550
‫Będą one widoczne w dowolnym miejscu, ponieważ widzieliśmy, że komponenty muszą być widoczne w dowolnym miejscu,

92
00:06:09,550 --> 00:06:13,010
‫abyśmy mogli dostosować ich parametry w panelu szczegółów.

93
00:06:13,030 --> 00:06:18,550
‫Teraz nie widzę żadnej natychmiastowej potrzeby ekspozycji na wykres zdarzeń, więc nie sądzę, że potrzebujemy odczytu,

94
00:06:18,550 --> 00:06:20,600
‫zapisu lub tylko odczytu planu.

95
00:06:20,620 --> 00:06:21,160
‫W porządku.

96
00:06:21,160 --> 00:06:23,770
‫Jeśli je dodałeś, teraz je pominę.

97
00:06:23,770 --> 00:06:25,630
‫Nadaję im kategorię.

98
00:06:26,410 --> 00:06:32,230
‫A ponieważ są to komponenty, zamierzam po prostu umieścić je w naszej kategorii komponentów razem z

99
00:06:32,230 --> 00:06:33,330
‫innymi komponentami.

100
00:06:33,340 --> 00:06:38,470
‫Teraz nie wystawiam ich na wykres zdarzeń, więc nie potrzebuję naszego meta zezwalającego na prywatny dostęp określonego

101
00:06:38,500 --> 00:06:38,940
‫tutaj.

102
00:06:38,950 --> 00:06:45,640
‫Więc to wystarczy na ramię sprężynowe i chciałbym nadać komponentowi kamery tę samą właściwość.

103
00:06:46,180 --> 00:06:47,590
‫Więc kopiuję to.

104
00:06:47,590 --> 00:06:49,270
‫Więc teraz mamy nasze komponenty.

105
00:06:49,420 --> 00:06:54,700
‫Następną rzeczą do zrobienia jest skonstruowanie ich w konstruktorze, co oznacza, że potrzebujemy konstruktora.

106
00:06:54,700 --> 00:07:02,650
‫Teraz konstruktor będzie miał taką samą nazwę jak klasa, więc jest to czołg i musimy zdefiniować ten konstruktor w

107
00:07:02,650 --> 00:07:03,910
‫pliku CP.

108
00:07:03,910 --> 00:07:08,710
‫Przejdźmy więc do Tank CP i stwórzmy czołg.

109
00:07:09,520 --> 00:07:16,180
‫Mamy więc ciało naszej funkcji, a konstruktor zbiornika musi być poprzedzony nazwą naszej klasy i

110
00:07:16,180 --> 00:07:17,710
‫operatorem rozpoznawania zakresu.

111
00:07:17,710 --> 00:07:19,360
‫To są te podwójne dwukropki tutaj.

112
00:07:19,360 --> 00:07:24,850
‫W ten sposób nie tylko tworzymy nową funkcję, ale definiujemy naszego konstruktora dla tej klasy.

113
00:07:24,850 --> 00:07:27,130
‫Teraz chcielibyśmy skonstruować te komponenty.

114
00:07:27,130 --> 00:07:29,530
‫Zacznijmy więc od ramienia sprężynowego.

115
00:07:29,860 --> 00:07:39,160
‫Więc powiemy, że ramię sprężyny równa się utwórz domyślny obiekt podrzędny i będzie to komponent ramienia sprężyny u.

116
00:07:41,260 --> 00:07:45,310
‫A dla tekstu po prostu nazwę tę sprężynę.

117
00:07:46,270 --> 00:07:54,490
‫A dla mocowania ustawimy ramię sprężyny, ustawimy mocowanie, przechodząc w komponent główny.

118
00:07:55,920 --> 00:07:56,220
‫Ale już.

119
00:07:56,220 --> 00:07:57,240
‫Czekałem na to.

120
00:07:57,240 --> 00:07:58,050
‫Tu jest.

121
00:07:58,050 --> 00:08:03,920
‫Błąd IntelliSense mówiący, że wskaźnik do niekompletnego typu klasy używa komponentu ramienia sprężynowego.

122
00:08:03,930 --> 00:08:10,320
‫Dzieje się tak, ponieważ musimy dołączyć plik nagłówkowy, ponieważ tworzymy i używamy komponentu ramienia sprężynowego.

123
00:08:10,320 --> 00:08:16,020
‫Oto moja nierealna dokumentacja silnika i jeśli przewinę w dół, to mój include.

124
00:08:16,020 --> 00:08:21,820
‫Więc zamierzam to skopiować i wkleić tutaj u góry, tuż pod krawędzią zbiornika.

125
00:08:21,900 --> 00:08:26,520
‫Teraz, ogólnie rzecz biorąc, uwaga na marginesie, zamierzasz zachować plik nagłówka klasy zawarty

126
00:08:26,520 --> 00:08:29,370
‫na górze i zawierać elementy pod spodem.

127
00:08:29,370 --> 00:08:30,750
‫Więc mamy nasze ramię sprężyny.

128
00:08:30,750 --> 00:08:32,790
‫Czas skonstruować kamerę.

129
00:08:32,790 --> 00:08:39,300
‫Więc powiemy, że kamera tworzy domyślny obiekt podrzędny, ty komponent kamery.

130
00:08:40,050 --> 00:08:45,240
‫A w makro tekstowym będę nazywał to po prostu aparatem.

131
00:08:45,240 --> 00:08:51,120
‫A dla kamery mam zamiar nazwać przystawkę setup przechodzącą w ramię sprężynowe.

132
00:08:51,390 --> 00:08:54,240
‫I oczywiście potrzebuję pliku nagłówkowego aparatu.

133
00:08:54,240 --> 00:08:59,820
‫Więc tutaj jest nierealna dokumentacja silnika i tutaj, gdzie jest

134
00:08:59,820 --> 00:09:05,490
‫napisane wyszukiwanie dokumentacji, wpiszę ci komponent kamery i tutaj widzę komponent kamery.

135
00:09:05,490 --> 00:09:06,600
‫Wybiorę to.

136
00:09:06,600 --> 00:09:09,450
‫A oto dokumentacja komponentu kamery.

137
00:09:09,450 --> 00:09:14,100
‫Więc skopiuję go, aby dołączyć wklej go tutaj na górze naszego pliku.

138
00:09:14,100 --> 00:09:15,930
‫A teraz powinniśmy być dobrzy.

139
00:09:15,960 --> 00:09:18,630
‫Ok, więc chodźmy dalej i skompilujmy to.

140
00:09:18,810 --> 00:09:19,230
‫Dobra.

141
00:09:19,230 --> 00:09:21,180
‫Więc mam udaną kompilację.

142
00:09:21,210 --> 00:09:24,210
‫Wróćmy do edytora i tu na -- Tank.

143
00:09:24,240 --> 00:09:30,690
‫Oczywiście nic nie widzimy, ponieważ – czołg pochodzi od bazy – a komponenty, które

144
00:09:30,690 --> 00:09:33,510
‫właśnie dodaliśmy, dodaliśmy do klasy czołgów.

145
00:09:33,510 --> 00:09:39,720
‫Więc BP -- tank nie dostanie ich, ponieważ nie wywodzi się z klasy czołgów.

146
00:09:39,720 --> 00:09:44,910
‫Teraz moglibyśmy stworzyć nowy plan w oparciu o klasę czołgu, ale potem musielibyśmy ustawić

147
00:09:44,910 --> 00:09:46,710
‫te komponenty od nowa.

148
00:09:46,710 --> 00:09:50,190
‫I naprawdę nie mam ochoty przechodzić przez całą tę pracę po raz drugi.

149
00:09:50,190 --> 00:09:55,080
‫Jest prostszy sposób na naprawienie tego schematu do klasy czołgu.

150
00:09:55,080 --> 00:10:01,530
‫Robimy to przechodząc do ustawień klasy i w panelu szczegółów z wybranymi ustawieniami klasy, widzimy

151
00:10:01,530 --> 00:10:04,980
‫opcje klasy i jest ta klasa nadrzędna.

152
00:10:04,980 --> 00:10:10,800
‫Lista rozwijana pokazuje, że jest ustawiona na podstawie, ale jeśli ją klikniemy, możemy wyszukać czołg

153
00:10:10,800 --> 00:10:13,200
‫i wybrać czołg jako klasę bazową.

154
00:10:13,200 --> 00:10:17,220
‫A teraz ten schemat pochodzi z klasy czołgu.

155
00:10:17,220 --> 00:10:23,070
‫Widzimy więc, że wszystkie te właściwości, które ustalamy za pomocą naszych komponentów, takich jak siatka i

156
00:10:23,070 --> 00:10:24,630
‫rozmiar kapsułki, nadal istnieją.

157
00:10:24,660 --> 00:10:27,090
‫Dopiero teraz widzimy aparat.

158
00:10:27,390 --> 00:10:29,730
‫W rzeczywistości mamy ramię sprężynowe i aparat.

159
00:10:29,730 --> 00:10:33,720
‫A jeśli teraz wybierzemy sprężynowe ramię, zobaczymy tę czerwoną linię.

160
00:10:33,720 --> 00:10:34,710
‫Więc to jest świetne.

161
00:10:34,710 --> 00:10:38,880
‫Mogłem więc wziąć ten element ramienia sprężyny i zmienić jego docelową długość ramienia.

162
00:10:38,880 --> 00:10:46,650
‫Jeśli mi się podoba, mogę ustawić go na około 600, a nawet zmienić jego obrót, aby skierował kamerę

163
00:10:46,650 --> 00:10:52,770
‫w dół na zbiornik, wybierając tryb obrotu i obracając go nieco w górę.

164
00:10:52,770 --> 00:10:58,500
‫Like Teraz chciałbym zaznaczyć, że nie należy zmieniać lokalizacji kamery.

165
00:10:58,530 --> 00:11:03,990
‫Kuszące może być wybranie kamery i poruszanie nią po świecie, aby ustawić ją i ustawić

166
00:11:03,990 --> 00:11:05,190
‫pod odpowiednim kątem.

167
00:11:05,190 --> 00:11:07,350
‫Ale to nie jest właściwy sposób.

168
00:11:07,350 --> 00:11:13,410
‫Prawidłowym sposobem jest ustawienie obrotu i docelowej długości ramienia elementu ramienia sprężyny.

169
00:11:13,410 --> 00:11:17,790
‫Powodem jest to, że chcesz, aby kamera była przymocowana do końca ramienia sprężynowego.

170
00:11:17,790 --> 00:11:23,460
‫Ramię sprężynowe ma wiele różnych wbudowanych funkcji, takich jak kurczenie się, gdy kamera

171
00:11:23,460 --> 00:11:29,430
‫uderza o ścianę, aby uniknąć przeszkód, blokowanie widoku na staw i inne tego typu rzeczy.

172
00:11:29,430 --> 00:11:35,070
‫Więc będziesz chciał, aby kamera była przymocowana do końca ramienia sprężynowego, a

173
00:11:35,070 --> 00:11:39,990
‫następnie wyreguluj ramię sprężynowe, zamiast regulować pozycję i obrót kamery.

174
00:11:40,110 --> 00:11:47,070
‫Tak więc w tym filmie stworzyliśmy klasę zbiornika i wyprowadziliśmy ze stawu podstawowego, aby odziedziczyć te cechy

175
00:11:47,070 --> 00:11:48,960
‫z klasy stawu podstawowego.

176
00:11:49,140 --> 00:11:56,100
‫Dodaliśmy komponent ramienia sprężynowego i komponent kamery i udostępniliśmy je edytorowi za pomocą opcji Tylko widoczne i

177
00:11:56,100 --> 00:11:58,500
‫umieściliśmy je w osobnej kategorii.

178
00:11:58,500 --> 00:12:03,900
‫Zbliżamy się więc krok po kroku do gotowego produktu i będziemy kontynuować rozwój tego zbiornika

179
00:12:03,900 --> 00:12:05,130
‫w następnym wykładzie.

180
00:12:05,460 --> 00:12:06,510
‫Zobaczymy się wkrótce.

