1 00:00:00,000 --> 00:00:05,069 2 00:00:05,069 --> 00:00:06,110 THOMAS Lively: Dobre. 3 00:00:06,110 --> 00:00:07,450 Ahojte všetci. 4 00:00:07,450 --> 00:00:08,690 Ja som Thomas Lively. 5 00:00:08,690 --> 00:00:15,160 Tento seminár je bude písanie 2D hier v jazyku C pomocou SDL. 6 00:00:15,160 --> 00:00:17,970 Takže viem, že ste všetci pýta, jo, naozaj 7 00:00:17,970 --> 00:00:22,050 chcete hrať hry a robiť hry, ale to, čo je tento obchodný SDL? 8 00:00:22,050 --> 00:00:25,320 Takže SDL je knižnica C. 9 00:00:25,320 --> 00:00:28,270 To je skratka pre Simple Directmedia Layer. 10 00:00:28,270 --> 00:00:31,340 A to je multiplatformový, Hra vývojová knižnica. 11 00:00:31,340 --> 00:00:37,160 Pracuje na Windows, Mac, Linux, aj iOS a Android. 12 00:00:37,160 --> 00:00:40,380 To sa zaoberá veci ako prístup k audio systémy 13 00:00:40,380 --> 00:00:44,900 pre počítače, klávesnice, a myš, joysticky, keď sú pripojené. 14 00:00:44,900 --> 00:00:48,300 Na mobil, môžete to dokonca urobiť dotykové ovládanie a všetko. 15 00:00:48,300 --> 00:00:53,030 A samozrejme, to zvláda grafiku, kreslenie veci na obrazovku. 16 00:00:53,030 --> 00:00:56,470 >> Tak to je veľmi široko používaný, hoci nemusí mať predtým nepočul. 17 00:00:56,470 --> 00:01:00,860 Je vstavaný do, napríklad, Source Engine ventilu, 18 00:01:00,860 --> 00:01:04,970 ktorý napája hry ako Portal a Team Fortress 2. 19 00:01:04,970 --> 00:01:08,680 Je to tiež vo veľmi veľkom počte indie hier, ktoré vyjdú, 20 00:01:08,680 --> 00:01:13,545 takže som nadšený, že vidieť to, čo všetko bude robiť s ňou. 21 00:01:13,545 --> 00:01:20,000 >> Seminár cieľom je, aby vám stanovené, že je rozvíjať spolu s SDL. 22 00:01:20,000 --> 00:01:22,700 Chystáme sa učiť, ako pre vytvorenie okna hry. 23 00:01:22,700 --> 00:01:26,130 Budeme vytvárať škriatkov, čo sú obrazy vo vašej hre 24 00:01:26,130 --> 00:01:27,744 ktoré sa môžu pohybovať okolo. 25 00:01:27,744 --> 00:01:29,910 Chystáme sa učiť, ako k a animovať škriatkov, 26 00:01:29,910 --> 00:01:32,910 tak pohybovať okolo nich, aby ako sa mení v priebehu času. 27 00:01:32,910 --> 00:01:35,580 A budeme sa učiť, ako zachytiť klávesnice a myši 28 00:01:35,580 --> 00:01:38,240 Vstup z počítača. 29 00:01:38,240 --> 00:01:41,550 To, čo nebudeme hovoriť o dnes je 3D grafika, 30 00:01:41,550 --> 00:01:45,520 pretože to je veľmi komplikovaná s výhradou, že nemáme čas. 31 00:01:45,520 --> 00:01:49,010 Nebudeme učiť, ako sa prehrávanie zvuku na našich hier. 32 00:01:49,010 --> 00:01:53,300 A nebudeme stavať na nič iné ako Linux. 33 00:01:53,300 --> 00:01:58,330 >> Teraz tam sú námietky, ktoré, dúfajme, že na konci seminára 34 00:01:58,330 --> 00:02:01,660 budete spokojní s dokumentácie SDL, 35 00:02:01,660 --> 00:02:05,370 takže budete môcť ísť prísť na to, ako hrať zvuk pre seba. 36 00:02:05,370 --> 00:02:12,150 Tiež stavebné pre Mac alebo PC by mal fungovať presne rovnaký ako stavebný pre Linux, 37 00:02:12,150 --> 00:02:14,700 ale jeho nastavenie to bude byť trochu inak. 38 00:02:14,700 --> 00:02:17,700 Takže by ste mali byť schopní prísť na to, ako tieto veci robiť 39 00:02:17,700 --> 00:02:20,900 na konci dnešného seminára. 40 00:02:20,900 --> 00:02:26,980 >> Takže pre nastavenie, ideme používať virtuálny stroj. 41 00:02:26,980 --> 00:02:31,010 Radi by sme použiť CS50 IDE, pretože sme len bude písať v jazyku C. 42 00:02:31,010 --> 00:02:35,120 Ale pretože IDE nie je prehliadač, my Nemôžete vytvárať nové okná alebo zobraziť 43 00:02:35,120 --> 00:02:36,410 grafika v ňom. 44 00:02:36,410 --> 00:02:38,450 Takže potrebujeme virtuálny stroj. 45 00:02:38,450 --> 00:02:47,790 Takže môžete postupovať podľa pokynov tu na manual.CS50.net/appliance/15~~pobj 46 00:02:47,790 --> 00:02:53,290 nainštalovať oficiálne CS50 spotrebiče, čo je iba Linux virtuálny 47 00:02:53,290 --> 00:02:55,110 stroj. 48 00:02:55,110 --> 00:02:58,090 >> A potom, až budete mať že všetko nastavené up-- tom 49 00:02:58,090 --> 00:03:02,090 môže chvíľu trvať, pretože veľmi veľký download-- idete 50 00:03:02,090 --> 00:03:07,060 bežať na VM sudo apt-get. 51 00:03:07,060 --> 00:03:09,410 A to sa naozaj deje aktualizovať všetok softvér 52 00:03:09,410 --> 00:03:12,670 balíčky na vašom virtuálnom stroji. 53 00:03:12,670 --> 00:03:20,130 >> Za to, že budete spúšťať sudo apt-get install, libsdl2-2.0-0, 54 00:03:20,130 --> 00:03:27,960 libsdl2-DBG, libsdl2-dev, a dodatočne libsdl2-image-2,0-0, 55 00:03:27,960 --> 00:03:32,560 libsdl2-image-DBG, a libsdl2-image-dev. 56 00:03:32,560 --> 00:03:33,640 Tak čo to robí? 57 00:03:33,640 --> 00:03:38,440 To len nainštaluje ladenie Informácie, dokumentácia, hlavičky, 58 00:03:38,440 --> 00:03:41,260 a binárne súbory pre dve knižnice. 59 00:03:41,260 --> 00:03:45,090 Pravidelné starý, SDL 2.0, a ďalšie knižnice 60 00:03:45,090 --> 00:03:50,110 volal SDL obrazu, ktorý budeme používať 61 00:03:50,110 --> 00:03:54,560 načítať obrazové súbory do našej hry. 62 00:03:54,560 --> 00:03:57,860 >> Takže až budete mať, že tiež že práve vtedy, keď sa spýta, 63 00:03:57,860 --> 00:04:01,100 stačí zadať áno, stlačíte Enter nainštalovať tieto balíčky, 64 00:04:01,100 --> 00:04:04,430 a potom by ste mali byť dobré ísť. 65 00:04:04,430 --> 00:04:14,800 Takže ak chceme získať distribučné kód, can-- ach bože, to nie je aktualizovaný. 66 00:04:14,800 --> 00:04:18,480 Ak máte GitHub account-- ak máte účet GitHub, 67 00:04:18,480 --> 00:04:24,450 môžete urobiť tento Git klon príkaz repo 68 00:04:24,450 --> 00:04:30,490 a že stiahne Git repo všetky kód v ňom, 69 00:04:30,490 --> 00:04:31,700 takže budete mať kód. 70 00:04:31,700 --> 00:04:36,470 >> Ak nemáte GitHub účet, čo by ste mali urobiť, je typ 71 00:04:36,470 --> 00:04:48,867 wgithttps: //github.com/tlively/sdl seminar-- a tu je to different-- 72 00:04:48,867 --> 00:04:49,700 /archive/master.zip. 73 00:04:49,700 --> 00:04:55,610 74 00:04:55,610 --> 00:04:59,220 Takže znova, že je to ten istý URL, okrem toho to bude 75 00:04:59,220 --> 00:05:09,010 tlively / SDL_seminar / master.zip a používate wgit na prevzatie, že. 76 00:05:09,010 --> 00:05:12,940 A potom môžete len rozbaliť daný archív 77 00:05:12,940 --> 00:05:14,900 a potom budete mať celý zdrojový kód. 78 00:05:14,900 --> 00:05:17,580 A tak ľúto. 79 00:05:17,580 --> 00:05:23,880 A potom kód bude tiež hostil na webových stránkach CS50 semináre v páre 80 00:05:23,880 --> 00:05:25,230 dni. 81 00:05:25,230 --> 00:05:26,590 >> Dobre. 82 00:05:26,590 --> 00:05:29,932 Tak ako začneme písať svoju vlastnú hru? 83 00:05:29,932 --> 00:05:31,890 No, prvá vec, budeme chcieť robiť 84 00:05:31,890 --> 00:05:34,740 je pozrieť na SDL dokumentáciu. 85 00:05:34,740 --> 00:05:37,020 Tak tu je VM. 86 00:05:37,020 --> 00:05:38,720 A tu je webová stránka. 87 00:05:38,720 --> 00:05:40,340 Ja som navigoval žiť libsdl.org. 88 00:05:40,340 --> 00:05:43,110 89 00:05:43,110 --> 00:05:48,140 To, čo budem robiť, je tu ísť cez na bočnom paneli, pod dokumentácie, 90 00:05:48,140 --> 00:05:51,040 a kliknite na wiki. 91 00:05:51,040 --> 00:05:56,870 To mi prinesie na wiki, že má väčšinu dokumentácie pre SDL. 92 00:05:56,870 --> 00:06:01,360 Cez na bočnom paneli tu, my sme bude kliknite API podľa kategórie, 93 00:06:01,360 --> 00:06:04,300 preto, že sa chystá dať nám pekný pohľad kategorický 94 00:06:04,300 --> 00:06:07,770 celého API pre SDL. 95 00:06:07,770 --> 00:06:12,390 >> Tak napríklad, máme základná inicializácia 96 00:06:12,390 --> 00:06:18,380 a vypnúť, všetky druh administratívne veci pre používanie SDL, 97 00:06:18,380 --> 00:06:21,630 a potom máme sekcii zobrazovanie veci na obrazovku. 98 00:06:21,630 --> 00:06:23,000 To videa. 99 00:06:23,000 --> 00:06:25,790 Vstupné udalosti, to je ako vstup z klávesnice, 100 00:06:25,790 --> 00:06:29,710 dostať vstup z myši, a joystick, pokiaľ ju mať ešte. 101 00:06:29,710 --> 00:06:32,901 Tam je sila, spätná väzba pre veci ako herných ovládačov, ktoré 102 00:06:32,901 --> 00:06:34,150 nebudeme hovoriť. 103 00:06:34,150 --> 00:06:35,630 A tu je zvuk. 104 00:06:35,630 --> 00:06:38,940 A potom je tu veľa ďalších veci, ktoré SDL môže urobiť pre vás. 105 00:06:38,940 --> 00:06:43,830 >> Ale dnes budeme sústrediť na inicializáciu tu, 106 00:06:43,830 --> 00:06:48,332 zobrazenie obrázkov vo videu sekciu, a manipulácia vstupné udalosti. 107 00:06:48,332 --> 00:06:50,290 Tak to sú hlavné úseky dokumentácia 108 00:06:50,290 --> 00:06:53,050 že by ste mali robiť starosti. 109 00:06:53,050 --> 00:06:57,170 Len tak pre zábavu, keď pôjdeme cez tu a kliknite na API podľa mena, 110 00:06:57,170 --> 00:07:04,350 môžeme vidieť zoznam každý jediná vec v SDL knižnici. 111 00:07:04,350 --> 00:07:11,330 Takže všetky tieto funkcie, popísané v odsekoch, štruktúry, šialený množstvo vecí, 112 00:07:11,330 --> 00:07:12,820 abecedné poradie. 113 00:07:12,820 --> 00:07:14,580 A jasne, kým viete, čo robíte, 114 00:07:14,580 --> 00:07:19,100 to nebude príliš užitočná, čo je dôvod, prečo robíme API podľa kategórie. 115 00:07:19,100 --> 00:07:20,810 >> Tak poďme začať. 116 00:07:20,810 --> 00:07:25,680 Dúfajme, že ste už stiahli distribučné kód. 117 00:07:25,680 --> 00:07:30,070 A tak to, čo môžete urobiť, je, že jo tu v CS50 spotrebiče, 118 00:07:30,070 --> 00:07:31,150 jednoducho otvoríte terminál. 119 00:07:31,150 --> 00:07:33,750 120 00:07:33,750 --> 00:07:34,440 Ideme na to. 121 00:07:34,440 --> 00:07:40,740 Takže som už stiahli Distribúcia kódu pomocou ZIP 122 00:07:40,740 --> 00:07:41,690 metóda. 123 00:07:41,690 --> 00:07:43,140 A ja som rozopol ho. 124 00:07:43,140 --> 00:07:46,120 Tak tu to je v SDL seminári majstra. 125 00:07:46,120 --> 00:07:49,750 Takže ja idem do tohto adresára. 126 00:07:49,750 --> 00:07:55,310 A to, čo vidíme, je tu že máme sedem C súbory. 127 00:07:55,310 --> 00:07:58,070 A to bude kódom budeme sa pozerať na dnešok. 128 00:07:58,070 --> 00:08:00,040 Máme Makefile. 129 00:08:00,040 --> 00:08:06,950 A máme adresár zdrojov, ktorá má proste obraz 130 00:08:06,950 --> 00:08:09,070 že budete vidieť čoskoro. 131 00:08:09,070 --> 00:08:16,060 >> Takže poďme otvoriť tieto súbory pomocou G-Edit editora. 132 00:08:16,060 --> 00:08:22,000 Tak som chcel otvoriť všetky súbory, ktoré začínajú ahoj a končí s .c. 133 00:08:22,000 --> 00:08:23,380 Ideme na to. 134 00:08:23,380 --> 00:08:28,180 Tak to je malá okná, tak sme bude sa snažiť, aby to väčšie. 135 00:08:28,180 --> 00:08:28,900 Nie, to išlo preč. 136 00:08:28,900 --> 00:08:32,836 137 00:08:32,836 --> 00:08:34,570 >> Dobre. 138 00:08:34,570 --> 00:08:37,959 Tak tu je to úplne prvý Súbor sa budeme pozerať. 139 00:08:37,959 --> 00:08:39,000 Hovorí sa tomu hello1_sdl.c. 140 00:08:39,000 --> 00:08:41,890 141 00:08:41,890 --> 00:08:47,980 A to všetko robí, je inicializovať SDL knižnica, takže môžeme začať používať. 142 00:08:47,980 --> 00:08:51,550 Ako by ste vedieť prísť up s týmto kódom seba? 143 00:08:51,550 --> 00:08:53,850 No, ak sa pozrieme viac ako na dokumentáciu 144 00:08:53,850 --> 00:08:58,040 a ideme do inicializácia a vypnúť sekcie, 145 00:08:58,040 --> 00:09:02,230 to nás všetkých oznámiť o tom, ako inicializovať SDL. 146 00:09:02,230 --> 00:09:06,630 Takže určite si prečítajte tento inokedy. 147 00:09:06,630 --> 00:09:09,230 Je ti to povedať všetkým o tom, čo sa tu deje. 148 00:09:09,230 --> 00:09:14,360 Ale hlavná podstata veci je, že musíme túto funkciu volať SDL v It 149 00:09:14,360 --> 00:09:18,910 a odovzdať ju aké druhy vecí chceme, aby knižnica inicializovať. 150 00:09:18,910 --> 00:09:23,620 Takže v našom prípade, budeme len tak inicializovať video pre teraz, 151 00:09:23,620 --> 00:09:26,690 takže môžeme začať zobrazovať obraz. 152 00:09:26,690 --> 00:09:32,370 >> Tu môžete vidieť, či klikneme na SDL v ňom, sme 153 00:09:32,370 --> 00:09:36,160 môžu získať ešte viac informácií, vrátane návratovú hodnotu. 154 00:09:36,160 --> 00:09:39,050 Takže tu vidíme, že to returnes nulu na úspech. 155 00:09:39,050 --> 00:09:43,320 Takže v našom kódu, budeme uvidíme, či to nevráti nulu, 156 00:09:43,320 --> 00:09:47,020 a ak sa nevráti nula, takže to nebolo úspešné, 157 00:09:47,020 --> 00:09:50,650 potom budeme jednoducho vytlačiť chyba pomocou tejto ďalšie funkcie, 158 00:09:50,650 --> 00:09:56,260 SDL chyba get, ktorý vráti reťazec popisujúci chybu, ktorá nastala. 159 00:09:56,260 --> 00:09:58,510 Budeme tlači, že chyba a potom sme len 160 00:09:58,510 --> 00:10:02,270 chystá ukončiť program s chybovým kódom. 161 00:10:02,270 --> 00:10:06,470 >> Potom ďalšiu vec, ktorú potrebujeme urobiť, je, ako program ukončí, 162 00:10:06,470 --> 00:10:10,830 ak budeme úspešne inicializovaný SDL, len je potrebné ju SDL prestať volať. 163 00:10:10,830 --> 00:10:15,750 A že to bude zvládnuť čistenie všetky vnútorných zdrojov SDL pre nás. 164 00:10:15,750 --> 00:10:21,240 Takže dokumentácie there-- znovu, Tu sme v inicializácii 165 00:10:21,240 --> 00:10:23,640 a vypnúť sekcie dokumentácie. 166 00:10:23,640 --> 00:10:26,680 Stačí si len kliknúť na tlačidlo tu funkcie, SDL skončiť, 167 00:10:26,680 --> 00:10:28,700 a môžete prečítať všetko o tom rovnako. 168 00:10:28,700 --> 00:10:31,400 A mnoho z týchto funkcií dokumentácia stránky 169 00:10:31,400 --> 00:10:35,630 majú príklad kódu, takže to je veľmi dobrý zdroj. 170 00:10:35,630 --> 00:10:39,610 Rozhodne stráviť nejaký čas čítanie častí tejto wiki 171 00:10:39,610 --> 00:10:42,520 ak sa chystáte robiť to pre projekt. 172 00:10:42,520 --> 00:10:43,760 >> Dobre. 173 00:10:43,760 --> 00:10:46,590 Takže to je celý náš program. 174 00:10:46,590 --> 00:10:53,935 Čo môžeme robiť teraz je-- Som chystá otvoriť Makefile tu, 175 00:10:53,935 --> 00:10:56,150 takže budem trvať pozrite sa, ako to funguje. 176 00:10:56,150 --> 00:10:59,500 A je to veľmi jednoduché Makefile, podobné tomu, čo ste videli skôr. 177 00:10:59,500 --> 00:11:04,010 Jedným z hlavných rozdielov je to, že tu je toto 178 00:11:04,010 --> 00:11:07,870 sa chystá vložiť výsledok behu Tento príkaz, ktorý ste už 179 00:11:07,870 --> 00:11:10,850 nainštalované, ak ste nainštalovali SDL. 180 00:11:10,850 --> 00:11:13,230 A to je príkaz že to bude generovať 181 00:11:13,230 --> 00:11:16,710 niektoré ďalšie príznaky pre kompilátor. 182 00:11:16,710 --> 00:11:22,050 >> Okrem toho, že sme dávať to všetky obvyklé príkazy, ako aj 183 00:11:22,050 --> 00:11:23,430 Tieto dva príkazy. 184 00:11:23,430 --> 00:11:30,270 Takže sa -lsdl2-image rukoväte spájajúca v SDL obrazu knižnice. 185 00:11:30,270 --> 00:11:36,200 A -lm skutočne spracováva prepojenie v štandardnej matematickej knižnici C. 186 00:11:36,200 --> 00:11:40,630 Takže nebudeme potrebovať tie, pre všetky naše C súborov, 187 00:11:40,630 --> 00:11:43,900 ale my sme jednoducho dať je v tom, že môžeme použiť rovnaký Makefile pre všetko 188 00:11:43,900 --> 00:11:44,816 bez úprav. 189 00:11:44,816 --> 00:11:46,970 190 00:11:46,970 --> 00:11:50,080 >> Tu v zdrojoch, to je miesto, kde by ste 191 00:11:50,080 --> 00:11:53,680 umiestniť súbory, ktoré si chcel zostaviť pre váš projekt. 192 00:11:53,680 --> 00:11:57,570 Ale pretože každý jeden z mojich C súbory tu má hlavnú funkciu, 193 00:11:57,570 --> 00:12:00,000 to bude zmätený Dáme ak ich všetky do. 194 00:12:00,000 --> 00:12:06,930 Takže budem len povedať, teraz, hello1_sdl.c, 195 00:12:06,930 --> 00:12:11,150 čo je tá, ktorú sme práve pozrel na. 196 00:12:11,150 --> 00:12:18,740 Takže keď som sa vrátiť nad tu, môžem robiť, aby. 197 00:12:18,740 --> 00:12:22,160 A to, čo urobil, je to len zostavil, že prvý súbor. 198 00:12:22,160 --> 00:12:28,780 A potom môžeme písať ./game, pretože je to spustiteľný to produkovalo. 199 00:12:28,780 --> 00:12:31,660 A všetko to urobil, bolo pre tlač inicializácia úspešné. 200 00:12:31,660 --> 00:12:33,300 A tak sme urobili niečo správne. 201 00:12:33,300 --> 00:12:36,200 Ale to bolo trochu nudné, pretože sme nemali vidieť okno, 202 00:12:36,200 --> 00:12:37,900 Nič sa pohybovala okolo. 203 00:12:37,900 --> 00:12:41,030 >> Tak veľký, máme SDL inicializácii. 204 00:12:41,030 --> 00:12:43,520 Teraz, poďme prejsť na niečo trochu zaujímavejšie. 205 00:12:43,520 --> 00:12:54,700 Takže tu máme hello2_window.c, a to bude o niečo 206 00:12:54,700 --> 00:13:00,010 komplexný C program, ktorý inicializuje SDL, rovnako ako predtým, 207 00:13:00,010 --> 00:13:04,250 s výnimkou teraz sme tiež bude inicializovať SDL časovač. 208 00:13:04,250 --> 00:13:07,720 A to nás bude nechať prístup do interného časovača 209 00:13:07,720 --> 00:13:10,550 a používať funkcie spojené s časom. 210 00:13:10,550 --> 00:13:11,920 >> A potom sa poďme pozrieť tu dole. 211 00:13:11,920 --> 00:13:16,840 Čo robíme, je, máme túto ukazovateľ k SDL okná struct, ktorý 212 00:13:16,840 --> 00:13:21,160 sa bude vytvorená v tejto výzve k funkcii, SDL vytvoriť okno. 213 00:13:21,160 --> 00:13:25,380 Teraz, to trvá veľa argumentov, takže poďme pozrieť na dokumentáciu. 214 00:13:25,380 --> 00:13:27,930 Takže znovu, budem API podľa kategórie, ja som 215 00:13:27,930 --> 00:13:33,820 ísť dole na video tu, a prvé Sekcia, zobrazovanie správu okien. 216 00:13:33,820 --> 00:13:36,470 Takže táto časť má tony vecí v ňom, 217 00:13:36,470 --> 00:13:39,970 ale keď sa pozriete do tieto funkcie, budete 218 00:13:39,970 --> 00:13:43,620 vidieť, že pravdepodobne tá, ktorú sme Chcete sa nazýva SDL vytvoriť okno, 219 00:13:43,620 --> 00:13:46,600 ktorý sa stane byť priamo na vrchole. 220 00:13:46,600 --> 00:13:49,080 >> A tak to je Dokumentácie pre túto funkciu. 221 00:13:49,080 --> 00:13:53,710 Okno to bude mať titul, X a Y pozície na obrazovke, 222 00:13:53,710 --> 00:13:56,960 bude to mať šírku, výšku, a potom to bude trvať nejaké vlajky. 223 00:13:56,960 --> 00:14:01,220 A teraz, nemáme vlastne starať o niektoré z týchto príznakov práve teraz, 224 00:14:01,220 --> 00:14:04,560 ale ak by ste chceli niečo urobiť ako je make okno cez celú obrazovku, 225 00:14:04,560 --> 00:14:07,920 môžete sa pozrieť na to. 226 00:14:07,920 --> 00:14:13,190 Zatiaľ sme len tak používať tieto špeciálne hodnoty, 227 00:14:13,190 --> 00:14:18,775 SDL okno a v stredu pre x a y, aby 228 00:14:18,775 --> 00:14:21,800 len vytvoriť okno v strede našej obrazovky. 229 00:14:21,800 --> 00:14:24,370 >> Tak to je to, čo to robí. 230 00:14:24,370 --> 00:14:27,960 A ak je okno sa stane byť null, čo znamená, že je chyba, 231 00:14:27,960 --> 00:14:32,570 potom zase budeme len tak vytlačiť chybu pomocou SDL chyba get. 232 00:14:32,570 --> 00:14:36,570 A potom preto, že sme inicializácii SDL, teraz musíme zatvoriť. 233 00:14:36,570 --> 00:14:40,900 Takže hovoríme SDL skončiť pred vrátenie jeden pre hlavné. 234 00:14:40,900 --> 00:14:42,905 >> Takže máme toto okno otvorené nádejne. 235 00:14:42,905 --> 00:14:44,613 A čo budeme urobiť, je ideme 236 00:14:44,613 --> 00:14:50,340 volať SDL pre 5000 milisekúnd, ktorý je rovnaký, ako piatich sekúnd. 237 00:14:50,340 --> 00:14:55,640 A keď sme skončili s tým, to bude zničiť okná, 238 00:14:55,640 --> 00:14:59,470 upratať knižnicu SDL, a ukončite program. 239 00:14:59,470 --> 00:15:05,240 Tak poďme do toho pustite a dajte že strele. 240 00:15:05,240 --> 00:15:08,660 >> Takže teraz namiesto zmeny Makefile zakaždým, 241 00:15:08,660 --> 00:15:12,180 Ja si jednoducho urobiť, a potom na príkazovom riadku, 242 00:15:12,180 --> 00:15:16,090 hovoria zdrojov rovnal a potom Súbor sme kompiláciu. 243 00:15:16,090 --> 00:15:17,090 Takže je to hello2_window.c. 244 00:15:17,090 --> 00:15:21,390 245 00:15:21,390 --> 00:15:21,890 Fantastický. 246 00:15:21,890 --> 00:15:22,970 Žiadne erros. 247 00:15:22,970 --> 00:15:26,085 Teraz, keď sme sa spustiť našu spustiteľný súbor, vidíme toto okno. 248 00:15:26,085 --> 00:15:27,960 Teraz existuje niekoľko problémy s oknom. 249 00:15:27,960 --> 00:15:32,820 My ho môžete pohybovať, ale má Toto pozadie junk vnútri nej. 250 00:15:32,820 --> 00:15:34,660 Takže sme sa vypracovali nič, a tak je to 251 00:15:34,660 --> 00:15:38,210 len plné odpadkov, ktoré je presne to, čo očakávame. 252 00:15:38,210 --> 00:15:41,010 >> Ďalej, nemôžeme zavrieť okno. 253 00:15:41,010 --> 00:15:44,780 Som stlačení tohto X v roh a nič sa deje. 254 00:15:44,780 --> 00:15:47,840 Tak uvidíme, ako to opraviť že v trochu. 255 00:15:47,840 --> 00:15:51,750 Takže poďme napraviť časti, kde je Okno je plná odpadkov ako prvý. 256 00:15:51,750 --> 00:16:00,850 Takže ak by sme prejsť na hello3_image.c, čo vidíme, je, že sme pridali pár 257 00:16:00,850 --> 00:16:03,360 viac vecí tu. 258 00:16:03,360 --> 00:16:08,740 Pridali sme túto novú hlavičku súbor získať funkcie časovača. 259 00:16:08,740 --> 00:16:11,490 Myslím, že sme urobili v poslednej človek, moc, a ja som sa o ňom zmieniť. 260 00:16:11,490 --> 00:16:13,550 Ale teraz, pretože sme práca s obrázkami, 261 00:16:13,550 --> 00:16:18,720 musíme zahrnúť SDL image hlavičky súboru rovnako. 262 00:16:18,720 --> 00:16:22,087 Takže je to to isté, ako predtým, inicializácia SDL tu, 263 00:16:22,087 --> 00:16:23,420 To isté sa zaoberá vytváranie okien. 264 00:16:23,420 --> 00:16:25,380 Videli sme, že už skôr. 265 00:16:25,380 --> 00:16:29,870 >> Teraz musíme vytvoriť niečo ako renderer, ktorý druh ide spolu 266 00:16:29,870 --> 00:16:30,800 s oknom. 267 00:16:30,800 --> 00:16:33,860 Ale je to akási abstraktné objekt, to je 268 00:16:33,860 --> 00:16:37,370 na starosti robiť všetky tieto kreslenie operácie k oknu. 269 00:16:37,370 --> 00:16:41,580 A to skutočne zodpovedá na program načítaný 270 00:16:41,580 --> 00:16:47,880 do grafického hardvéru vášho počítač alebo telefón alebo čokoľvek iného. 271 00:16:47,880 --> 00:16:51,005 Takže vlajky chceme prejsť to-- a môžete sa pozrieť na dokumentáciu 272 00:16:51,005 --> 00:16:56,160 získať viac podrobností here-- sa deje , Ktoré majú byť SDL činí urýchlený, ktorý 273 00:16:56,160 --> 00:16:58,550 znamená, že to bude pomocou grafického hardvéru 274 00:16:58,550 --> 00:17:01,490 a to nielen emulovaného v softvéri. 275 00:17:01,490 --> 00:17:07,390 >> A budeme používať SDL Renderer PRESENTVSYNC. 276 00:17:07,390 --> 00:17:12,280 Vsync je vec, ktorá jednoducho robí vaša grafická vyzerajú lepšie a zabraňuje 277 00:17:12,280 --> 00:17:14,970 to, čomu sa hovorí obrazovka teror, kde polovica 278 00:17:14,970 --> 00:17:17,720 jedného rámu a polovice budúceho frame vykresliť zároveň 279 00:17:17,720 --> 00:17:20,056 a vyzerá to hrozne. 280 00:17:20,056 --> 00:17:23,130 Ale opäť, môžete ísť čítať o tom na vlastnú päsť. 281 00:17:23,130 --> 00:17:24,319 >> Takže máme nejaké vlajky tu. 282 00:17:24,319 --> 00:17:27,810 A tak sme len tak zavolať Táto funkcia SDL vytvoriť renderer. 283 00:17:27,810 --> 00:17:31,340 Chystáme sa dať okno spájať s týmto renderer. 284 00:17:31,340 --> 00:17:34,520 Negatívny jedným zo spôsobov, nás nezaujíma, čo grafický ovládač budeme používať. 285 00:17:34,520 --> 00:17:36,603 Tak, že by do značnej miery vždy negatívne, 286 00:17:36,603 --> 00:17:39,010 ak neviete, o grafických ovládačov. 287 00:17:39,010 --> 00:17:41,650 A potom sme to len tak odovzdať jej svoje vlajky. 288 00:17:41,650 --> 00:17:47,240 Takže ak, ktorý vracia null, potom sme do tlače chybu ako obvykle, 289 00:17:47,240 --> 00:17:49,550 ale potom sme to tiež bude zničiť okno 290 00:17:49,550 --> 00:17:54,970 upratať týchto zdrojov pred volať SDL ukončiť a návratu. 291 00:17:54,970 --> 00:17:58,110 >> Teraz, zaujímavá časť tu je miesto, kde sme nahrať náš obraz 292 00:17:58,110 --> 00:18:00,870 Pomocou tejto funkcie IMG_load. 293 00:18:00,870 --> 00:18:04,050 To je jediná funkcia ideme použiť z SDL obrazu knižnice. 294 00:18:04,050 --> 00:18:05,480 Je to jediný, čo potrebujeme. 295 00:18:05,480 --> 00:18:12,950 Je to funkcia, ktorá zoberie reťazec že je cesta každého obrazu zdroja. 296 00:18:12,950 --> 00:18:18,024 A to môže byť PNG, GIF, bitmapa, žiadne z týchto vecí. 297 00:18:18,024 --> 00:18:19,690 A to je dôvod, prečo je táto funkcia tak pekné. 298 00:18:19,690 --> 00:18:22,560 To zvládne prakticky akýkoľvek formát. 299 00:18:22,560 --> 00:18:27,240 Načíta do pamäte a uloží ho ako vec nazýva SDL povrch. 300 00:18:27,240 --> 00:18:34,660 >> Teraz SDL povrch je iba struct ktorý predstavuje obrazové dáta do pamäte. 301 00:18:34,660 --> 00:18:38,054 Takže si môžete prečítať viac o že v dokumentácii dve. 302 00:18:38,054 --> 00:18:40,720 A ak to chyby, potom sme robiť celú vec tam, kde je 303 00:18:40,720 --> 00:18:44,480 tlačíme chybu, zatvárame zdroje, a potom ukončite program. 304 00:18:44,480 --> 00:18:48,970 Teraz je zaujímavá vec je, pred môžeme čerpať tento obraz do okna, 305 00:18:48,970 --> 00:18:51,390 musíme skutočne urobiť to textúru. 306 00:18:51,390 --> 00:18:54,460 Teraz textúry zodpovedá do obrazových dát načítaných 307 00:18:54,460 --> 00:18:57,820 do pamäte hardvéru grafického to je. 308 00:18:57,820 --> 00:19:00,720 >> Takže povrch je v hlavnom pamäť, pravidelné pamäť 309 00:19:00,720 --> 00:19:05,550 že sme boli s využitím všetkých semester, a štruktúra je v tomto samostatnom VRAM 310 00:19:05,550 --> 00:19:09,410 pamäti, že kontroly grafickej karty. 311 00:19:09,410 --> 00:19:13,170 Preto nazývame túto funkciu SDL_CreateTextureFromSurface. 312 00:19:13,170 --> 00:19:17,104 Dávame mu našu renderer a naši povrch. 313 00:19:17,104 --> 00:19:19,020 A potom sme vlastne vykonané s povrchom, 314 00:19:19,020 --> 00:19:20,311 tak sme len tak ju oslobodiť. 315 00:19:20,311 --> 00:19:22,210 Nemáme ju potrebovať ešte. 316 00:19:22,210 --> 00:19:26,650 A potom, takže ak to volanie chybných a vrátil null, 317 00:19:26,650 --> 00:19:29,630 potom budeme robiť celý vec znovu hlásenie chýb. 318 00:19:29,630 --> 00:19:30,920 >> Dobre. 319 00:19:30,920 --> 00:19:34,810 Tu sme dostať sa do niektorej Skutočné vykresľovanie funkcií. 320 00:19:34,810 --> 00:19:37,730 Takže volanie SDL_RenderClear a priechodom 321 00:19:37,730 --> 00:19:42,550 renderer spojené s naším oknom jednoducho robí okno sčernie. 322 00:19:42,550 --> 00:19:47,650 Takže to, že odstraňuje nevyžiadanej pošty, ktoré sme videli v naše okno pred a robí to čierne. 323 00:19:47,650 --> 00:19:50,750 A potom pôjdeme zavolať SDL_RenderCopy, 324 00:19:50,750 --> 00:19:53,010 dať mu našu renderer, naši textúru. 325 00:19:53,010 --> 00:19:55,800 A budeme hovoriť o tom, čo tieto polia sú v trochu. 326 00:19:55,800 --> 00:19:57,830 Ale to bude prijmú textúr údaje 327 00:19:57,830 --> 00:20:03,100 a skopírujte ho na naše Okno nakresliť obrázok. 328 00:20:03,100 --> 00:20:07,020 Takže po tom, čo sme urobili túto kópiu údaje na naše okná, 329 00:20:07,020 --> 00:20:11,180 musíme to urobiť zvláštne funkciu volal SDL_RenderPresent. 330 00:20:11,180 --> 00:20:15,360 >> A to je zaujímavé, pretože sa to dostane 331 00:20:15,360 --> 00:20:18,770 do témy s názvom dvojité ukladanie do vyrovnávacej pamäte. 332 00:20:18,770 --> 00:20:24,380 Takže dvojité ukladanie do vyrovnávacej pamäte je technika, ktorá je vaša grafika vyzerať oveľa lepšie. 333 00:20:24,380 --> 00:20:28,240 Opäť platí, že bráni tejto obrazovke trhaniu Hovoril som o skôr, kde 334 00:20:28,240 --> 00:20:29,590 máte dve vyrovnávacej pamäte. 335 00:20:29,590 --> 00:20:32,260 Je tu zadný vyrovnávacia pamäť v pamäte a predné vyrovnávacej pamäte. 336 00:20:32,260 --> 00:20:36,410 Predný nárazník je doslova to, čo je na obrazovke v tomto okamihu. 337 00:20:36,410 --> 00:20:42,070 Takže robíme všetko kresliť variácie, ako SDL činí kópie alebo SDL_RenderClear 338 00:20:42,070 --> 00:20:43,080 na zadnej vyrovnávacej pamäti. 339 00:20:43,080 --> 00:20:44,800 Tak sa zmeniť veci v zadnej vyrovnávacej pamäti. 340 00:20:44,800 --> 00:20:48,970 Tu by mohla byť táto kresba zelený štvorec na zadnej vyrovnávacej pamäti. 341 00:20:48,970 --> 00:20:52,300 >> Takže keď budeme hotoví robiť Naši činí operácie, ktoré 342 00:20:52,300 --> 00:20:55,700 môže trvať naozaj dlho čas, čo budeme robiť 343 00:20:55,700 --> 00:20:57,860 je prepínať vyrovnávacej pamäte. 344 00:20:57,860 --> 00:21:00,720 Tak to doslova berie predný nárazník a zadný vyrovnávaciu pamäť 345 00:21:00,720 --> 00:21:02,990 a prepínačov je, tak že, okamžite, 346 00:21:02,990 --> 00:21:06,630 v jednej operácii, namiesto možno stovky alebo tisíce, 347 00:21:06,630 --> 00:21:10,910 všetky naše novo poskytnuté objekty sú na obrazovke. 348 00:21:10,910 --> 00:21:13,160 A to zabráni veci ako obrazovka osviežujúci 349 00:21:13,160 --> 00:21:16,710 keď sme čerpané len dvainy našich objektov pre rámu. 350 00:21:16,710 --> 00:21:21,280 Takže to je dôvod, prečo musíme zavolať SDL_RenderPresent, ako aj 351 00:21:21,280 --> 00:21:23,320 as SDL_RenderCopy. 352 00:21:23,320 --> 00:21:25,749 >> Opäť sme len tak čakať po dobu piatich sekúnd. 353 00:21:25,749 --> 00:21:27,540 Potom sme sa chystáte upratať našich zdrojov. 354 00:21:27,540 --> 00:21:29,540 Máme docela málo viac tentoraz. 355 00:21:29,540 --> 00:21:31,750 A potom sme to len tak ukončíte program. 356 00:21:31,750 --> 00:21:35,350 Takže poďme to urobiť. 357 00:21:35,350 --> 00:21:41,880 Budem písať značku, a potom zdroje rovná sa hello-- toto je teraz 3image.c. 358 00:21:41,880 --> 00:21:49,632 359 00:21:49,632 --> 00:21:52,240 Dobre, že zostavil žiadne chyby. 360 00:21:52,240 --> 00:21:57,210 A vidíte, tu som teraz ťahané sa na môj obraz, Dobrý deň, CS50! 361 00:21:57,210 --> 00:22:00,560 k nášmu okno, ktoré zmizne po piatich sekundách. 362 00:22:00,560 --> 00:22:02,090 >> Teraz, to stále má problémy, je to tak? 363 00:22:02,090 --> 00:22:05,750 To nie je dobrá aplikácie, pretože keď som sa pokuse o zatvorenie okna, 364 00:22:05,750 --> 00:22:06,500 nič sa nedeje. 365 00:22:06,500 --> 00:22:09,540 To x stále nie je citlivý. 366 00:22:09,540 --> 00:22:17,420 Takže poďme sa pozrieť na Ďalší obrázok, hello4animation. 367 00:22:17,420 --> 00:22:21,850 Tak toto je ten súbor že sa chystá zaviesť 368 00:22:21,850 --> 00:22:25,124 pohyblivé a hnutia naším obrazom. 369 00:22:25,124 --> 00:22:27,040 Takže budeme robiť to isté ako predtým, 370 00:22:27,040 --> 00:22:30,190 iniciovať SDL, vytvoriť okná, vytvorte renderer, 371 00:22:30,190 --> 00:22:33,030 nahrať obrázok do pamäť, vytvorte textúru. 372 00:22:33,030 --> 00:22:35,090 Už sme predtým nevidel všetko. 373 00:22:35,090 --> 00:22:36,770 Teraz, to je nové. 374 00:22:36,770 --> 00:22:42,305 Budeme mať štruktúru s názvom SDL rect, čo je len obdĺžnik. 375 00:22:42,305 --> 00:22:49,950 Ak by sme ísť sem, môžeme to hľadanie pre SDL RECT, 376 00:22:49,950 --> 00:22:54,040 a môžete vidieť, že je to veľmi jednoduchá konštrukcia. 377 00:22:54,040 --> 00:22:56,760 Má X, A y pre poloha, a to 378 00:22:56,760 --> 00:23:02,080 má šírku a výšku veľkosť obdĺžnika. 379 00:23:02,080 --> 00:23:07,785 >> Takže to, čo budeme robiť, je, že sme bude definovať tento SDL rect dest, 380 00:23:07,785 --> 00:23:09,480 na miesto určenia. 381 00:23:09,480 --> 00:23:14,130 A to je miesto, na obrazovke, kde 382 00:23:14,130 --> 00:23:16,005 budeme sa kreslenie náš imidž, vpravo So 383 00:23:16,005 --> 00:23:17,880 ak budeme mať pohyblivý obraz sa okolo, 384 00:23:17,880 --> 00:23:20,300 potom miesto určenia, kde budeme nakresliť obrázok 385 00:23:20,300 --> 00:23:22,620 Treba pohybovať. 386 00:23:22,620 --> 00:23:24,910 Takže budeme nazývať Funkcie SDL_QueryTexture. 387 00:23:24,910 --> 00:23:27,550 388 00:23:27,550 --> 00:23:33,500 A všimnite si ja som okolo adresu of dest.w, čo je šírka, 389 00:23:33,500 --> 00:23:36,950 a dest.h, čo je výška. 390 00:23:36,950 --> 00:23:40,425 A tak SDL_QueryTexture sa deje pre uloženie v týchto oblastiach je šírka 391 00:23:40,425 --> 00:23:41,675 a výška našej textúry. 392 00:23:41,675 --> 00:23:44,680 393 00:23:44,680 --> 00:23:47,030 >> A potom, čo budem urobiť, je idem 394 00:23:47,030 --> 00:23:55,580 pre nastavenie dest.x byť okno šírka mínus dest.w, čo je 395 00:23:55,580 --> 00:23:59,000 šírka sprajt, deleno 2. 396 00:23:59,000 --> 00:24:03,860 A to bude ho môžete nastaviť tak, že obraz je dokonale na stred 397 00:24:03,860 --> 00:24:06,780 v našej okne, v poriadku? 398 00:24:06,780 --> 00:24:08,652 Takže teraz mám pozíciu y. 399 00:24:08,652 --> 00:24:10,360 A to bude byť premennou, ktorá je 400 00:24:10,360 --> 00:24:16,390 mení, pretože budeme mať pohybujúci sa obraz v smere y. 401 00:24:16,390 --> 00:24:19,050 A teraz máme niečo volal animácie slučka. 402 00:24:19,050 --> 00:24:21,180 >> Ako teda animácie funguje? 403 00:24:21,180 --> 00:24:27,630 No, ľudské oko dokáže detekovať 12 odlišný obrazy v každej druhej, v poriadku? 404 00:24:27,630 --> 00:24:33,060 Takže ak ste blikať 12 obrazových kariet na mňa V sekunde som videl každý z týchto obrazov 405 00:24:33,060 --> 00:24:35,950 ako jeho vlastné odlišnú jednotlivý záber. 406 00:24:35,950 --> 00:24:39,690 Teraz, keď blesk viac obrazy na mňa druhý, 407 00:24:39,690 --> 00:24:42,140 potom moje oko by sa začať rozmazaniu dohromady 408 00:24:42,140 --> 00:24:46,920 a ja by som vnímať ako pohyb, namiesto toho, jeden jediný obraz. 409 00:24:46,920 --> 00:24:51,930 Tak, napríklad, filmoch a televízii, blikajú obrazy na teba 24 krát 410 00:24:51,930 --> 00:24:52,570 druhý. 411 00:24:52,570 --> 00:24:55,110 Tak to je 24 snímok za sekundu. 412 00:24:55,110 --> 00:25:00,136 Obrazovky počítača, na druhej strane, často sú pri 60 snímkach za sekundu. 413 00:25:00,136 --> 00:25:01,260 To je ich rýchlosť obnovovania. 414 00:25:01,260 --> 00:25:04,650 To je, ako často sa občerstviť obraz na obrazovke. 415 00:25:04,650 --> 00:25:08,960 Takže naším cieľom bude 60 snímok za sekundu pre naše hry. 416 00:25:08,960 --> 00:25:11,770 417 00:25:11,770 --> 00:25:13,710 >> Tak uvidíme, že v kóde. 418 00:25:13,710 --> 00:25:19,064 Takže pre každú snímku, sme najprv bude vyčistiť okno. 419 00:25:19,064 --> 00:25:20,230 Toto je všeobecný vzor. 420 00:25:20,230 --> 00:25:22,450 Vždy zrušte okná každú snímku, a potom 421 00:25:22,450 --> 00:25:25,210 robiť všetky výkresu operácie, a potom na konci, 422 00:25:25,210 --> 00:25:29,610 sa RenderPresent ukázať všetko v rámčeku. 423 00:25:29,610 --> 00:25:33,910 A potom budete majú čakať na konci 424 00:25:33,910 --> 00:25:36,340 počkať až do ďalšieho rám by mal začať. 425 00:25:36,340 --> 00:25:38,650 >> Takže keď som robil veľa zložitý výpočet tu 426 00:25:38,650 --> 00:25:43,100 že trvalo viac ako 16 milisekúnd, to by bolo nemožné pre mňa 427 00:25:43,100 --> 00:25:46,890 sa dostať, že počet snímok za sekundu 60, ktoré Chcel som, pretože každý snímka je 428 00:25:46,890 --> 00:25:48,750 trvá príliš dlho pre výpočet. 429 00:25:48,750 --> 00:25:52,340 Ďalej sme naozaj robia druh zanedbateľného množstva práce 430 00:25:52,340 --> 00:25:54,820 tu, pretože tam je len jedna vec, ktorú sme kreslenie. 431 00:25:54,820 --> 00:25:59,390 Tak som len čakať 1/60 za druhé, čo je dĺžka 432 00:25:59,390 --> 00:26:01,520 z rámu, v medzi rámy. 433 00:26:01,520 --> 00:26:05,610 Takže som tak nejako predstierať robiť všetky moje práca vyžaduje nulový čas. 434 00:26:05,610 --> 00:26:09,050 Ale v reálnom hre, budete musieť odpočítať 435 00:26:09,050 --> 00:26:13,760 množstvo času trvalo robiť to všetko práca z vášho odpočinku. 436 00:26:13,760 --> 00:26:16,970 >> Tak ako tak, čo mám vlastne robí v tejto slučky? 437 00:26:16,970 --> 00:26:19,070 Aj vyčistiť okno. 438 00:26:19,070 --> 00:26:27,470 Položím dest.y, čo je na int moja skutočná y pozície obsadil do int. 439 00:26:27,470 --> 00:26:32,070 Teraz chcem plávať rozlíšenie pre moju y pozíciu v mojej hre, 440 00:26:32,070 --> 00:26:34,150 ale potom sa v skutočnosti nakresliť na obrazovku, 441 00:26:34,150 --> 00:26:39,070 potrebuje celých čísel, pretože je to v jednotkách pixelov, takže to, čo je pre obsadenie. 442 00:26:39,070 --> 00:26:41,745 Chystám sa nakresliť obrázok. 443 00:26:41,745 --> 00:26:45,180 Tak toto je zdroj obdĺžnik. 444 00:26:45,180 --> 00:26:47,060 A to je cieľ obdĺžnik. 445 00:26:47,060 --> 00:26:50,310 Tak som prešiel null pre zdroj obdĺžnik 446 00:26:50,310 --> 00:26:53,426 povedať, že som chcel nakresliť celý môj textúru. 447 00:26:53,426 --> 00:26:55,300 Ale ak ste mali veľa textúry vo vašej hre 448 00:26:55,300 --> 00:26:59,120 a oni sú všetci v jednej veľkej textúry mape , Ktorý bol vložený do SDL, ako len jeden 449 00:26:59,120 --> 00:27:02,850 textúra, mohol by ste Overte si, či obdĺžnik 450 00:27:02,850 --> 00:27:06,750 vybrať jeden z menších textúr, jedným z menších škriatkov, 451 00:27:06,750 --> 00:27:09,450 z tej veľkej textúry mapy. 452 00:27:09,450 --> 00:27:14,740 >> Takže znovu, ja som okolo mojej render, my textúry, a teraz cieľ. 453 00:27:14,740 --> 00:27:18,320 To bude, kde v Okno, že to bude byť vypracované. 454 00:27:18,320 --> 00:27:21,390 A potom, pretože som animovanie niečo, potrebujem pohyb, 455 00:27:21,390 --> 00:27:25,150 Budem sa potom aktualizujú sprite postavenie na každom snímku. 456 00:27:25,150 --> 00:27:30,190 Takže som túto stálu názvom zvitok rýchlosť v jednotkách pixelov za sekundu. 457 00:27:30,190 --> 00:27:34,320 Teraz zakaždým, keď urobíme pohyb, rám je len 1/60 sekundy. 458 00:27:34,320 --> 00:27:36,740 Takže budem deliť, že 60. 459 00:27:36,740 --> 00:27:42,350 A potom, pozrime sa, ja som odpočítaním že od y polohy. 460 00:27:42,350 --> 00:27:44,470 Prečo som odpočítaním? 461 00:27:44,470 --> 00:27:46,169 Dostaneme sa k tomu v druhom. 462 00:27:46,169 --> 00:27:48,460 Tak som vyčistiť mojej zdroje a program je u konca. 463 00:27:48,460 --> 00:27:49,830 >> Takže poďme robiť to. 464 00:27:49,830 --> 00:27:52,450 465 00:27:52,450 --> 00:28:03,570 Tak poďme do make SRCS = hello4 animation.c, v poriadku? 466 00:28:03,570 --> 00:28:05,720 Game. 467 00:28:05,720 --> 00:28:06,770 A je to. 468 00:28:06,770 --> 00:28:12,690 Tak som si to rolovanie sa zriaďuje okná, čo je celkom pekné. 469 00:28:12,690 --> 00:28:17,110 Ale vydrž, bol som odpočítaním od y polohy zakaždým. 470 00:28:17,110 --> 00:28:18,910 Čo sa deje tam? 471 00:28:18,910 --> 00:28:24,010 No, ukázalo sa, že v SDL, a v skutočnosti, že vo väčšine počítačovej grafiky, 472 00:28:24,010 --> 00:28:28,890 pôvod pre súradného systému je v ľavom hornom rohu okna. 473 00:28:28,890 --> 00:28:34,960 >> Takže kladný smer x ide cez okná na pravej strane. 474 00:28:34,960 --> 00:28:38,110 A pozitívne y smer v skutočnosti ide dole. 475 00:28:38,110 --> 00:28:40,470 Takže znovu, na vzniku sa ľavom hornom rohu okna, 476 00:28:40,470 --> 00:28:46,190 kladný smer Y je dole, a pozitívne x je na pravej strane. 477 00:28:46,190 --> 00:28:48,770 Takže keď som odčítanie poloha y, to je 478 00:28:48,770 --> 00:28:52,640 bude, aby to išlo na negatívny y smer, ktorý je až k oknu. 479 00:28:52,640 --> 00:28:55,500 Takže to je to, čo sa tam deje. 480 00:28:55,500 --> 00:28:56,510 Super. 481 00:28:56,510 --> 00:28:59,240 >> Poďme sa pozrieť na ďalší súbor. 482 00:28:59,240 --> 00:29:05,700 Tu je súčasťou ukázať, kde sme sa konečne 483 00:29:05,700 --> 00:29:08,920 dostať, že X v rohu okna že to má zavrieť okno 484 00:29:08,920 --> 00:29:10,660 do práce. 485 00:29:10,660 --> 00:29:12,800 Tak čo sa deje? 486 00:29:12,800 --> 00:29:17,520 My inicializovať SDL, vytvoriť okno, vytvoriť vykresľovací, nahrať obrázok, 487 00:29:17,520 --> 00:29:19,770 vytvoriť textúru rovnako ako sme videli predtým. 488 00:29:19,770 --> 00:29:26,850 Máme rovnaký cieľový obdĺžnik ako predtým, rovnaké volanie na dotaz textúru. 489 00:29:26,850 --> 00:29:29,780 Ale tentoraz, my sme potom bude rozdeliť šírku 490 00:29:29,780 --> 00:29:33,110 a výška nášmu cieľu o 4. 491 00:29:33,110 --> 00:29:36,430 To má za následok len škálovanie náš obraz dole, keď 492 00:29:36,430 --> 00:29:39,884 sme sa zobrazí v okne štyrmi. 493 00:29:39,884 --> 00:29:40,800 Tak to je celkom pekné. 494 00:29:40,800 --> 00:29:42,770 Môžeme len mierka, rovnako ako to. 495 00:29:42,770 --> 00:29:45,970 Chystáme sa začať sprite v strede obrazovky. 496 00:29:45,970 --> 00:29:49,410 A teraz máme x a y a rýchlosť Obaja začnú od nuly. 497 00:29:49,410 --> 00:29:53,740 498 00:29:53,740 --> 00:29:55,880 >> To je zlý súbor. 499 00:29:55,880 --> 00:29:56,380 Prepáč. 500 00:29:56,380 --> 00:29:57,960 Tak to je všetko pravda. 501 00:29:57,960 --> 00:30:00,170 To je všetko stále ešte v tomto súbore. 502 00:30:00,170 --> 00:30:03,210 Máme vydeliť 4 a všetko. 503 00:30:03,210 --> 00:30:07,830 Takže tu máme poloha x a y na stredu okna. 504 00:30:07,830 --> 00:30:12,480 A my dať počiatočná rýchlosť z tejto konštantnej rýchlosti, ktorý 505 00:30:12,480 --> 00:30:15,180 Verím, že je 300 pixelov za sekundu. 506 00:30:15,180 --> 00:30:19,850 Teraz máme to int mohol rovnako dobre byť boolean nazýva blízky požadované. 507 00:30:19,850 --> 00:30:23,970 A namiesto toho robí nekonečnej slučky na časový spínač tu, 508 00:30:23,970 --> 00:30:29,180 budeme treba oživovať ako Kým záver nie je požadované. 509 00:30:29,180 --> 00:30:30,960 >> Tak ako sme sa spracovať udalosti? 510 00:30:30,960 --> 00:30:35,600 No, SDL fronty až udalostí v Doslovný front v zákulisí. 511 00:30:35,600 --> 00:30:38,860 A potom každý snímok, môžeme dequeue udalosti 512 00:30:38,860 --> 00:30:43,900 z tejto fronty pomocou táto výzva SDL_PullEvent. 513 00:30:43,900 --> 00:30:46,730 A opäť, určite ísť čítať o tom v dokumentácii. 514 00:30:46,730 --> 00:30:50,450 Je tu oveľa viac detailov a omnoho viac funkcií, môžete použiť s týmto. 515 00:30:50,450 --> 00:30:54,750 Míňame to adresa tejto veci, SDL_Event 516 00:30:54,750 --> 00:30:56,990 že máme tu v zásobníku. 517 00:30:56,990 --> 00:30:58,840 >> A teraz, čo je SDL_event? 518 00:30:58,840 --> 00:31:02,356 Vzhľadom k tomu, SDL, ak sa pozrieme v sa documentation-- poďme 519 00:31:02,356 --> 00:31:07,580 vidieť, API, podľa kategórie, vstupom udalosti, spracovanie udalostí, 520 00:31:07,580 --> 00:31:15,150 môžeme sa pozrieť na čísla z rôznych udalostí tu 521 00:31:15,150 --> 00:31:18,600 a my môžeme vidieť, že je celá ton z nich. 522 00:31:18,600 --> 00:31:22,150 Takže to, čo je tá vec SDL_Event? 523 00:31:22,150 --> 00:31:28,190 524 00:31:28,190 --> 00:31:31,107 SDL_Event je spojenie. 525 00:31:31,107 --> 00:31:31,940 Wow, to je zväzok? 526 00:31:31,940 --> 00:31:33,910 Ste pravdepodobne nikdy predtým nepočul. 527 00:31:33,910 --> 00:31:35,610 A to je v poriadku. 528 00:31:35,610 --> 00:31:39,420 >> Odbory je niečo ako struct, okrem struct 529 00:31:39,420 --> 00:31:41,960 má priestor pre všetky jeho pole a pamäti, 530 00:31:41,960 --> 00:31:45,060 zatiaľ čo Únia má iba dostatok priestoru, aby sa zmestili najväčší 531 00:31:45,060 --> 00:31:49,660 jeden z jeho pole, čo znamená, že ho môže iba uložiť jednu zo svojich polí 532 00:31:49,660 --> 00:31:52,830 v čase, ktorý druh má zmysel pre udalosti, nie? 533 00:31:52,830 --> 00:31:55,810 Môžeme mať klávesnicu udalosť alebo udalosť okno, 534 00:31:55,810 --> 00:31:59,750 ale jedna udalosť nemôže byť ako klávesnica akcie a udalosti okno, 535 00:31:59,750 --> 00:32:05,450 tak to by bolo hlúpe, mať priestor pre obaja tých vnútri našej akcii únie. 536 00:32:05,450 --> 00:32:07,770 Takže ak ste chceli vytvoriť svoj vlastný únii, 537 00:32:07,770 --> 00:32:10,020 Vyzerá to presne to isté ako vytvorenie struct, 538 00:32:10,020 --> 00:32:14,140 okrem toho, že sme sa použiť union kľúčové slovo miesto struct kľúčového slova. 539 00:32:14,140 --> 00:32:17,490 A pamätajte, pre všetky veci vo vnútri únie, 540 00:32:17,490 --> 00:32:22,020 skutočná premenná, ktorá je spojením môže mať iba jednu z týchto hodnôt 541 00:32:22,020 --> 00:32:24,780 v tom čase. 542 00:32:24,780 --> 00:32:29,940 >> Tak ako môžeme povedať, aký druh akcie sme jednoducho vyskočila z tejto fronty? 543 00:32:29,940 --> 00:32:33,370 No, môžeme testovať Event.type. 544 00:32:33,370 --> 00:32:35,792 A v prípade, že je rovné na SDL_Quit, vieme, 545 00:32:35,792 --> 00:32:37,500 je to udalosť, ktorá sa bol vytvorený, keď sme 546 00:32:37,500 --> 00:32:39,510 zasiahnuť, že X v rohu okna. 547 00:32:39,510 --> 00:32:44,270 A môžeme nastaviť v blízkosti požiadal rovný 1. 548 00:32:44,270 --> 00:32:47,230 Zvyšok je len niektoré animácie ktoré ste nevideli. 549 00:32:47,230 --> 00:32:52,802 Tak poďme do toho a robiť to a uvidíte, ako dobre to funguje. 550 00:32:52,802 --> 00:32:55,135 Takže budem písať a make potom SRCS = hello5_events.c. 551 00:32:55,135 --> 00:33:03,760 552 00:33:03,760 --> 00:33:04,770 Tam sme ísť. 553 00:33:04,770 --> 00:33:05,780 Games. 554 00:33:05,780 --> 00:33:08,920 >> Teraz môžeme vidieť, že to naozaj zmenšený štyrmi. 555 00:33:08,920 --> 00:33:10,360 A teraz sa to odrazí v okolí. 556 00:33:10,360 --> 00:33:14,630 Mám nejaké detekcie kolízie deje sa po stranách okna 557 00:33:14,630 --> 00:33:16,840 že môžeme sa pozrieť na. 558 00:33:16,840 --> 00:33:21,190 A čo sa stane, keď idem na to uzavrieť? 559 00:33:21,190 --> 00:33:22,120 To sa zavrie. 560 00:33:22,120 --> 00:33:22,740 Fantastický. 561 00:33:22,740 --> 00:33:24,290 Dostali sme tú udalosť. 562 00:33:24,290 --> 00:33:26,630 A s ním zaobchádzal my. 563 00:33:26,630 --> 00:33:30,730 >> Takže poďme sa pozrieť späť na kód. 564 00:33:30,730 --> 00:33:33,020 Tak ako som sa to poskakovanie okolo takto? 565 00:33:33,020 --> 00:33:37,200 Spomínam si, ako nastaviť obaja x a y spočiatku k rýchlosti. 566 00:33:37,200 --> 00:33:39,260 A rýchlosť je pozitívna konštantný, tak to je 567 00:33:39,260 --> 00:33:42,680 bude, aby si to začína ísť dole a doprava. 568 00:33:42,680 --> 00:33:45,680 569 00:33:45,680 --> 00:33:50,310 >> Teraz, každý rámec, navyše k manipulácii žiadne udalosti, ktoré mohlo dôjsť, 570 00:33:50,310 --> 00:33:57,520 Idem zistiť, či môj sprite sa snaží ísť von z okna. 571 00:33:57,520 --> 00:34:03,610 Takže môžeme urobiť, že len kontrolovať x_pos 0, y_pos 0, a potom 572 00:34:03,610 --> 00:34:07,370 tiež x_pos a y_pos s šírka okna a výška okno. 573 00:34:07,370 --> 00:34:11,010 Všimnite si, som sa odpočíta šírka sprite. 574 00:34:11,010 --> 00:34:14,090 A to je preto, že keď som nemal odpočítame šírku sprite, 575 00:34:14,090 --> 00:34:17,760 to by kontrolovať iba to, že pôvod sprite 576 00:34:17,760 --> 00:34:19,690 nešiel von oknom. 577 00:34:19,690 --> 00:34:21,480 Ale chceme celokrajné šírka sprite 578 00:34:21,480 --> 00:34:24,030 byť vždy vnútri okna a celá výška škriatka 579 00:34:24,030 --> 00:34:25,321 byť vždy vnútri okna. 580 00:34:25,321 --> 00:34:27,429 Takže to je to, čo je pre odčítanie. 581 00:34:27,429 --> 00:34:30,080 Veľa geometrie tu môžu byť užitočné k tomu to 582 00:34:30,080 --> 00:34:33,929 na papieri s súradníc Systém vidieť, čo sa deje. 583 00:34:33,929 --> 00:34:38,090 >> Takže keď mi zrazí, len som jednoducho resetovanie polohy 584 00:34:38,090 --> 00:34:41,400 tak, že sa nebude z obrazovky. 585 00:34:41,400 --> 00:34:47,179 A budem, ak to odrazí na jednej z bočných stien, 586 00:34:47,179 --> 00:34:51,469 Budem negovať x rýchlosť tak, že 587 00:34:51,469 --> 00:34:53,210 začína odrážať v opačnom smere. 588 00:34:53,210 --> 00:34:56,210 A podobne, ak to udrie hornej alebo spodnej, 589 00:34:56,210 --> 00:34:59,820 Chystám sa nastaviť rýchlosť y rovná záporné rýchlosti y, 590 00:34:59,820 --> 00:35:01,690 tak, aby sa odrazí späť. 591 00:35:01,690 --> 00:35:03,860 Takže to je to, ako sme sa dostali, že tu. 592 00:35:03,860 --> 00:35:07,560 >> A aktualizácia pozície rovnako ako sme videli predtým, 593 00:35:07,560 --> 00:35:12,510 vydeľte 60, pretože sme len manipulačný 1/60 sekundy. 594 00:35:12,510 --> 00:35:15,750 A potom rendering, presne rovnaké ako predtým. 595 00:35:15,750 --> 00:35:19,810 A tak to je všetko ktorá sa deje na tento súbor. 596 00:35:19,810 --> 00:35:22,490 Tak to je to, ako to robíme udalosti. 597 00:35:22,490 --> 00:35:29,260 Hlavná vec, aby vzali tu je táto funkcia SDL_PullEvent. 598 00:35:29,260 --> 00:35:33,020 A vy by ste mali určite prečítať Dokumentácia viac o SDL_Event 599 00:35:33,020 --> 00:35:38,630 odbory, pretože tento typ dát je veľmi, veľmi dôležité, pretože ich používame 600 00:35:38,630 --> 00:35:40,690 pre všetky druhy akcií. 601 00:35:40,690 --> 00:35:46,539 >> Napríklad sme používať ho pre klávesnicu udalosti, čo je to, čo tento súbor je pre. 602 00:35:46,539 --> 00:35:47,330 Tak čo máme? 603 00:35:47,330 --> 00:35:50,180 Máme to isté ako predtým, inicializovať SDL, vytvoriť okno, 604 00:35:50,180 --> 00:35:55,260 vytvoriť vykresľovací, načítať obrázok do pamäte, vytvoriť textúru. 605 00:35:55,260 --> 00:36:00,530 Opäť platí, že budeme majú tento dest obdĺžnik, 606 00:36:00,530 --> 00:36:04,890 budeme mierka obrázku štyri, aby bolo o niečo menšie. 607 00:36:04,890 --> 00:36:08,000 Teraz, budeme začať sprite v strede obrazovky. 608 00:36:08,000 --> 00:36:12,090 Ale tentoraz, budeme nastaviť Počiatočná X a Y rýchlostiach na nulu, 609 00:36:12,090 --> 00:36:15,140 preto, že klávesnica je bude kontrolovať tie. 610 00:36:15,140 --> 00:36:18,900 A navyše, budeme sa sledovať týchto premenných 611 00:36:18,900 --> 00:36:20,450 hore, dole, doľava a doprava. 612 00:36:20,450 --> 00:36:23,090 A že to bude držať stopa, či máme 613 00:36:23,090 --> 00:36:27,370 stlačení tlačidla klávesnice, ktoré zodpovedajú hore, dole, doľava, 614 00:36:27,370 --> 00:36:28,460 a doprava. 615 00:36:28,460 --> 00:36:32,440 >> Teraz, to je tak trochu fantázie pretože môžeme použiť W, A, S, 616 00:36:32,440 --> 00:36:35,480 Tu D, alebo skutočné šípkami. 617 00:36:35,480 --> 00:36:38,590 Uvidíme, že v len sekundu. 618 00:36:38,590 --> 00:36:41,140 Takže budeme spracovávať udalosť, rovnako ako predtým. 619 00:36:41,140 --> 00:36:42,530 My zatiahnite za udalosť. 620 00:36:42,530 --> 00:36:45,840 Ale teraz budeme prepnúť na typu udalosti. 621 00:36:45,840 --> 00:36:47,710 Ak je to SDL_Quit, my sme bude tesne priliehajúce 622 00:36:47,710 --> 00:36:49,990 požaduje, aby jeden, rovnako ako predtým. 623 00:36:49,990 --> 00:36:52,315 To spracováva x v rohu okna, 624 00:36:52,315 --> 00:36:55,050 tak, že naše okno v skutočnosti sa zavrie. 625 00:36:55,050 --> 00:37:00,110 >> V opačnom prípade, ak dostaneme SDL kľúč dole Akcia, ktorá znamená, že stlačenie tlačidla, 626 00:37:00,110 --> 00:37:04,470 potom to, čo budeme robiť, je, že sme prejdeme na túto vec tu, 627 00:37:04,470 --> 00:37:11,370 ktorý means-- tak event.key znamená zaobchádzať našu akciu únie, 628 00:37:11,370 --> 00:37:15,490 ísť a získať kľúč Štruktúra udalosť v tom. 629 00:37:15,490 --> 00:37:18,810 Tak to dopadá, že tento únie je kľúčovou udalosťou štruktúra. 630 00:37:18,810 --> 00:37:22,820 A potom ísť na kľúč Štruktúra večera bol jeho pole 631 00:37:22,820 --> 00:37:26,140 volal keysym a potom scancode. 632 00:37:26,140 --> 00:37:29,480 A opäť, rozhodne čítať dokumentácia o tom. 633 00:37:29,480 --> 00:37:31,220 Vstupy Kľúčové slovo celkom zaujímavé. 634 00:37:31,220 --> 00:37:34,020 Môžete získať skenovanie kódy alebo klávesové kódy. 635 00:37:34,020 --> 00:37:38,590 A je to trochu jemné, ale dokumentácia je celkom dobrá. 636 00:37:38,590 --> 00:37:43,380 >> Takže ak vidíme skenovanie kód naše stlačení klávesy, že W alebo hore, 637 00:37:43,380 --> 00:37:45,450 budeme nastaviť rovný 1. 638 00:37:45,450 --> 00:37:47,240 A potom sme sa vymaniť z tohto spínača. 639 00:37:47,240 --> 00:37:52,980 Ak je to, alebo vľavo, sme si stanovili odišiel na 1, et cetera, et cetera, pre nadol a doprava. 640 00:37:52,980 --> 00:37:57,080 Teraz, v tomto vonkajšom prepínače, keď vidíme kľúč hore udalosť, 641 00:37:57,080 --> 00:38:00,730 to znamená, že sme vydali kľúč a my sme už nie stlačením. 642 00:38:00,730 --> 00:38:05,380 Takže som chcel povedať, až sa rovná 0, vľavo = 0, dole = 0, doprava 643 00:38:05,380 --> 00:38:08,260 sa rovná 0, a tak ďalej. 644 00:38:08,260 --> 00:38:12,070 >> A všimnite si máme v každom z nich dva prípady dal hneď vedľa seba 645 00:38:12,070 --> 00:38:14,490 so žiadnym samostatným kódom V prvom prípade, ktorý 646 00:38:14,490 --> 00:38:18,180 znamená, že či už je to s S alebo nadol tu, 647 00:38:18,180 --> 00:38:20,520 to bude spustenie tohto kódu. 648 00:38:20,520 --> 00:38:22,090 Tak to je celkom šikovný. 649 00:38:22,090 --> 00:38:24,830 Zabraňuje nám majú čo do činenia viac podmienky a IFS a veci 650 00:38:24,830 --> 00:38:26,980 ako to. 651 00:38:26,980 --> 00:38:29,420 >> Takže budeme stanoviť rýchlosť. 652 00:38:29,420 --> 00:38:31,020 Nastavili sme rýchlosť na 0. 653 00:38:31,020 --> 00:38:33,910 Potom, ak je stlačené up a nie dole, potom sme 654 00:38:33,910 --> 00:38:37,450 nastavte y rýchlosť na negatívny rýchlosti. 655 00:38:37,450 --> 00:38:42,930 Nezabudnite, negatívne, pretože záporný smer y je max. 656 00:38:42,930 --> 00:38:45,540 A pozitívne y smer je dole. 657 00:38:45,540 --> 00:38:47,510 Ak je stlačené a nie, potom sme 658 00:38:47,510 --> 00:38:53,860 bude nastavte ju na pozitívnu rýchlosť, čo znamená, že ísť dole na obrazovku. 659 00:38:53,860 --> 00:38:55,460 To isté sa doľava a doprava. 660 00:38:55,460 --> 00:38:58,200 >> A potom budeme aktualizovať pozície rovnako ako predtým. 661 00:38:58,200 --> 00:39:00,740 Budeme robiť kolízii detekcia s hranicami, 662 00:39:00,740 --> 00:39:04,290 ale nebudeme na reset rýchlosť, pretože rýchlosť je len 663 00:39:04,290 --> 00:39:06,780 ovládať klávesnicou. 664 00:39:06,780 --> 00:39:11,230 Ale budeme reset pozície, aby ju udržali v okne. 665 00:39:11,230 --> 00:39:14,400 A ideme do nastavenia pozície v struct 666 00:39:14,400 --> 00:39:17,400 a potom robiť všetky rendering veci z predtým. 667 00:39:17,400 --> 00:39:20,750 Takže poďme sa pozrieť, čo to robí. 668 00:39:20,750 --> 00:39:25,460 Tak, aby SRCS-- poďme sa pozrieť, To je hello6_keyboard.c. 669 00:39:25,460 --> 00:39:38,140 670 00:39:38,140 --> 00:39:38,820 >> Ale nie. 671 00:39:38,820 --> 00:39:40,150 Tak sme dostali niekoľko varovaní tu. 672 00:39:40,150 --> 00:39:43,840 A to je jednoducho hovorí, my nie skontrolujte pre každú možnú druhov 673 00:39:43,840 --> 00:39:45,610 udalosti. 674 00:39:45,610 --> 00:39:49,470 To je v poriadku, pretože tam je 236 z nich, alebo tak. 675 00:39:49,470 --> 00:39:51,760 Takže budem ignorovať tieto upozornenia. 676 00:39:51,760 --> 00:39:53,530 Je to stále zostavený v poriadku. 677 00:39:53,530 --> 00:39:56,100 Takže budem hrať hru. 678 00:39:56,100 --> 00:39:57,590 Nie je to v pohybe. 679 00:39:57,590 --> 00:40:04,150 Ale teraz, keď som sa mash na mojej klávesnici, Môžem urobiť nejaké WASD pohyb tu, 680 00:40:04,150 --> 00:40:06,870 Ja používam svoje šípok rovnako. 681 00:40:06,870 --> 00:40:10,070 A všimnite si, aj keď som lisovanie hneď teraz, 682 00:40:10,070 --> 00:40:13,804 to nebude z okna, pretože resetovať som ho na každom snímku. 683 00:40:13,804 --> 00:40:14,720 Tak to je celkom pekné. 684 00:40:14,720 --> 00:40:19,420 Môžete si predstaviť, pohybujúce sa okolo Mario s Niektoré šípkami alebo niečo také. 685 00:40:19,420 --> 00:40:22,880 A áno, X funguje. 686 00:40:22,880 --> 00:40:26,900 >> Takže konečný súbor ideme na pohľad, hellow7_mouse. 687 00:40:26,900 --> 00:40:29,600 To je, ako dostať vstup myši. 688 00:40:29,600 --> 00:40:34,790 Takže v tomto jednom, sme import hlavičky matematiky, 689 00:40:34,790 --> 00:40:38,100 pretože budeme mať trochu matematiky sem. 690 00:40:38,100 --> 00:40:45,260 Rovnaký starý, samá vec, cieľ, samá, videli, že predtým. 691 00:40:45,260 --> 00:40:46,910 No, to je zaujímavé. 692 00:40:46,910 --> 00:40:51,730 Takže sme späť iba kontrolu pre SDL prestať udalosť. 693 00:40:51,730 --> 00:40:52,460 Prečo tomu tak je? 694 00:40:52,460 --> 00:40:55,110 Takže sa môžete dostať myši vstup od udalostí. 695 00:40:55,110 --> 00:40:57,670 Ako keď myš bude pohybovať, dostanete udalosť za to. 696 00:40:57,670 --> 00:41:00,520 Pri stlačení tlačidla myši, môžete získať udalosť za to. 697 00:41:00,520 --> 00:41:05,760 >> Ale je tu ešte ďalší, o niečo jednoduchšie Možno, API pre získanie myši vstup. 698 00:41:05,760 --> 00:41:09,500 A to je jednoducho SDL stať get myš. 699 00:41:09,500 --> 00:41:14,370 Takže mám int pre x a y na pozíciu kurzora. 700 00:41:14,370 --> 00:41:18,910 Odovzdám to SDL_GetMouseState, ktorá stanovuje tieto. 701 00:41:18,910 --> 00:41:22,200 A to je pozícia v súradný systém okna. 702 00:41:22,200 --> 00:41:25,520 Takže v prípade, že hmota je v ľavom hornom rohu okná, ktoré by 0, 0. 703 00:41:25,520 --> 00:41:28,040 704 00:41:28,040 --> 00:41:33,380 >> A teraz, čo budem robiť, je, aby idem urobiť trochu vektora matematiky. 705 00:41:33,380 --> 00:41:36,910 Stavím sa, že ste si mysleli, že nie vidieť, že v CS50, ale tu to je. 706 00:41:36,910 --> 00:41:40,720 Chystám sa urobiť nejaké vektor math dostať vektor 707 00:41:40,720 --> 00:41:43,840 z obrazu na kurzora. 708 00:41:43,840 --> 00:41:53,280 A tak prečo mám to odčítanie tu? 709 00:41:53,280 --> 00:42:01,350 No, keď som jednoducho použiť dest .-- tak Potrebujem preložiť myši x 710 00:42:01,350 --> 00:42:05,166 a y o polovicu šírky a výška obrazu, 711 00:42:05,166 --> 00:42:08,040 pretože chcem do stredu obrázok, ísť smerom k myši, 712 00:42:08,040 --> 00:42:10,160 nie pôvod obrazu. 713 00:42:10,160 --> 00:42:15,650 >> Tak to je len aby sa ubezpečil, hovorím o tu stredu obrazu. 714 00:42:15,650 --> 00:42:19,510 Potom sme si delta X a Y, ktoré je rozdiel od cieľa 715 00:42:19,510 --> 00:42:23,430 skutočnej polohe obrazu. 716 00:42:23,430 --> 00:42:25,690 A potom sa môžeme dostať vzdialenosť, ktorá sem 717 00:42:25,690 --> 00:42:29,140 bude Pytagorova veta, druhá odmocnina z x 718 00:42:29,140 --> 00:42:32,720 krát X plus časy y y. 719 00:42:32,720 --> 00:42:38,400 >> Teraz, aby sa zabránilo chvenie, a ja vám ukázať vy, čo to robí, keď to neurobíte, 720 00:42:38,400 --> 00:42:45,830 ak vzdialenosť medzi kurzorom a strede snímky je nižšia ako päť, 721 00:42:45,830 --> 00:42:48,730 Ja jednoducho nebude k pohybu obrazu. 722 00:42:48,730 --> 00:42:52,900 Inak sme si stanovili rýchlosť. 723 00:42:52,900 --> 00:42:55,960 A my ho nastaviť tak, aby rýchlosť bude vždy konštantný. 724 00:42:55,960 --> 00:42:58,770 A čistý výsledok zo všetkých to matematika je, že obraz 725 00:42:58,770 --> 00:43:01,660 bude pohybovať smerom kurzora. 726 00:43:01,660 --> 00:43:08,470 >> Teraz sa ukazuje, že SDL_GetMouseState, 727 00:43:08,470 --> 00:43:14,490 Okrem stanovenia x a y argumenty tu, 728 00:43:14,490 --> 00:43:21,340 to tiež vráti int, ktorá zodpovedá so stavom tlačidiel myši. 729 00:43:21,340 --> 00:43:24,600 Takže sa môžeme dočítať, že nie je priamo, ale môžeme 730 00:43:24,600 --> 00:43:29,090 použitie týchto makier, jeden bitový operátor, nie je to desivé, 731 00:43:29,090 --> 00:43:30,650 len bitový a. 732 00:43:30,650 --> 00:43:38,320 Takže hovoríme tlačidlá, ktoré je výsledkom našej SDL_GetMouseState, v prípade, že 733 00:43:38,320 --> 00:43:43,990 a bitový a toto makro tu, SDL_BUTTON_LEFT. 734 00:43:43,990 --> 00:43:47,680 >> Takže to bude jednoducho vyriešiť do bitmapy, ktoré zodpovedá 735 00:43:47,680 --> 00:43:51,090 na ľavé tlačidlo myši stlačené. 736 00:43:51,090 --> 00:43:55,470 A tak v prípade, že bitové a dochádza k nemu, a to 737 00:43:55,470 --> 00:43:59,340 od nuly, čo znamená, že Bolo stlačené ľavé tlačidlo, 738 00:43:59,340 --> 00:44:04,320 Potom sme vlastne bude negovať ako x a y rýchlosti, 739 00:44:04,320 --> 00:44:06,700 ktorá bude len aby obraz utečenca. 740 00:44:06,700 --> 00:44:07,980 Aktualizácie pozícií. 741 00:44:07,980 --> 00:44:10,920 Kolízie detekcie, videl všetky predtým, rendering, v poriadku. 742 00:44:10,920 --> 00:44:11,510 Urobme to. 743 00:44:11,510 --> 00:44:14,200 744 00:44:14,200 --> 00:44:16,050 Takže ste dostali urobiť bezpečnostného riadiaceho systému = hello7_mouse.c. 745 00:44:16,050 --> 00:44:21,720 746 00:44:21,720 --> 00:44:22,220 Skvelé. 747 00:44:22,220 --> 00:44:23,490 Žiadne chyby. 748 00:44:23,490 --> 00:44:24,900 A hra. 749 00:44:24,900 --> 00:44:26,440 >> Tak tu mám myš. 750 00:44:26,440 --> 00:44:29,000 A obraz je skutočne naháňa myš. 751 00:44:29,000 --> 00:44:33,140 Teraz, v hre urobíte, možno to je ako nepriateľská naháňania 752 00:44:33,140 --> 00:44:35,240 váš malý znak alebo čokoľvek iného. 753 00:44:35,240 --> 00:44:37,440 Ale tu máme image naháňa myš. 754 00:44:37,440 --> 00:44:41,000 A keď som kliknite na tlačidlo, myš začne naháňať obrázok 755 00:44:41,000 --> 00:44:42,860 a obraz je uteká od myši. 756 00:44:42,860 --> 00:44:43,810 Tak to je celkom v pohode. 757 00:44:43,810 --> 00:44:47,770 A upozornenie znova, je tu detekcia kolízií ešte tu. 758 00:44:47,770 --> 00:44:53,930 >> Tak, že je konečný malý demo som postavil tu. 759 00:44:53,930 --> 00:44:58,870 A poďme sa pozrieť na ešte jedna vec. 760 00:44:58,870 --> 00:45:02,970 Takže späť, som sa zmienil, toto chvenie. 761 00:45:02,970 --> 00:45:05,000 Dobre. 762 00:45:05,000 --> 00:45:12,890 Takže ak je vzdialenosť menšia než päť bodov, Bol som nastavenie x a y rýchlosti na nulu. 763 00:45:12,890 --> 00:45:15,960 Čo sa stane, keď sa zbavíme, že? 764 00:45:15,960 --> 00:45:19,070 Takže som sa to jednoducho urobiť. 765 00:45:19,070 --> 00:45:23,820 766 00:45:23,820 --> 00:45:30,150 Ospravedlňte prosím tento strašný štýl, ale my sme zakomentovány správny kód. 767 00:45:30,150 --> 00:45:38,080 Takže budem šetriť, že a vykonajte rovnaký príkaz od predtým, aby sa to. 768 00:45:38,080 --> 00:45:38,785 >> Dobre. 769 00:45:38,785 --> 00:45:39,660 A teraz, čo sa stane? 770 00:45:39,660 --> 00:45:43,260 771 00:45:43,260 --> 00:45:43,760 Dobre. 772 00:45:43,760 --> 00:45:45,801 Sme stále v nadväznosti na myš, rovnako ako predtým, 773 00:45:45,801 --> 00:45:49,310 ale keď sa dostaneme k myši, máme tento hrubý chvenie. 774 00:45:49,310 --> 00:45:50,320 Čo sa deje tam? 775 00:45:50,320 --> 00:45:52,600 No, v našom vektora matematika, pamätajte sme boli 776 00:45:52,600 --> 00:45:57,540 pričom vzdialenosť medzi kurzor a stred obrazu? 777 00:45:57,540 --> 00:46:00,710 No, ako to blíži 0, začneme dostať 778 00:46:00,710 --> 00:46:06,280 ako je tento druh bláznivé správanie kde je obraz druh 779 00:46:06,280 --> 00:46:08,910 ako oscilujúca okolo kurzora. 780 00:46:08,910 --> 00:46:12,000 A to vytvorenie tohto chvenie. 781 00:46:12,000 --> 00:46:13,020 A to je naozaj škaredý. 782 00:46:13,020 --> 00:46:15,103 A pravdepodobne nie Chcete, aby vaše hry, robiť to, 783 00:46:15,103 --> 00:46:17,350 ak to nie je nejaký špeciálny efekt. 784 00:46:17,350 --> 00:46:21,960 >> Takže to je dôvod, prečo máme práve tento svojvoľný 785 00:46:21,960 --> 00:46:27,150 odrezal z piatich bodov, kde hovoríme či je to do piatich bodov, sme dobrí. 786 00:46:27,150 --> 00:46:29,560 Nepotrebujeme, aby už posunutie obrazu. 787 00:46:29,560 --> 00:46:32,260 Takže to je to, čo sa tam deje. 788 00:46:32,260 --> 00:46:37,390 789 00:46:37,390 --> 00:46:40,870 >> Tak to je celkom veľa to. 790 00:46:40,870 --> 00:46:44,390 Teraz viete, ako vytvoriť okno, načítaní obrázka, 791 00:46:44,390 --> 00:46:49,330 nakresliť obrázok do okna, dostať vstup z klávesnice, myši vstup dostať, 792 00:46:49,330 --> 00:46:52,190 je tu veľa ďalších vstup, ktorý ste nechceli 793 00:46:52,190 --> 00:46:56,070 vedieť, ako sa dostať, ak ste práve stráviť pár minút pohľade na dokumentáciu. 794 00:46:56,070 --> 00:46:59,670 Takže ste skutočne celkom Niekoľko nástrojov, k dispozícii teraz 795 00:46:59,670 --> 00:47:01,650 písať plnohodnotnú hru. 796 00:47:01,650 --> 00:47:05,030 >> Teraz, každá hra potrebuje nejaký zvuk, ale zvuk dokumentácia 797 00:47:05,030 --> 00:47:06,460 Je tiež celkom dobrý. 798 00:47:06,460 --> 00:47:09,200 A ja som ochotný sa staviť, že v prípade, ste pochopili všetky veci, 799 00:47:09,200 --> 00:47:14,560 sme sa rozprávali o dnešku sa obrazy, a povrchy, 800 00:47:14,560 --> 00:47:18,370 okná, a všetko, potom zisťuje, audio API nie je 801 00:47:18,370 --> 00:47:21,170 bude tak zlé. 802 00:47:21,170 --> 00:47:27,420 Tak som sa tešiť čo vytvoríte pomocou SDL. 803 00:47:27,420 --> 00:47:31,595