1 00:00:00,000 --> 00:00:05,069 2 00:00:05,069 --> 00:00:06,110 THOMAS Lively: Rendben. 3 00:00:06,110 --> 00:00:07,450 Sziasztok. 4 00:00:07,450 --> 00:00:08,690 Én vagyok Thomas Lively. 5 00:00:08,690 --> 00:00:15,160 A szeminárium lesz írásban 2D játékok C-SDL. 6 00:00:15,160 --> 00:00:17,970 Szóval tudom, hogy minden kérve, igen, én tényleg 7 00:00:17,970 --> 00:00:22,050 akar játszani, és játékok, De mi is ez az SDL üzlet? 8 00:00:22,050 --> 00:00:25,320 Tehát SDL egy C könyvtár. 9 00:00:25,320 --> 00:00:28,270 Ez áll az egyszerű DirectMedia réteg. 10 00:00:28,270 --> 00:00:31,340 És ez egy több platformon, játékfejlesztés könyvtár. 11 00:00:31,340 --> 00:00:37,160 Úgy működik, a Windows, Mac, Linux, sőt iOS és az Android. 12 00:00:37,160 --> 00:00:40,380 Ez kezeli a dolgokat, mint hozzáférést biztosít az audio rendszerek 13 00:00:40,380 --> 00:00:44,900 A számítógép, a billentyűzet, és a egér, joystick, ha ők csatolták. 14 00:00:44,900 --> 00:00:48,300 A mobil, akkor is ezt a touch beviteli és minden adott. 15 00:00:48,300 --> 00:00:53,030 És persze, hogy kezeli a grafika, rajz dolgokat a képernyőn. 16 00:00:53,030 --> 00:00:56,470 >> Így nagyon széles körben használják, annak ellenére, lehet, hogy nem is hallottak róla korábban. 17 00:00:56,470 --> 00:01:00,860 Ez beépítve, például, Valve Source Engine, 18 00:01:00,860 --> 00:01:04,970 amely hatáskört játékok, mint a Portal és a Team Fortress 2. 19 00:01:04,970 --> 00:01:08,680 Ez is egy nagyon nagy szám Az indie játékok jönnek ki, 20 00:01:08,680 --> 00:01:13,545 így izgatott vagyok, hogy mit minden lesz így vele. 21 00:01:13,545 --> 00:01:20,000 >> A szeminárium célja az, hogy neked tűzte ki, hogy legyen a fejlődő SDL. 22 00:01:20,000 --> 00:01:22,700 Fogunk tanulni, hogyan hogy hozzon létre egy játék ablakot. 23 00:01:22,700 --> 00:01:26,130 Fogunk létrehozni sprite, amelyek a képek a játék 24 00:01:26,130 --> 00:01:27,744 hogy lehet mozogni. 25 00:01:27,744 --> 00:01:29,910 Fogunk tanulni, hogyan és animálni a sprite, 26 00:01:29,910 --> 00:01:32,910 így mozgatni őket körül, hogy ezek időről időre változnak. 27 00:01:32,910 --> 00:01:35,580 És fogunk tanulni, hogyan megragadni billentyűzet és egér 28 00:01:35,580 --> 00:01:38,240 bemenet a számítógépet. 29 00:01:38,240 --> 00:01:41,550 Mi nem fogunk beszélni a mai 3D-s grafika, 30 00:01:41,550 --> 00:01:45,520 mert ez egy nagyon bonyolult tárgya, hogy nem volt ideje. 31 00:01:45,520 --> 00:01:49,010 Nem fogjuk tanulni, hogyan kell hangfájlok lejátszására a játékunk. 32 00:01:49,010 --> 00:01:53,300 És nem fogunk épület semmit, de a Linux. 33 00:01:53,300 --> 00:01:58,330 >> Most a kifogások vannak, hogy Remélhetőleg végére a szeminárium, 34 00:01:58,330 --> 00:02:01,660 akkor kényelmes, Az SDL dokumentációt, 35 00:02:01,660 --> 00:02:05,370 így képes lesz arra, hogy menjen kitaláljuk hogyan kell játszani audio magad. 36 00:02:05,370 --> 00:02:12,150 Szintén az épület Mac vagy PC működnie kell pontosan ugyanaz, mint az épület Linux, 37 00:02:12,150 --> 00:02:14,700 de a telepítő fog egy kicsit más. 38 00:02:14,700 --> 00:02:17,700 Tehát meg kell tenni, hogy kitaláljuk hogyan kell csinálni ezeket a dolgokat 39 00:02:17,700 --> 00:02:20,900 végére a mai szemináriumon. 40 00:02:20,900 --> 00:02:26,980 >> Tehát a felállás, megyünk hogy egy virtuális gép. 41 00:02:26,980 --> 00:02:31,010 Mi is használja a CS50 IDE, mert mi csak lesz írásban C. 42 00:02:31,010 --> 00:02:35,120 De mivel az IDE nem a böngésző, akkor Nem hozhat létre új ablakokat, vagy kijelző 43 00:02:35,120 --> 00:02:36,410 kép, grafika. 44 00:02:36,410 --> 00:02:38,450 Tehát szükségünk van egy virtuális gép. 45 00:02:38,450 --> 00:02:47,790 Szóval lehet követni az utasításokat itt manual.CS50.net/appliance/15 46 00:02:47,790 --> 00:02:53,290 telepíteni a hivatalos CS50 készüléket, amely csupán a Linux virtuális 47 00:02:53,290 --> 00:02:55,110 gép. 48 00:02:55,110 --> 00:02:58,090 >> És akkor, ha már hogy minden beállított up-- meg 49 00:02:58,090 --> 00:03:02,090 Lehet, hogy egy kis időre, mert egy nagyon nagy download-- fogsz 50 00:03:02,090 --> 00:03:07,060 fut a VM sudo apt-get update. 51 00:03:07,060 --> 00:03:09,410 És ez folyik valójában frissíteni az összes szoftver 52 00:03:09,410 --> 00:03:12,670 csomagokat a virtuális gép. 53 00:03:12,670 --> 00:03:20,130 >> Ezután, meg fogsz futni sudo apt-get install, libsdl2-2.0-0, 54 00:03:20,130 --> 00:03:27,960 libsdl2-dbg, libsdl2-dev, és emellett libsdl2-image-2,0-0, 55 00:03:27,960 --> 00:03:32,560 libsdl2-image-dbg, és libsdl2-image-dev. 56 00:03:32,560 --> 00:03:33,640 Tehát mit tegyek? 57 00:03:33,640 --> 00:03:38,440 Ezzel ugyanis telepíti a hibakeresés információt, dokumentációt, fejlécek, 58 00:03:38,440 --> 00:03:41,260 és bináris fájlok két könyvtárban. 59 00:03:41,260 --> 00:03:45,090 Rendszeres régi, SDL 2.0, és egy másik könyvtárba 60 00:03:45,090 --> 00:03:50,110 nevű SDL kép, amely fogunk használni 61 00:03:50,110 --> 00:03:54,560 betölteni a képfájlokat a játékunkat. 62 00:03:54,560 --> 00:03:57,860 >> Tehát ha egyszer már, hogy is hogy éppen akkor, amikor azt kérdezi, 63 00:03:57,860 --> 00:04:01,100 csak írja igen, az Enter leütése telepíteni ezeket a csomagokat, 64 00:04:01,100 --> 00:04:04,430 és akkor jó lesz menni. 65 00:04:04,430 --> 00:04:14,800 Tehát, hogy a forgalmazási kódot, can-- ó drága, ez nem frissül. 66 00:04:14,800 --> 00:04:18,480 Kivéve, ha van egy GitHub account-- ha van egy GitHub véve, 67 00:04:18,480 --> 00:04:24,450 akkor ezt Git klón parancsot a repo 68 00:04:24,450 --> 00:04:30,490 és hogy letölti a Git repo az összes kódot is, 69 00:04:30,490 --> 00:04:31,700 így neked kell a kódot. 70 00:04:31,700 --> 00:04:36,470 >> Ha nincs GitHub véve, mit kell tennie, hogy írja 71 00:04:36,470 --> 00:04:48,867 wgithttps: //github.com/tlively/sdl seminar-- és itt ez 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 Tehát újra, ez pontosan ugyanaz a URL, kivéve, hogy lesz 75 00:04:59,220 --> 00:05:09,010 tlively / SDL_seminar / master.zip és Ön használ wgit letölteni ezt. 76 00:05:09,010 --> 00:05:12,940 És akkor csak csomagold ki, hogy archív 77 00:05:12,940 --> 00:05:14,900 és akkor lesz a teljes forráskódot. 78 00:05:14,900 --> 00:05:17,580 Annyira sajnálom. 79 00:05:17,580 --> 00:05:23,880 És akkor a kód is házigazdája A CS50 szeminárium honlapján egy pár 80 00:05:23,880 --> 00:05:25,230 nap. 81 00:05:25,230 --> 00:05:26,590 >> Minden rendben. 82 00:05:26,590 --> 00:05:29,932 Szóval hogyan lehet elkezdeni írásban a saját játékát? 83 00:05:29,932 --> 00:05:31,890 Nos, az első dolog, fogunk akarok 84 00:05:31,890 --> 00:05:34,740 van nézd meg az SDL dokumentációt. 85 00:05:34,740 --> 00:05:37,020 Tehát itt a VM. 86 00:05:37,020 --> 00:05:38,720 És itt van a weboldalt. 87 00:05:38,720 --> 00:05:40,340 Már navigált élni libsdl.org. 88 00:05:40,340 --> 00:05:43,110 89 00:05:43,110 --> 00:05:48,140 Mit fogok csinálni itt megy át a tálaló mellett dokumentációt, 90 00:05:48,140 --> 00:05:51,040 és kattintson a wiki. 91 00:05:51,040 --> 00:05:56,870 Ez hozza meg, hogy a wiki, hogy van a legtöbb a dokumentáció SDL. 92 00:05:56,870 --> 00:06:01,360 Több mint a tálaló itt vagyunk fog kattintson API kategória, 93 00:06:01,360 --> 00:06:04,300 mert fog adni nekünk egy szép kilátás kategorikus 94 00:06:04,300 --> 00:06:07,770 A teljes API SDL. 95 00:06:07,770 --> 00:06:12,390 >> Így például, hogy van Az alap indítása 96 00:06:12,390 --> 00:06:18,380 és állítsa le az összes fajta igazgatási cucc SDL-t használó, 97 00:06:18,380 --> 00:06:21,630 és akkor mi van a szakaszt megjelenítésére dolgokat a képernyőn. 98 00:06:21,630 --> 00:06:23,000 Ez a videó. 99 00:06:23,000 --> 00:06:25,790 Bemeneti eseményeket, ez egyre közreműködött a billentyűzet, 100 00:06:25,790 --> 00:06:29,710 egyre bemenet a képre, és A joystick, ha van még. 101 00:06:29,710 --> 00:06:32,901 Van force feedback a dolgokat mint a játékvezérlők, amely 102 00:06:32,901 --> 00:06:34,150 nem fogunk beszélni. 103 00:06:34,150 --> 00:06:35,630 És itt van hang. 104 00:06:35,630 --> 00:06:38,940 És akkor ott van egy csomó más cucc, ami SDL tehet érted. 105 00:06:38,940 --> 00:06:43,830 >> De ma megyünk összpontosítani A inicializálás itt, 106 00:06:43,830 --> 00:06:48,332 képeket jelenít meg a videót rész, és kezelési bemeneti eseményeket. 107 00:06:48,332 --> 00:06:50,290 Tehát ezek a fő szakaszain dokumentáció 108 00:06:50,290 --> 00:06:53,050 hogy meg kell aggódni. 109 00:06:53,050 --> 00:06:57,170 Just for fun, ha átmegyünk Itt és kattintson API megnevezés, 110 00:06:57,170 --> 00:07:04,350 látunk egy listát minden Egyetlen dolog a SDL könyvtárat. 111 00:07:04,350 --> 00:07:11,330 Tehát mindezeket a funkciókat, felsorolások, struktúrákat, egy őrült mennyiségű cucc, 112 00:07:11,330 --> 00:07:12,820 ábécé sorrend. 113 00:07:12,820 --> 00:07:14,580 És világosan, amíg tudod, mit csinálsz, 114 00:07:14,580 --> 00:07:19,100 ez nem lesz túl hasznos, ezért teszünk API kategória. 115 00:07:19,100 --> 00:07:20,810 >> Szóval kezdjük. 116 00:07:20,810 --> 00:07:25,680 Remélhetőleg akkor már Letöltöttem a forgalmazás kódot. 117 00:07:25,680 --> 00:07:30,070 És így mit tehetünk, jobb itt a CS50 készüléket, 118 00:07:30,070 --> 00:07:31,150 egyszerűen nyiss egy terminált. 119 00:07:31,150 --> 00:07:33,750 120 00:07:33,750 --> 00:07:34,440 Essünk neki. 121 00:07:34,440 --> 00:07:40,740 Szóval már letöltötte a forgalmazás kódot a .zip 122 00:07:40,740 --> 00:07:41,690 módszer. 123 00:07:41,690 --> 00:07:43,140 És én már kicsomagolt azt. 124 00:07:43,140 --> 00:07:46,120 Tehát itt van a SDL szemináriumon mester. 125 00:07:46,120 --> 00:07:49,750 Így fogok menni ebbe a könyvtárba. 126 00:07:49,750 --> 00:07:55,310 És mit látunk itt hogy mi hét C-fájlok. 127 00:07:55,310 --> 00:07:58,070 És ez lesz a kód fogunk vizsgálni ma. 128 00:07:58,070 --> 00:08:00,040 Van egy makefile. 129 00:08:00,040 --> 00:08:06,950 És van egy erőforrás könyvtár, amely egyszerűen egy kép 130 00:08:06,950 --> 00:08:09,070 hogy máris látni elég hamar. 131 00:08:09,070 --> 00:08:16,060 >> Szóval nyitni ezeket a fájlokat A g-Edit szerkesztő. 132 00:08:16,060 --> 00:08:22,000 Szóval azt akarom megnyitni azokat a fájlokat Először is köszönjön, és véget .c. 133 00:08:22,000 --> 00:08:23,380 Essünk neki. 134 00:08:23,380 --> 00:08:28,180 Szóval ez egy apró ablak, így vagyunk megpróbálom, hogy ezt a nagyobb. 135 00:08:28,180 --> 00:08:28,900 Nem, elment. 136 00:08:28,900 --> 00:08:32,836 137 00:08:32,836 --> 00:08:34,570 >> Minden rendben. 138 00:08:34,570 --> 00:08:37,959 Tehát itt a legelső fájlt fogunk nézni. 139 00:08:37,959 --> 00:08:39,000 Úgy hívják hello1_sdl.c. 140 00:08:39,000 --> 00:08:41,890 141 00:08:41,890 --> 00:08:47,980 És mindez nem az, formázza meg a SDL könyvtár, hogy mi is elindíthatjuk. 142 00:08:47,980 --> 00:08:51,550 Honnan tudod, hogy jöjjön fel ezt a kódot magad? 143 00:08:51,550 --> 00:08:53,850 Nos, ha megnézzük alatt A dokumentációt 144 00:08:53,850 --> 00:08:58,040 és bemegy az inicializálás és állítsa le a rész, 145 00:08:58,040 --> 00:09:02,230 ez fog mondani minden hogyan kell inicializálni SDL. 146 00:09:02,230 --> 00:09:06,630 Tehát feltétlenül olvassa el ezt egy másik alkalommal. 147 00:09:06,630 --> 00:09:09,230 Meg fog mondani mindent arról, hogy mi folyik itt. 148 00:09:09,230 --> 00:09:14,360 De a fő dolog bökkenője az, hogy meg kell hívni ezt a funkciót SDL In It 149 00:09:14,360 --> 00:09:18,910 és adja át milyen dolog szeretnénk a könyvtárat inicializálni. 150 00:09:18,910 --> 00:09:23,620 Tehát a mi esetünkben, mi csak megy elindítani a videót most, 151 00:09:23,620 --> 00:09:26,690 hogy mi lehet kezdeni képek megjelenítésére. 152 00:09:26,690 --> 00:09:32,370 >> Több mint itt, akkor láthatja, ha rákattintunk egy SDL-t, mi 153 00:09:32,370 --> 00:09:36,160 lehet, hogy még több információt, beleértve a visszatérési érték. 154 00:09:36,160 --> 00:09:39,050 Tehát azt látjuk, hogy itt ez returnes nulla sikerrel. 155 00:09:39,050 --> 00:09:43,320 Tehát a mi kódot, megyünk nézd meg, hogy nem tér vissza nullára, 156 00:09:43,320 --> 00:09:47,020 és ha ez nem tér vissza nulla, ezért nem volt sikeres, 157 00:09:47,020 --> 00:09:50,650 akkor megyünk egyszerűen print egy hiba segítségével ez az egyéb funkció, 158 00:09:50,650 --> 00:09:56,260 SDL kapok, amely visszaadja a karakterlánc leírja, a hibát. 159 00:09:56,260 --> 00:09:58,510 Fogunk nyomtatni, hogy hiba, majd mi csak 160 00:09:58,510 --> 00:10:02,270 majd kilép a programból hibaüzenettel. 161 00:10:02,270 --> 00:10:06,470 >> Aztán egy másik dolog, hogy meg kell tennie, mielőtt program kilép, 162 00:10:06,470 --> 00:10:10,830 ha sikerült inicializálni SDL, csak meg kell nevezni az SDL kilép. 163 00:10:10,830 --> 00:10:15,750 És hogy fog kezelni megtisztítása minden SDL belső erőforrások velünk. 164 00:10:15,750 --> 00:10:21,240 Így a dokumentáció there-- újra, Itt vagyunk az indító 165 00:10:21,240 --> 00:10:23,640 és állítsa le a rész A dokumentáció. 166 00:10:23,640 --> 00:10:26,680 Akkor csak kattints a Ugyanis itt, SDL kilép, 167 00:10:26,680 --> 00:10:28,700 és akkor olvassuk el azt is. 168 00:10:28,700 --> 00:10:31,400 És sok ilyen funkció dokumentáció oldalak 169 00:10:31,400 --> 00:10:35,630 Van példa kód, így ez a nagyon jó forrás. 170 00:10:35,630 --> 00:10:39,610 Határozottan eltölteni egy kis időt olvasás részei ennek a wiki 171 00:10:39,610 --> 00:10:42,520 ha meg akarsz csinálni ez a projekt. 172 00:10:42,520 --> 00:10:43,760 >> Minden rendben. 173 00:10:43,760 --> 00:10:46,590 Szóval ez az egész programot. 174 00:10:46,590 --> 00:10:53,935 Mit tehetünk most is-- vagyok nyitod a Makefile Itt, 175 00:10:53,935 --> 00:10:56,150 így fogok arra, hogy egy nézd meg, hogy hogyan működik. 176 00:10:56,150 --> 00:10:59,500 És ez egy nagyon egyszerű makefile, hasonló ahhoz, amit eddig láttam. 177 00:10:59,500 --> 00:11:04,010 Az egyik fő különbség az, hogy itt, ebben a 178 00:11:04,010 --> 00:11:07,870 fog szúrni elért eredmény a A parancs, amelyekről már 179 00:11:07,870 --> 00:11:10,850 telepített ha telepített SDL. 180 00:11:10,850 --> 00:11:13,230 És ez egy parancs hogy fog generálni 181 00:11:13,230 --> 00:11:16,710 néhány extra zászlókat a fordító számára. 182 00:11:16,710 --> 00:11:22,050 >> Amellett, hogy, hogy mi így ez a szokásos parancsokat, valamint a 183 00:11:22,050 --> 00:11:23,430 ez a két parancs. 184 00:11:23,430 --> 00:11:30,270 Tehát a -lsdl2-kép fogantyúk összekapcsolása a SDL könyvtár. 185 00:11:30,270 --> 00:11:36,200 És a -lm ténylegesen kezeli összekapcsolása A szabványos C matematikai könyvtárat. 186 00:11:36,200 --> 00:11:40,630 Tehát nem lesz szüksége azok minden kedves C-fájlok, 187 00:11:40,630 --> 00:11:43,900 de mi csak tedd, hogy tudjuk használja ugyanazt a Makefile mindent 188 00:11:43,900 --> 00:11:44,816 módosítások nélkül. 189 00:11:44,816 --> 00:11:46,970 190 00:11:46,970 --> 00:11:50,080 >> Több mint itt a források, ez hol lenne 191 00:11:50,080 --> 00:11:53,680 tenni a fájlokat, hogy meg fogjátok összeállításához a projekt. 192 00:11:53,680 --> 00:11:57,570 De mivel minden az én egyik C fájlokat innen van egy fő funkciója, 193 00:11:57,570 --> 00:12:00,000 ez meg fog összezavarodnak ha tegyük mindegyiket. 194 00:12:00,000 --> 00:12:06,930 Így fogok csak annyit, most, hello1_sdl.c, 195 00:12:06,930 --> 00:12:11,150 ami az, amit csak nézett. 196 00:12:11,150 --> 00:12:18,740 Tehát, ha megyek vissza több Itt, amit tehetek, hogy. 197 00:12:18,740 --> 00:12:22,160 És mit tett ez csak összeállított, hogy az első fájl. 198 00:12:22,160 --> 00:12:28,780 És akkor mi is írja ./game, mert ez a végrehajtható produkált. 199 00:12:28,780 --> 00:12:31,660 És ez az volt nyomtatási inicializálás sikeres. 200 00:12:31,660 --> 00:12:33,300 Így tettünk valamit jól. 201 00:12:33,300 --> 00:12:36,200 De ez már unalmas, mert nem láttunk egy ablakot, 202 00:12:36,200 --> 00:12:37,900 semmi körül mozgott. 203 00:12:37,900 --> 00:12:41,030 >> Szóval jó, van SDL inicializálni. 204 00:12:41,030 --> 00:12:43,520 Most pedig nézzük lépni valami egy kicsit érdekes. 205 00:12:43,520 --> 00:12:54,700 Tehát itt van hello2_window.c, és ez lesz valamivel 206 00:12:54,700 --> 00:13:00,010 komplex C programot, amely inicializálja SDL mint korábban, 207 00:13:00,010 --> 00:13:04,250 kivéve, hogy most mi is lesz inicializálni SDL időmérőt. 208 00:13:04,250 --> 00:13:07,720 És ez meg fog hadd hozzáférni a belső időzítő 209 00:13:07,720 --> 00:13:10,550 és használatára vonatkozó feladatát időt. 210 00:13:10,550 --> 00:13:11,920 >> És akkor nézzük le ide. 211 00:13:11,920 --> 00:13:16,840 Amit mi csinálunk itt van ez a mutató egy SDL ablakban struktúra, amely 212 00:13:16,840 --> 00:13:21,160 lesz készítette ezt a hívást A funkció, SDL létre ablakot. 213 00:13:21,160 --> 00:13:25,380 Most, hogy ez sok érvet, szóval menjünk nézd meg a dokumentációt. 214 00:13:25,380 --> 00:13:27,930 Szóval megint megyek API kategória, én vagyok 215 00:13:27,930 --> 00:13:33,820 lement a videót itt, és az első rész, megjelenítő ablakot menedzsment. 216 00:13:33,820 --> 00:13:36,470 Tehát ez a rész egy csomó cucc benne, 217 00:13:36,470 --> 00:13:39,970 de ha megnézed a ezeket a funkciókat, akkor 218 00:13:39,970 --> 00:13:43,620 látom, hogy valószínűleg az, amit szeretnénk hívják SDL létre ablakban 219 00:13:43,620 --> 00:13:46,600 amely történetesen igaza van a tetején. 220 00:13:46,600 --> 00:13:49,080 >> És így ez a Ennek a funkciónak. 221 00:13:49,080 --> 00:13:53,710 Az ablak megy, hogy egy címet, egy x és y pozícióját a képernyőn, 222 00:13:53,710 --> 00:13:56,960 ez meg fog szélessége, magassága, és akkor fog telni néhány zászlókat. 223 00:13:56,960 --> 00:14:01,220 Most, mi valójában nem érdekel ezek közül bármelyik zászlók most, 224 00:14:01,220 --> 00:14:04,560 de ha akartam csinálni valamit mint hogy egy teljes képernyős ablakot, 225 00:14:04,560 --> 00:14:07,920 ha lehetne egy pillantást arra. 226 00:14:07,920 --> 00:14:13,190 Egyelőre mi csak megy hogy ezeket a különleges értékek, 227 00:14:13,190 --> 00:14:18,775 SDL ablakban plusz központú X és Y érdekében 228 00:14:18,775 --> 00:14:21,800 hogy csak teremt az ablakon közepén a képernyőn. 229 00:14:21,800 --> 00:14:24,370 >> Szóval ezt, hogy csinál. 230 00:14:24,370 --> 00:14:27,960 És ha történetesen ablakban null, ami azt jelenti, van egy hiba, 231 00:14:27,960 --> 00:14:32,570 aztán megint mi csak fog nyomtassa ki a hibát használ SDL kapok. 232 00:14:32,570 --> 00:14:36,570 És akkor azért, mert inicializáltuk SDL, most kell bezárni. 233 00:14:36,570 --> 00:14:40,900 Így hívjuk SDL kilép, mielőtt vissza az egyik fő. 234 00:14:40,900 --> 00:14:42,905 >> Tehát van nyitva ez az ablak reménykedve. 235 00:14:42,905 --> 00:14:44,613 És mit fogunk tennie, hogy megyünk 236 00:14:44,613 --> 00:14:50,340 hívni SDL 5000 milliszekundum, ami ugyanaz, mint öt másodperc. 237 00:14:50,340 --> 00:14:55,640 És ha végeztünk azzal, ez meg fog pusztítani az ablakon, 238 00:14:55,640 --> 00:14:59,470 tisztítsák meg az SDL könyvtárat, és kilép a programból. 239 00:14:59,470 --> 00:15:05,240 Szóval menjünk előre, és ad, hogy egy lövés. 240 00:15:05,240 --> 00:15:08,660 >> Tehát most módosítása helyett A makefile minden alkalommal, 241 00:15:08,660 --> 00:15:12,180 Én egyszerűen nem teszik meg, és a majd a parancssorban, 242 00:15:12,180 --> 00:15:16,090 mondjuk források megegyeznek az ÉS, majd A fájl vagyunk összeállításában. 243 00:15:16,090 --> 00:15:17,090 Szóval ez hello2_window.c. 244 00:15:17,090 --> 00:15:21,390 245 00:15:21,390 --> 00:15:21,890 Fantasztikus. 246 00:15:21,890 --> 00:15:22,970 Nem erros. 247 00:15:22,970 --> 00:15:26,085 Most, ha futunk végrehajtható, látjuk ezt az ablakot. 248 00:15:26,085 --> 00:15:27,960 Most van néhány Gondok vannak az ablakot. 249 00:15:27,960 --> 00:15:32,820 Mi lehet mozgatni, de van Ennek fényében junk belsejébe. 250 00:15:32,820 --> 00:15:34,660 Tehát mi nem húzott semmit, és így 251 00:15:34,660 --> 00:15:38,210 Csak tele van szeméttel, amely nagyjából mi várunk. 252 00:15:38,210 --> 00:15:41,010 >> Továbbá, mi nem zárja be az ablakot. 253 00:15:41,010 --> 00:15:44,780 Én megnyomásával ezt az X sarok és semmi sem történik. 254 00:15:44,780 --> 00:15:47,840 Szóval majd meglátjuk, hogyan kell rögzíteni hogy egy kicsit. 255 00:15:47,840 --> 00:15:51,750 Úgyhogy erősít az a része, ahol a ablak tele van szeméttel először. 256 00:15:51,750 --> 00:16:00,850 Tehát, ha átmegyünk hello3_image.c, mit láthatjuk, hogy mi felvettünk pár 257 00:16:00,850 --> 00:16:03,360 több dolgot itt. 258 00:16:03,360 --> 00:16:08,740 Már hozzá az új fejléc fájlt, hogy az időzítő funkció. 259 00:16:08,740 --> 00:16:11,490 Azt hiszem, ezt tettük az elmúlt az egyik is, és én nem említette. 260 00:16:11,490 --> 00:16:13,550 De most, mert mi vagyunk képekkel dolgozik, 261 00:16:13,550 --> 00:16:18,720 megfelelően fel kell tüntetni az SDL A kép header fájlt is. 262 00:16:18,720 --> 00:16:22,087 Szóval ez ugyanaz, mint a előtt, inicializálás SDL itt, 263 00:16:22,087 --> 00:16:23,420 ugyanolyan foglalkozik létrehozása ablak. 264 00:16:23,420 --> 00:16:25,380 Láttuk, hogy mielőtt őt. 265 00:16:25,380 --> 00:16:29,870 >> Most arra van szükség, hogy hozzon létre egy úgynevezett A megjelenítő, amely egyfajta halad 266 00:16:29,870 --> 00:16:30,800 ablak mellett. 267 00:16:30,800 --> 00:16:33,860 De ez egy fajta absztrakt objektum, ami 268 00:16:33,860 --> 00:16:37,370 felelős csinál mindezen rajzműveletek az ablakhoz. 269 00:16:37,370 --> 00:16:41,580 És ez valóban megfelel a program betöltése 270 00:16:41,580 --> 00:16:47,880 a grafikus hardver a számítógépen vagy a telefonon, vagy bármi. 271 00:16:47,880 --> 00:16:51,005 Tehát a zászlók szeretnénk átadni it-- és akkor nézd meg a dokumentációt 272 00:16:51,005 --> 00:16:56,160 hogy minél több részletet here-- mennek kell SDL tehetik felgyorsult, ami 273 00:16:56,160 --> 00:16:58,550 azt jelenti, hogy lesz használja a grafikus hardver 274 00:16:58,550 --> 00:17:01,490 és nem csak emulált szoftver. 275 00:17:01,490 --> 00:17:07,390 >> És fogunk használni SDL renderer PRESENTVSYNC. 276 00:17:07,390 --> 00:17:12,280 VSYNC egy dolog, hogy egyszerűen csak teszi A grafikus jobban néz ki, és megakadályozza 277 00:17:12,280 --> 00:17:14,970 ezt a dolgot nevezett képernyőn terror, ahol a fele 278 00:17:14,970 --> 00:17:17,720 Egy keret és a fele a következő keret kap húzott egyidejűleg 279 00:17:17,720 --> 00:17:20,056 és úgy néz ki, rettenetes. 280 00:17:20,056 --> 00:17:23,130 De újra, akkor menj olvasni arról, hogy a saját. 281 00:17:23,130 --> 00:17:24,319 >> Így van némi zászlók itt. 282 00:17:24,319 --> 00:17:27,810 És így mi csak akartam hívni Ezt a funkciót SDL létre renderelő. 283 00:17:27,810 --> 00:17:31,340 Megyünk, hogy ez az ablak társítani, hogy renderelő. 284 00:17:31,340 --> 00:17:34,520 Negatív azt jelenti, hogy nem érdekel, hogy mit grafikus driver fogunk használni. 285 00:17:34,520 --> 00:17:36,603 Tehát, hogy amennyiben elég sok mindig negatív: 286 00:17:36,603 --> 00:17:39,010 hacsak nem tudni grafikus vezérlő. 287 00:17:39,010 --> 00:17:41,650 És akkor mi csak megy hogy adja át a zászlókat. 288 00:17:41,650 --> 00:17:47,240 Tehát ha null értéket ad vissza, akkor nem vagyunk szeretnénk nyomtatni a hibát, mint rendesen, 289 00:17:47,240 --> 00:17:49,550 de akkor mi is lesz hogy elpusztítsa az ablakon 290 00:17:49,550 --> 00:17:54,970 hogy tisztítsák meg azokat a forrásokat, mielőtt hív SDL kilép, és visszatérnek. 291 00:17:54,970 --> 00:17:58,110 >> Most, az érdekes rész itt ahol mi betölteni a képet 292 00:17:58,110 --> 00:18:00,870 A funkció használata IMG_load. 293 00:18:00,870 --> 00:18:04,050 Ez az egyetlen funkciója megyünk használja a SDL könyvtár. 294 00:18:04,050 --> 00:18:05,480 Ez az egyetlen, amire szükségünk van. 295 00:18:05,480 --> 00:18:12,950 Ez egy funkciója, amely során a húr hogy az az út, minden kép forrás. 296 00:18:12,950 --> 00:18:18,024 És ez lehet egy PNG, GIF, bitmap, semmilyen ezeket a dolgokat. 297 00:18:18,024 --> 00:18:19,690 És ez az, amiért ez a funkció, így szép. 298 00:18:19,690 --> 00:18:22,560 Meg tudja kezelni elég sok olyan formátumban. 299 00:18:22,560 --> 00:18:27,240 Betölti a memóriába, és eltárolja mint egy dologban egy SDL felületre. 300 00:18:27,240 --> 00:18:34,660 >> Most egy SDL felülete csupán egy struct amely képviseli a kép adatokat a memóriába. 301 00:18:34,660 --> 00:18:38,054 Szóval lehet többet megtudni hogy a dokumentációban kettő. 302 00:18:38,054 --> 00:18:40,720 És ha ez a hiba, akkor nem vagyunk fog csinálni az egészet, ahol 303 00:18:40,720 --> 00:18:44,480 kiírjuk a hibát, zárja be a erőforrásokat, majd lépjen ki a programból. 304 00:18:44,480 --> 00:18:48,970 Most az érdekes dolog, mielőtt tudjuk felhívni ezt a képet az ablak, 305 00:18:48,970 --> 00:18:51,390 azt kell, hogy ténylegesen, hogy ez egy textúra. 306 00:18:51,390 --> 00:18:54,460 Most egy textúra megfelel a képadatok betöltött 307 00:18:54,460 --> 00:18:57,820 a grafikus hardver memóriáját. 308 00:18:57,820 --> 00:19:00,720 >> Tehát egy felület a fő memória, rendszeres memória 309 00:19:00,720 --> 00:19:05,550 hogy a korábban használt összes félévben, és textúra e különálló VRAM 310 00:19:05,550 --> 00:19:09,410 memória, hogy a grafikus kártya ellenőrzése. 311 00:19:09,410 --> 00:19:13,170 Így hívjuk ezt a funkciót SDL_CreateTextureFromSurface. 312 00:19:13,170 --> 00:19:17,104 Mi minden tőlünk renderelő és a felületre. 313 00:19:17,104 --> 00:19:19,020 És akkor mi vagyunk a ténylegesen történik a felszínen, 314 00:19:19,020 --> 00:19:20,311 úgyhogy most megyek kiszabadítani. 315 00:19:20,311 --> 00:19:22,210 Nem kell többé. 316 00:19:22,210 --> 00:19:26,650 És akkor így ha ezt a hívást errored és visszatért null, 317 00:19:26,650 --> 00:19:29,630 akkor fogunk csinálni az egész hibajelentés dolog újra. 318 00:19:29,630 --> 00:19:30,920 >> Minden rendben. 319 00:19:30,920 --> 00:19:34,810 Itt most megkapjuk a néhány aktuális képi funkciók. 320 00:19:34,810 --> 00:19:37,730 Szóval hívja SDL_RenderClear és átadása 321 00:19:37,730 --> 00:19:42,550 A renderelő kapcsolódó ablakunk egyszerűen csak teszi az ablak elsötétül. 322 00:19:42,550 --> 00:19:47,650 Tehát eltávolítja, hogy a szemetet, hogy láttuk ablakunk előtt, és teszi a fekete. 323 00:19:47,650 --> 00:19:50,750 Aztán megyünk hívni SDL_RenderCopy, 324 00:19:50,750 --> 00:19:53,010 hogy ez a megjelenítő, mi textúra. 325 00:19:53,010 --> 00:19:55,800 És fogunk beszélni, hogy mit ezeken a területeken vannak egy kicsit. 326 00:19:55,800 --> 00:19:57,830 De hogy fog hogy a textúra adatok 327 00:19:57,830 --> 00:20:03,100 és másold rá is ablak felhívni a képet. 328 00:20:03,100 --> 00:20:07,020 Tehát miután tettünk ezt a példányt Az adat-ra ablakunk, 329 00:20:07,020 --> 00:20:11,180 meg kell tennünk ezt a plusz funkciója nevű SDL_RenderPresent. 330 00:20:11,180 --> 00:20:15,360 >> És ez érdekes mert ez lesz 331 00:20:15,360 --> 00:20:18,770 egy téma az úgynevezett kettős pufferelés. 332 00:20:18,770 --> 00:20:24,380 Tehát kettős pufferelés olyan technika, amely teszi a grafikus sokkal jobban néz ki. 333 00:20:24,380 --> 00:20:28,240 Ismét megakadályozza, hogy a képernyőn könnyezés Beszéltem korábban, ahol 334 00:20:28,240 --> 00:20:29,590 van két pufferek. 335 00:20:29,590 --> 00:20:32,260 Van egy hátsó puffer memória és egy elülső puffer. 336 00:20:32,260 --> 00:20:36,410 Az első puffer szó mi van a képernyőn abban a pillanatban. 337 00:20:36,410 --> 00:20:42,070 Tehát mi ezeket a változatokat dolgozzon, mint az SDL tehetik másolatot vagy SDL_RenderClear 338 00:20:42,070 --> 00:20:43,080 a hátsó puffer. 339 00:20:43,080 --> 00:20:44,800 Így módosítja a dolgokat a hátsó puffer. 340 00:20:44,800 --> 00:20:48,970 Itt lehet rajz ezt zöld négyzet a hátsó puffer. 341 00:20:48,970 --> 00:20:52,300 >> Így aztán ha megvagyunk csinál mi teszi műveletek, amelyek 342 00:20:52,300 --> 00:20:55,700 Lehet, hogy egy nagyon hosszú ideje, mit fogunk csinálni 343 00:20:55,700 --> 00:20:57,860 van váltani a pufferek. 344 00:20:57,860 --> 00:21:00,720 Tehát szó szerint csak úgy elülső puffer és a hátsó puffer 345 00:21:00,720 --> 00:21:02,990 és kapcsolók őket, így hogy azonnal, 346 00:21:02,990 --> 00:21:06,630 egy műveletben, ahelyett, Talán száz vagy több ezer, 347 00:21:06,630 --> 00:21:10,910 Minden újonnan nyújtott tárgyak a képernyőn. 348 00:21:10,910 --> 00:21:13,160 És ez megakadályozza a dolgokat mint a képernyőn frissítő 349 00:21:13,160 --> 00:21:16,710 amikor már csak a fele húzott A tárgyaink a keret. 350 00:21:16,710 --> 00:21:21,280 Tehát ezért kell hívnunk SDL_RenderPresent, valamint 351 00:21:21,280 --> 00:21:23,320 mint SDL_RenderCopy. 352 00:21:23,320 --> 00:21:25,749 >> Ismét mi csak megy hogy várjon öt másodpercet. 353 00:21:25,749 --> 00:21:27,540 Aztán megyünk tisztítsák meg a források. 354 00:21:27,540 --> 00:21:29,540 Van jó néhány még ebben az időben. 355 00:21:29,540 --> 00:21:31,750 És akkor mi csak megy A kilépéshez. 356 00:21:31,750 --> 00:21:35,350 Tehát lássuk, hogy. 357 00:21:35,350 --> 00:21:41,880 Megyek írja make, majd forrásokból egyenlő hello-- ez most 3image.c. 358 00:21:41,880 --> 00:21:49,632 359 00:21:49,632 --> 00:21:52,240 Rendben, hogy össze nem hiba. 360 00:21:52,240 --> 00:21:57,210 És itt láthatjuk, én már most húzott ki a képemet, Hello, CS50! 361 00:21:57,210 --> 00:22:00,560 hogy mi ablakot, amely eltűnik öt másodperc után. 362 00:22:00,560 --> 00:22:02,090 >> Nos, ez még vannak problémái, ugye? 363 00:22:02,090 --> 00:22:05,750 Ez nem egy jó alkalmazás, mert amikor megpróbálja bezárni az ablakot, 364 00:22:05,750 --> 00:22:06,500 semmi nem történik. 365 00:22:06,500 --> 00:22:09,540 Hogy x még mindig nem reagál. 366 00:22:09,540 --> 00:22:17,420 Szóval vessünk egy pillantást a következő kép, hello4animation. 367 00:22:17,420 --> 00:22:21,850 Tehát ez a fájl hogy fog bevezetni 368 00:22:21,850 --> 00:22:25,124 mozgó és a mozgás a képünket. 369 00:22:25,124 --> 00:22:27,040 Mi is így fogjuk csinálni a ugyanaz, mint korábban, 370 00:22:27,040 --> 00:22:30,190 kezdeményezni SDL, hozzon létre a ablakban hozza létre a megjelenítő, 371 00:22:30,190 --> 00:22:33,030 betölteni a képet memória, hozza létre a textúrát. 372 00:22:33,030 --> 00:22:35,090 Láttuk az összes ilyet. 373 00:22:35,090 --> 00:22:36,770 Nos, ez új. 374 00:22:36,770 --> 00:22:42,305 Fogunk még egy úgynevezett Egy SDL len, amely csak egy téglalapot. 375 00:22:42,305 --> 00:22:49,950 Ha átmegyünk itt, tudjuk nem a keresés a SDL rect, 376 00:22:49,950 --> 00:22:54,040 és láthatjuk, hogy ez egy nagyon egyszerű szerkezet. 377 00:22:54,040 --> 00:22:56,760 Meg van egy X, A y a pozíció, és azt 378 00:22:56,760 --> 00:23:02,080 van szélessége és magassága a a méret a téglalap. 379 00:23:02,080 --> 00:23:07,785 >> Szóval, mit fogunk csinálni a mi fogja meghatározni ezt az SDL len cél, 380 00:23:07,785 --> 00:23:09,480 az úti cél. 381 00:23:09,480 --> 00:23:14,130 És ez az a hely a képernyőn, ahol 382 00:23:14,130 --> 00:23:16,005 mi lesz rajz mi kép jobb így 383 00:23:16,005 --> 00:23:17,880 ha már lesz mozog a kép körül, 384 00:23:17,880 --> 00:23:20,300 akkor a hely, ahol fogjuk hívni a kép 385 00:23:20,300 --> 00:23:22,620 kell mozogni. 386 00:23:22,620 --> 00:23:24,910 Mi is így fogjuk hívni ezt funkciót SDL_QueryTexture. 387 00:23:24,910 --> 00:23:27,550 388 00:23:27,550 --> 00:23:33,500 És észre én halad a címet A dest.w, amely a szélesség, 389 00:23:33,500 --> 00:23:36,950 és dest.h, amely az a magasság. 390 00:23:36,950 --> 00:23:40,425 És így SDL_QueryTexture megy tárolni ezeken a területeken a szélessége 391 00:23:40,425 --> 00:23:41,675 és a magassága a textúra. 392 00:23:41,675 --> 00:23:44,680 393 00:23:44,680 --> 00:23:47,030 >> És akkor mit fogok tennie, hogy megyek 394 00:23:47,030 --> 00:23:55,580 beállítani dest.x lenni ablakban szélesség mínusz dest.w, amely 395 00:23:55,580 --> 00:23:59,000 a szélessége a Sprite, osztva 2. 396 00:23:59,000 --> 00:24:03,860 És ez meg fog beállítani úgy, hogy a kép tökéletesen középen 397 00:24:03,860 --> 00:24:06,780 a mi ablakot, rendben? 398 00:24:06,780 --> 00:24:08,652 Tehát most van egy y pozícióját. 399 00:24:08,652 --> 00:24:10,360 És ez lesz egy változó, ami 400 00:24:10,360 --> 00:24:16,390 változó, mert mi lesz mozgó a képen az y irányban. 401 00:24:16,390 --> 00:24:19,050 És most van valami nevű animációs hurok. 402 00:24:19,050 --> 00:24:21,180 >> Tehát hogyan működik az animáció dolgozni? 403 00:24:21,180 --> 00:24:27,630 Nos, az emberi szem által érzékelhető 12 külön Képek másodpercenként, rendben? 404 00:24:27,630 --> 00:24:33,060 Tehát, ha villog 12 kép kártyák rám a második, láttam minden egyes ilyen képek 405 00:24:33,060 --> 00:24:35,950 a saját elkülönült adott képet. 406 00:24:35,950 --> 00:24:39,690 Most, ha villogni Képek rám egy második, 407 00:24:39,690 --> 00:24:42,140 majd a szemem kezdeném elhomályosítja őket 408 00:24:42,140 --> 00:24:46,920 és azt érzékeli, hogy a mozgás, egy helyett különálló képet. 409 00:24:46,920 --> 00:24:51,930 Így például, filmek és televíziós, villan képeket, akkor 24-szer 410 00:24:51,930 --> 00:24:52,570 egy másodperc. 411 00:24:52,570 --> 00:24:55,110 Szóval ez másodpercenként 24 képkocka. 412 00:24:55,110 --> 00:25:00,136 Számítógépes képernyők, másrészt, gyakran 60 képkocka másodpercenként. 413 00:25:00,136 --> 00:25:01,260 Ez a frissítési sebessége. 414 00:25:01,260 --> 00:25:04,650 Ez milyen gyakran frissül A kép a képernyőn. 415 00:25:04,650 --> 00:25:08,960 Tehát célunk lesz 60 képkocka másodpercenként játékunk. 416 00:25:08,960 --> 00:25:11,770 417 00:25:11,770 --> 00:25:13,710 >> Tehát lássuk, hogy a kódot. 418 00:25:13,710 --> 00:25:19,064 Tehát minden egyes képkocka, mi vagyunk az első majd törölje az ablakot. 419 00:25:19,064 --> 00:25:20,230 Ez az általános minta. 420 00:25:20,230 --> 00:25:22,450 Mindig törölje a ablak minden egyes képkocka, majd 421 00:25:22,450 --> 00:25:25,210 tegyenek meg mindent a rajz műveletek, majd a végén, 422 00:25:25,210 --> 00:25:29,610 ne RenderPresent megmutatni a témától. 423 00:25:29,610 --> 00:25:33,910 És akkor fogsz Van egy várakozás végén 424 00:25:33,910 --> 00:25:36,340 várni, amíg a következő keretben kell kezdeni. 425 00:25:36,340 --> 00:25:38,650 >> Tehát, ha csinálok egy csomó komplex számítási itt 426 00:25:38,650 --> 00:25:43,100 tartott több mint 16 milliszekundum, lehetetlen lenne számomra 427 00:25:43,100 --> 00:25:46,890 kap, hogy a frame rate 60 hogy Azt akartam, mert minden egyes képkocka 428 00:25:46,890 --> 00:25:48,750 Túl sokáig számítani. 429 00:25:48,750 --> 00:25:52,340 Továbbá, mi igazán tesz fajta elhanyagolható mennyiségű munkát 430 00:25:52,340 --> 00:25:54,820 itt, mert ott csak Egy dolog vagyunk rajz. 431 00:25:54,820 --> 00:25:59,390 Szóval én csak várni 1/60 második, amely a hossza 432 00:25:59,390 --> 00:26:01,520 egy keret a képkockák között. 433 00:26:01,520 --> 00:26:05,610 Tehát én vagyok a fajta úgy tesz, mintha csinál minden munkám amely szinte nulla idő. 434 00:26:05,610 --> 00:26:09,050 De egy igazi játék, azt kell kivonni 435 00:26:09,050 --> 00:26:13,760 mennyi időt vett csinálni ezt a munkát az Ön pihenőidőt. 436 00:26:13,760 --> 00:26:16,970 >> Mindegy, mi vagyok én valójában csinál ebben a hurok? 437 00:26:16,970 --> 00:26:19,070 Én törölje az ablakot. 438 00:26:19,070 --> 00:26:27,470 Én meg a dest.y, ami egy int, hogy Az aktuális y pozíció leadott egy int. 439 00:26:27,470 --> 00:26:32,070 Most azt akarom, úszó felbontás az én y pozícióját a játékom, 440 00:26:32,070 --> 00:26:34,150 de aztán, hogy ténylegesen felhívni rá a képernyőre, 441 00:26:34,150 --> 00:26:39,070 szükséges ints, mert egységekben pixel, hogy az, amit a szereposztás az. 442 00:26:39,070 --> 00:26:41,745 Megyek felhívni a képet. 443 00:26:41,745 --> 00:26:45,180 Tehát ez a forrás téglalap. 444 00:26:45,180 --> 00:26:47,060 És ez az a hely téglalap. 445 00:26:47,060 --> 00:26:50,310 Szóval telt null A forrás téglalap 446 00:26:50,310 --> 00:26:53,426 mondani szeretném felhívni én egész textúra. 447 00:26:53,426 --> 00:26:55,300 De ha volt egy csomó textúrák a játék 448 00:26:55,300 --> 00:26:59,120 és ők mind egy nagy textúra térkép hogy töltöttük SDL, mint csak egy 449 00:26:59,120 --> 00:27:02,850 textúra, amit lehetett használja forrásként téglalap 450 00:27:02,850 --> 00:27:06,750 felvenni az egyik a kisebb textúrák, az egyik a kisebb sprite, 451 00:27:06,750 --> 00:27:09,450 ki, hogy a nagy textúra térkép. 452 00:27:09,450 --> 00:27:14,740 >> Szóval megint én vagyok elhaladó én render, én textúra, és most a cél. 453 00:27:14,740 --> 00:27:18,320 Ez lesz, ahol a ablakban meg fog levonni. 454 00:27:18,320 --> 00:27:21,390 És akkor, mert én animátori valamit, kell a mozgás, 455 00:27:21,390 --> 00:27:25,150 Megyek frissítjük a sprite elhelyezkedés minden egyes képkocka. 456 00:27:25,150 --> 00:27:30,190 Szóval van ez az állandó nevezett scroll gyorsítsa egységekben pixel másodpercenként. 457 00:27:30,190 --> 00:27:34,320 Most, minden alkalommal teszünk egy mozgalom, A keret csak 1/60 másodperces. 458 00:27:34,320 --> 00:27:36,740 Így fogok osztani, hogy a 60. 459 00:27:36,740 --> 00:27:42,350 És akkor lássuk, én vagyok levonásával származó y pozícióját. 460 00:27:42,350 --> 00:27:44,470 Miért kivonva? 461 00:27:44,470 --> 00:27:46,169 Mi lesz, hogy egy másodperc. 462 00:27:46,169 --> 00:27:48,460 Így aztán törölni az erőforrások és a program vége. 463 00:27:48,460 --> 00:27:49,830 >> Tehát tegyük ezt. 464 00:27:49,830 --> 00:27:52,450 465 00:27:52,450 --> 00:28:03,570 Szóval menjünk be make SRC = hello4 animation.c, rendben? 466 00:28:03,570 --> 00:28:05,720 Játék. 467 00:28:05,720 --> 00:28:06,770 Nesze. 468 00:28:06,770 --> 00:28:12,690 Szóval van ez görgetés fel a ablak, ami elég ügyes. 469 00:28:12,690 --> 00:28:17,110 De várj, én kivonva A y pozícióját minden alkalommal. 470 00:28:17,110 --> 00:28:18,910 Mi folyik ott? 471 00:28:18,910 --> 00:28:24,010 Nos, kiderült, hogy a SDL, és sőt, a legtöbb számítógépes grafika, 472 00:28:24,010 --> 00:28:28,890 eredetét a koordináta-rendszer a bal felső sarokban az ablak. 473 00:28:28,890 --> 00:28:34,960 >> Tehát a pozitív x irányba megy szerte az ablakot, hogy a jobb oldalon. 474 00:28:34,960 --> 00:28:38,110 És a pozitív y irányban valóban lemegy. 475 00:28:38,110 --> 00:28:40,470 Tehát még egyszer: a származási azon a A bal felső sarokban az ablak, 476 00:28:40,470 --> 00:28:46,190 pozitív y irány lefelé, és a pozitív x jobbra. 477 00:28:46,190 --> 00:28:48,770 Tehát amikor a kivonáshoz Az Y-pozíció, ez 478 00:28:48,770 --> 00:28:52,640 megy, hogy ez megy a negatív y irányba, ami az ablakot. 479 00:28:52,640 --> 00:28:55,500 Szóval ez, mi folyik ott. 480 00:28:55,500 --> 00:28:56,510 Hűvös. 481 00:28:56,510 --> 00:28:59,240 >> Nézzük meg a következő fájlt. 482 00:28:59,240 --> 00:29:05,700 Itt az a része, a mutatni, ahol végre 483 00:29:05,700 --> 00:29:08,920 kap, hogy X a sarokban az ablak ami állítólag az ablak bezárásához 484 00:29:08,920 --> 00:29:10,660 dolgozni. 485 00:29:10,660 --> 00:29:12,800 Szóval mi folyik itt? 486 00:29:12,800 --> 00:29:17,520 Inicializáljuk SDL, hozzon létre az ablakon, hozzon létre a megjelenítő, betölteni a képet, 487 00:29:17,520 --> 00:29:19,770 megteremtse a textúra mint láttuk korábban. 488 00:29:19,770 --> 00:29:26,850 Mi ugyanazt a rendeltetési téglalap mint korábban, ugyanazon a hívást lekérdezheti textúra. 489 00:29:26,850 --> 00:29:29,780 De ezúttal, mi majd fog osztani a szélessége 490 00:29:29,780 --> 00:29:33,110 és a magassága célunkat 4. 491 00:29:33,110 --> 00:29:36,430 Ez csak az a hatása, méretezés a kép lefelé, amikor 492 00:29:36,430 --> 00:29:39,884 jelenítjük meg azokat az ablakban négy. 493 00:29:39,884 --> 00:29:40,800 Szóval ez elég ügyes. 494 00:29:40,800 --> 00:29:42,770 Mi is csak méretarányos csak úgy. 495 00:29:42,770 --> 00:29:45,970 Fogunk kezdeni a kobold a képernyő közepén. 496 00:29:45,970 --> 00:29:49,410 És most van x és y sebesség és Mindketten fog nulláról indulnak. 497 00:29:49,410 --> 00:29:53,740 498 00:29:53,740 --> 00:29:55,880 >> Ez a hibás fájlt. 499 00:29:55,880 --> 00:29:56,380 Elnézést. 500 00:29:56,380 --> 00:29:57,960 Szóval ez mind igaz. 501 00:29:57,960 --> 00:30:00,170 Ez még mind ebben az állományban. 502 00:30:00,170 --> 00:30:03,210 Megvan a szakadék a 4. és mindent. 503 00:30:03,210 --> 00:30:07,830 Tehát itt van a mi x és y pozícióját Az ablak közepén. 504 00:30:07,830 --> 00:30:12,480 És hogy ez a kezdeti sebesség E állandó sebesség, amely 505 00:30:12,480 --> 00:30:15,180 Hiszem 300 képpont másodpercenként. 506 00:30:15,180 --> 00:30:19,850 Most már ezt int is ugyanúgy egy logikai úgynevezett közel kért. 507 00:30:19,850 --> 00:30:23,970 És ahelyett, hogy egy végtelen ciklus egy időzítő itt, 508 00:30:23,970 --> 00:30:29,180 mi lesz animált, mint amíg közel nem kért. 509 00:30:29,180 --> 00:30:30,960 >> Szóval hogyan dolgozzák fel az eseményeket? 510 00:30:30,960 --> 00:30:35,600 Nos, SDL sorba fel eseményeket szó sorban a színfalak mögött. 511 00:30:35,600 --> 00:30:38,860 És akkor minden egyes képkocka, tudjuk dequeue események 512 00:30:38,860 --> 00:30:43,900 ebből a sorból segítségével ezt a felhívást SDL_PullEvent. 513 00:30:43,900 --> 00:30:46,730 És ismét, feltétlenül menjen olvasni erről a dokumentációban. 514 00:30:46,730 --> 00:30:50,450 Van egy sokkal részletesebb és sok Több használható funkciók ezzel. 515 00:30:50,450 --> 00:30:54,750 Mi adja át a címet ez a dolog, SDL_Event 516 00:30:54,750 --> 00:30:56,990 hogy itt van a verem. 517 00:30:56,990 --> 00:30:58,840 >> Nos, mi egy SDL_event? 518 00:30:58,840 --> 00:31:02,356 Mivel az SDL, ha megnézzük a A documentation-- nézzük 519 00:31:02,356 --> 00:31:07,580 lásd API kategória, bemeneti események, eseménykezelés, 520 00:31:07,580 --> 00:31:15,150 akkor nézd meg a számot A különböző események itt 521 00:31:15,150 --> 00:31:18,600 és láthatjuk van egy egész csomó közülük. 522 00:31:18,600 --> 00:31:22,150 Szóval mi ez a SDL_Event dolog? 523 00:31:22,150 --> 00:31:28,190 524 00:31:28,190 --> 00:31:31,107 SDL_Event uniója. 525 00:31:31,107 --> 00:31:31,940 Hú, mi az a szakszervezet? 526 00:31:31,940 --> 00:31:33,910 Akkor valószínűleg még sohasem hallottam ilyet. 527 00:31:33,910 --> 00:31:35,610 És ez rendben. 528 00:31:35,610 --> 00:31:39,420 >> A szakszervezet olyan, mint Egy struct, kivéve a struct 529 00:31:39,420 --> 00:31:41,960 van hely az összes az EKB és a memória, 530 00:31:41,960 --> 00:31:45,060 mivel az unió csak elég hely, hogy illeszkedjen a legnagyobb 531 00:31:45,060 --> 00:31:49,660 annak egyik mezők, ami azt jelenti, csak tárolni egyik mezők 532 00:31:49,660 --> 00:31:52,830 egy időben, milyen van értelme események, ugye? 533 00:31:52,830 --> 00:31:55,810 Mi lehet a billentyűzet esemény vagy egy ablak esemény, 534 00:31:55,810 --> 00:31:59,750 de egyetlen esetben sem lehet egyszerre billentyűzet esemény és egy ablak esemény, 535 00:31:59,750 --> 00:32:05,450 így lenne butaság, hogy helyet mind a két belső rendezvényünk unió. 536 00:32:05,450 --> 00:32:07,770 Tehát, ha akart létrehozhatunk saját unió 537 00:32:07,770 --> 00:32:10,020 úgy néz ki, pontosan ugyanaz például létre a struct, 538 00:32:10,020 --> 00:32:14,140 kivéve, hogy használjuk az unió kulcsszó ahelyett, hogy a struct kulcsszó. 539 00:32:14,140 --> 00:32:17,490 És ne feledd, minden a dolgokat belül a szakszervezet, 540 00:32:17,490 --> 00:32:22,020 a tényleges változó, hogy az unió Egyszerre csak egy ilyen értékek 541 00:32:22,020 --> 00:32:24,780 egy időben. 542 00:32:24,780 --> 00:32:29,940 >> Tehát hogyan tudjuk megmondani, hogy milyen esemény mi csak pattant ki ennek a sorból? 543 00:32:29,940 --> 00:32:33,370 Nos, tudjuk tesztelni a event.type. 544 00:32:33,370 --> 00:32:35,792 És ha ez egyenlő hogy SDL_Quit, tudjuk, 545 00:32:35,792 --> 00:32:37,500 ez az esemény, hogy a keletkezett, amikor 546 00:32:37,500 --> 00:32:39,510 hit, hogy X a sarokban az ablak. 547 00:32:39,510 --> 00:32:44,270 És tudjuk meg közel kért értéke 1. 548 00:32:44,270 --> 00:32:47,230 A többi csak néhány animáció hogy már látott. 549 00:32:47,230 --> 00:32:52,802 Szóval menjünk előre, és a ez, és milyen jól működik. 550 00:32:52,802 --> 00:32:55,135 Így fogok beírni gyártmánya és majd SRC = hello5_events.c. 551 00:32:55,135 --> 00:33:03,760 552 00:33:03,760 --> 00:33:04,770 Ott vagyunk. 553 00:33:04,770 --> 00:33:05,780 Játékok. 554 00:33:05,780 --> 00:33:08,920 >> Most azt látjuk, hogy Valóban kicsinyítve néggyel. 555 00:33:08,920 --> 00:33:10,360 És most pattogó körül. 556 00:33:10,360 --> 00:33:14,630 Van néhány ütközés detektálás folyik az oldalán az ablak 557 00:33:14,630 --> 00:33:16,840 hogy mi is megnézzük. 558 00:33:16,840 --> 00:33:21,190 És mi történik, ha megyek zárni? 559 00:33:21,190 --> 00:33:22,120 Ez bezárja. 560 00:33:22,120 --> 00:33:22,740 Fantasztikus. 561 00:33:22,740 --> 00:33:24,290 Kaptunk az esetben. 562 00:33:24,290 --> 00:33:26,630 És mi kezelte. 563 00:33:26,630 --> 00:33:30,730 >> Szóval nézzük vissza a kódot. 564 00:33:30,730 --> 00:33:33,020 Szóval hogyan jutok el pattogó körül, mint ez? 565 00:33:33,020 --> 00:33:37,200 Ne feledje, én meg x és y kezdetben a sebességet. 566 00:33:37,200 --> 00:33:39,260 És a sebesség a pozitív állandó, szóval 567 00:33:39,260 --> 00:33:42,680 fogjuk kapni kezdik el lefelé és jobbra. 568 00:33:42,680 --> 00:33:45,680 569 00:33:45,680 --> 00:33:50,310 >> Most, minden egyes keret, továbbá a kezelési minden esemény előfordult, 570 00:33:50,310 --> 00:33:57,520 Megyek felismerni, hogy én sprite próbál menni az ablakon. 571 00:33:57,520 --> 00:34:03,610 Így nem tehetünk, hogy a csak ellenőrzés x_pos 0, y_pos 0, majd 572 00:34:03,610 --> 00:34:07,370 is x_pos és y_pos a ablak szélessége és magassága ablakot. 573 00:34:07,370 --> 00:34:11,010 Figyeljük meg, amit le kell vonni a szélessége a Sprite. 574 00:34:11,010 --> 00:34:14,090 És ez azért van, mert ha nem tenném kivonni a szélessége a sprite, 575 00:34:14,090 --> 00:34:17,760 ez csak ellenőrzi, hogy eredetét a sprite 576 00:34:17,760 --> 00:34:19,690 nem megy az ablakon. 577 00:34:19,690 --> 00:34:21,480 De mi szeretnénk az egész szélessége a sprite 578 00:34:21,480 --> 00:34:24,030 hogy mindig az ablakon belül, és a teljes magassága a Sprite 579 00:34:24,030 --> 00:34:25,321 hogy mindig az ablakon belül. 580 00:34:25,321 --> 00:34:27,429 Szóval ez az, amit a kivonás számára. 581 00:34:27,429 --> 00:34:30,080 Sok geometria itt lehet hasznos lehet felhívni, hogy ki 582 00:34:30,080 --> 00:34:33,929 papíron a koordináta- rendszer, hogy mi folyik itt. 583 00:34:33,929 --> 00:34:38,090 >> Tehát ha én ütköznek, csak egyszerűen indítsa újra a helyzetben 584 00:34:38,090 --> 00:34:41,400 úgy, hogy nem megy ki a képernyőn. 585 00:34:41,400 --> 00:34:47,179 És megyek, ha pattog az egyik az oldalfalak, 586 00:34:47,179 --> 00:34:51,469 Megyek, hogy tagadja a x sebesség úgy, hogy 587 00:34:51,469 --> 00:34:53,210 kezdődik pattogó a másik irányba. 588 00:34:53,210 --> 00:34:56,210 És hasonlóképpen, ha eléri A felső vagy az alsó, 589 00:34:56,210 --> 00:34:59,820 Megyek meg a y sebesség egyenlő a negatív Y sebesség, 590 00:34:59,820 --> 00:35:01,690 úgy is, hogy vissza ugrál. 591 00:35:01,690 --> 00:35:03,860 Szóval ez csak, hogyan jutottunk, hogy itt. 592 00:35:03,860 --> 00:35:07,560 >> És a frissítést pozíciók mint láttuk korábban, 593 00:35:07,560 --> 00:35:12,510 ossza el 60, mert mi vagyunk Csak kezelési 1/60 másodperces. 594 00:35:12,510 --> 00:35:15,750 És akkor teszi, pontosan ugyanaz, mint korábban. 595 00:35:15,750 --> 00:35:19,810 És így ez minden hogy folyik ez a fájl. 596 00:35:19,810 --> 00:35:22,490 Szóval így teszünk események. 597 00:35:22,490 --> 00:35:29,260 A legfontosabb dolog, hogy elvegye itt ez SDL_PullEvent funkciót. 598 00:35:29,260 --> 00:35:33,020 És akkor feltétlenül olvassa el a dokumentációt többet SDL_Event 599 00:35:33,020 --> 00:35:38,630 a szakszervezet, mivel ezek az adatok típusa Nagyon, nagyon fontos, mert mi használjuk 600 00:35:38,630 --> 00:35:40,690 mindenféle események. 601 00:35:40,690 --> 00:35:46,539 >> Például, azt használjuk billentyűzet eseményeket, ami mi ez a fájl a. 602 00:35:46,539 --> 00:35:47,330 Akkor mi van? 603 00:35:47,330 --> 00:35:50,180 Megvan ugyanaz, mint korábban, alaphelyzetbe SDL, hozzon létre egy ablak, 604 00:35:50,180 --> 00:35:55,260 hozzon létre egy megjelenítő, betölteni a képet a memóriába, hozza létre a textúrát. 605 00:35:55,260 --> 00:36:00,530 Ismét megyünk ezt dest téglalap, 606 00:36:00,530 --> 00:36:04,890 megyünk a képméret négy, hogy ez egy kicsit kisebb. 607 00:36:04,890 --> 00:36:08,000 Most fogjuk kezdeni a sprite a képernyő közepén. 608 00:36:08,000 --> 00:36:12,090 De ezúttal, megyünk állítani a kezdeti X és Y sebességek nulla, 609 00:36:12,090 --> 00:36:15,140 mert a billentyűzet lesz, hogy ellenőrizzék azokat. 610 00:36:15,140 --> 00:36:18,900 Továbbá, megyünk nyomon követni ezeket a változókat 611 00:36:18,900 --> 00:36:20,450 fel, le, balra és jobbra. 612 00:36:20,450 --> 00:36:23,090 És hogy fog tartani követni, hogy mi már 613 00:36:23,090 --> 00:36:27,370 Megnyomta a billentyűzet gombjai megfelelnek az fel, le, balra, 614 00:36:27,370 --> 00:36:28,460 és jobb. 615 00:36:28,460 --> 00:36:32,440 >> Nos, ez a fajta képzelet mert tudjuk használni a W, A, S, 616 00:36:32,440 --> 00:36:35,480 D itt, vagy a tényleges nyilakkal. 617 00:36:35,480 --> 00:36:38,590 Meglátjuk, hogy csak a második. 618 00:36:38,590 --> 00:36:41,140 Mi is így fogjuk feldolgozni A rendezvény, mint korábban. 619 00:36:41,140 --> 00:36:42,530 Mi húzza az eseményt. 620 00:36:42,530 --> 00:36:45,840 De most megyünk kapcsolja be az esemény típusát. 621 00:36:45,840 --> 00:36:47,710 Ha ez SDL_Quit vagyunk fog készlet közel 622 00:36:47,710 --> 00:36:49,990 kérte, hogy az egyik, mint azelőtt. 623 00:36:49,990 --> 00:36:52,315 Amely kezeli az x-et A sarokban az ablak, 624 00:36:52,315 --> 00:36:55,050 úgy, hogy az ablakunk valóban bezárja. 625 00:36:55,050 --> 00:37:00,110 >> Ellenkező esetben, ha kap egy SDL gomb lefelé eseményt, ami azt jelenti, megnyomott egy gombot, 626 00:37:00,110 --> 00:37:04,470 akkor mit fogunk csinálni a mi majd kapcsolja be ezt a dolgot itt, 627 00:37:04,470 --> 00:37:11,370 amely means-- így event.key azt jelenti, kezeljük a rendezvény szakszervezet, 628 00:37:11,370 --> 00:37:15,490 Menj, és a kulcsot esemény szerkezet benne. 629 00:37:15,490 --> 00:37:18,810 Így kiderül, hogy ez a unió egyik legfontosabb esemény struktúrát. 630 00:37:18,810 --> 00:37:22,820 És akkor megy a kulcs Amennyiben szerkezetét a területen 631 00:37:22,820 --> 00:37:26,140 nevű _keysym majd scancode. 632 00:37:26,140 --> 00:37:29,480 És ismét határozottan olvasni A dokumentáció erről. 633 00:37:29,480 --> 00:37:31,220 Kulcsszó bemenetek elég érdekes. 634 00:37:31,220 --> 00:37:34,020 Lehet kapni leolvasó kódok vagy kulcskódok. 635 00:37:34,020 --> 00:37:38,590 És ez egy kicsit finomabb, de A dokumentáció elég jó. 636 00:37:38,590 --> 00:37:43,380 >> Tehát, ha azt látjuk, a szkennelés kódot mi gombnyomás, hogy W vagy felfelé, 637 00:37:43,380 --> 00:37:45,450 fogunk létrehozni egyenlő 1. 638 00:37:45,450 --> 00:37:47,240 És akkor mi kitörni, hogy kapcsolót. 639 00:37:47,240 --> 00:37:52,980 Ha ez egy vagy balra, mi meg hagytuk 1 et cetera, et cetera, a jobbra lefelé. 640 00:37:52,980 --> 00:37:57,080 Most, ebben a külső kapcsoló, ha látunk egy gombot felfelé esemény, 641 00:37:57,080 --> 00:38:00,730 ez azt jelenti, amit kiadott egy billentyűt és mi már nem nyomja rá. 642 00:38:00,730 --> 00:38:05,380 Így fogok mondani akár értéke 0, bal értéke 0, lefelé értéke 0, a jobb 643 00:38:05,380 --> 00:38:08,260 értéke 0, satöbbi. 644 00:38:08,260 --> 00:38:12,070 >> És észre mi minden ilyen két esetben rendbe egymás mellé 645 00:38:12,070 --> 00:38:14,490 nincs külön kód Az első esetben, amely 646 00:38:14,490 --> 00:38:18,180 azt jelenti, hogy függetlenül attól, hogy S vagy lefelé itt, 647 00:38:18,180 --> 00:38:20,520 ez meg fog végrehajtani ezt a kódot. 648 00:38:20,520 --> 00:38:22,090 Szóval ez elég praktikus. 649 00:38:22,090 --> 00:38:24,830 Ez megakadályozza, hogy kelljen többet feltételeket és az IFS és a dolgok 650 00:38:24,830 --> 00:38:26,980 mint az. 651 00:38:26,980 --> 00:38:29,420 >> Szóval megyünk sebességének meghatározása. 652 00:38:29,420 --> 00:38:31,020 Mi meg a sebességet 0. 653 00:38:31,020 --> 00:38:33,910 Akkor, ha fel van nyomva és nem le, akkor 654 00:38:33,910 --> 00:38:37,450 Állítsa be az Y sebesség negatív sebességgel. 655 00:38:37,450 --> 00:38:42,930 Emlékezz negatív, mert a negatív y iránya fel. 656 00:38:42,930 --> 00:38:45,540 És a pozitív y irányban működik. 657 00:38:45,540 --> 00:38:47,510 Ha le van nyomva és nem felelnek meg, akkor nem vagyunk 658 00:38:47,510 --> 00:38:53,860 megy úgy beállítani, hogy a pozitív sebesség, ami azt jelenti, megy le a képernyőn. 659 00:38:53,860 --> 00:38:55,460 Ugyanaz a bal és a jobb. 660 00:38:55,460 --> 00:38:58,200 >> És akkor mi lesz frissíteni A pozíciók, mint korábban. 661 00:38:58,200 --> 00:39:00,740 Fogunk csinálni ütközés érzékelés határait, 662 00:39:00,740 --> 00:39:04,290 de nem fogunk állítani a sebesség, mert a sebesség csak 663 00:39:04,290 --> 00:39:06,780 vezérli a billentyűzetet. 664 00:39:06,780 --> 00:39:11,230 De mi lesz, hogy visszaállítsa a pozíciókat tartani az ablakban. 665 00:39:11,230 --> 00:39:14,400 És mi lesz állítva a pozíciókat a struct 666 00:39:14,400 --> 00:39:17,400 majd tegye az összes rendering cuccot előtt. 667 00:39:17,400 --> 00:39:20,750 Nézzük, mit csinál. 668 00:39:20,750 --> 00:39:25,460 Úgyhogy győződjön SRCS-- lássuk, ez hello6_keyboard.c. 669 00:39:25,460 --> 00:39:38,140 670 00:39:38,140 --> 00:39:38,820 >> Ó, nem. 671 00:39:38,820 --> 00:39:40,150 Szóval van egy kis figyelmeztetés itt. 672 00:39:40,150 --> 00:39:43,840 És ez egyszerűen azt mi nem ellenőrizze minden egyes lehetséges fajtája 673 00:39:43,840 --> 00:39:45,610 A rendezvény. 674 00:39:45,610 --> 00:39:49,470 Ez rendben van, mert van 236, vagy úgy. 675 00:39:49,470 --> 00:39:51,760 Így fogok figyelmen kívül hagyni azokat a figyelmeztetéseket. 676 00:39:51,760 --> 00:39:53,530 Még mindig össze finom. 677 00:39:53,530 --> 00:39:56,100 Így fogok játszani a játékot. 678 00:39:56,100 --> 00:39:57,590 Hogy nem mozog. 679 00:39:57,590 --> 00:40:04,150 De most, amikor a cefre a billentyűzetem, Meg tudom csinálni néhány WASD mozgás van, 680 00:40:04,150 --> 00:40:06,870 Tudom használni a nyilakkal is. 681 00:40:06,870 --> 00:40:10,070 És észre, bár én vagyok megnyomása jobb most, 682 00:40:10,070 --> 00:40:13,804 ez nem fog ki az ablakon, mert visszaállíthatja minden kockánál. 683 00:40:13,804 --> 00:40:14,720 Szóval ez elég ügyes. 684 00:40:14,720 --> 00:40:19,420 El lehet képzelni körül mozog Mario Néhány nyilakkal, vagy valami ilyesmi. 685 00:40:19,420 --> 00:40:22,880 És igen, az X nem működik. 686 00:40:22,880 --> 00:40:26,900 >> Tehát végső fájl megyünk nézni, hellow7_mouse. 687 00:40:26,900 --> 00:40:29,600 Ez arról szól, hogy az egér bemenet. 688 00:40:29,600 --> 00:40:34,790 Tehát ez, azt importálja a matek fejléc, 689 00:40:34,790 --> 00:40:38,100 mert mi lesz, hogy Egy kis matek van. 690 00:40:38,100 --> 00:40:45,260 Ugyanaz a régi, régi dolgokat, cél, régi, láttam ilyet. 691 00:40:45,260 --> 00:40:46,910 Nos, ez érdekes. 692 00:40:46,910 --> 00:40:51,730 Úgyhogy vissza, hogy csak megnézni Az SDL kilép eseményt. 693 00:40:51,730 --> 00:40:52,460 Miert van az? 694 00:40:52,460 --> 00:40:55,110 Így kap egér beviteli eseményekről. 695 00:40:55,110 --> 00:40:57,670 Mint amikor az egér mozgott, kapsz egy esemény, hogy. 696 00:40:57,670 --> 00:41:00,520 Amikor egy egér gomb megnyomásakor akkor kap egy esemény, hogy. 697 00:41:00,520 --> 00:41:05,760 >> De van egy másik, valamivel egyszerűbb talán API egyre egér bemenet. 698 00:41:05,760 --> 00:41:09,500 És ez csak az SDL get egér állapotban. 699 00:41:09,500 --> 00:41:14,370 Szóval van egy int az x és y a kurzor pozícióját. 700 00:41:14,370 --> 00:41:18,910 Azt adja át a SDL_GetMouseState, amely meghatározza ezeket. 701 00:41:18,910 --> 00:41:22,200 És ez pozícióját a koordináta-rendszer az ablakon. 702 00:41:22,200 --> 00:41:25,520 Tehát ha a tömeg a bal felső Az ablak, amely 0, 0. 703 00:41:25,520 --> 00:41:28,040 704 00:41:28,040 --> 00:41:33,380 >> Most, hogy mit fogok csinálni, hogy én megyek hogy csinál egy kis vektoros matek. 705 00:41:33,380 --> 00:41:36,910 Fogadok azt hitted, hogy nem Látható, hogy CS50, de itt van. 706 00:41:36,910 --> 00:41:40,720 Megyek, hogy némi vektor matek, hogy a vektor 707 00:41:40,720 --> 00:41:43,840 a képen a kurzort. 708 00:41:43,840 --> 00:41:53,280 És így miért nekem kell ez a kivonás itt? 709 00:41:53,280 --> 00:42:01,350 Nos, ha én csak használni dest .-- így Meg kell fordítani az egér x 710 00:42:01,350 --> 00:42:05,166 és y által a szélesség fele és a magassága a kép, 711 00:42:05,166 --> 00:42:08,040 mert azt akarom, a központ a A kép, hogy megy felé az egér, 712 00:42:08,040 --> 00:42:10,160 Nem származik a kép. 713 00:42:10,160 --> 00:42:15,650 >> Szóval ez csak a biztonság kedvéért beszélek a központ a kép itt. 714 00:42:15,650 --> 00:42:19,510 Aztán kapunk Delta X és Y, amely a különbség a megcélzott 715 00:42:19,510 --> 00:42:23,430 a tényleges helyzetnek a kép. 716 00:42:23,430 --> 00:42:25,690 És akkor juthatunk a távolság van, ami 717 00:42:25,690 --> 00:42:29,140 lesz Pitagorasz tétel x négyzetgyöke 718 00:42:29,140 --> 00:42:32,720 szor x plus y-szor y. 719 00:42:32,720 --> 00:42:38,400 >> Most, hogy megakadályozzák remegést, és meg tudom mutatni Ön mit is csinál ez, ha nem teszem ezt, 720 00:42:38,400 --> 00:42:45,830 ha a távolságot a kurzor és a kép közepén kisebb, mint öt, 721 00:42:45,830 --> 00:42:48,730 Én csak nem fog mozogni a képet. 722 00:42:48,730 --> 00:42:52,900 Ellenkező esetben, mi meg a sebességet. 723 00:42:52,900 --> 00:42:55,960 És mi meg úgy, hogy a sebessége mindig állandó marad. 724 00:42:55,960 --> 00:42:58,770 És a nettó eredmény az összes ez Math az, hogy a kép 725 00:42:58,770 --> 00:43:01,660 megy felé a kurzort. 726 00:43:01,660 --> 00:43:08,470 >> Most kiderül, hogy SDL_GetMouseState, 727 00:43:08,470 --> 00:43:14,490 továbbá a beállítást a x és y érvek itt, 728 00:43:14,490 --> 00:43:21,340 ez is visszatér egy int, amely megfelel hogy az állam az egér gombjait. 729 00:43:21,340 --> 00:43:24,600 Tehát nem tud olvasni, hogy közvetlenül, de lehet 730 00:43:24,600 --> 00:43:29,090 használja ezeket a makrókat, egyetlen bitenkénti üzemben, nem olyan ijesztő, 731 00:43:29,090 --> 00:43:30,650 Csak egy bitenkénti és. 732 00:43:30,650 --> 00:43:38,320 Tehát azt mondjuk gombok, ami annak az eredménye A mi SDL_GetMouseState, ha ez a 733 00:43:38,320 --> 00:43:43,990 és bitenkénti és ez makró Itt, SDL_BUTTON_LEFT. 734 00:43:43,990 --> 00:43:47,680 >> Szóval ez lesz egyszerű megoldani A bitmap, amely megfelel 735 00:43:47,680 --> 00:43:51,090 hogy az egér bal gombját nyomva tartják. 736 00:43:51,090 --> 00:43:55,470 És így, ha a bitenkénti és lép fel, és ez 737 00:43:55,470 --> 00:43:59,340 nem nulla, ami azt jelenti, bal gombot nyomta meg, 738 00:43:59,340 --> 00:44:04,320 akkor mi történt valójában, hogy tagadja mind az x és az y sebességek, 739 00:44:04,320 --> 00:44:06,700 ami csak hogy a kép szökött. 740 00:44:06,700 --> 00:44:07,980 Frissítés pozíciókat. 741 00:44:07,980 --> 00:44:10,920 Ütközések észlelések, láttam minden előtt, vakolás, minden rendben. 742 00:44:10,920 --> 00:44:11,510 Tegyünk. 743 00:44:11,510 --> 00:44:14,200 744 00:44:14,200 --> 00:44:16,050 Szóval van, hogy SRC = hello7_mouse.c. 745 00:44:16,050 --> 00:44:21,720 746 00:44:21,720 --> 00:44:22,220 Nagy. 747 00:44:22,220 --> 00:44:23,490 Nincs hiba. 748 00:44:23,490 --> 00:44:24,900 És a játék. 749 00:44:24,900 --> 00:44:26,440 >> Tehát itt van az egér. 750 00:44:26,440 --> 00:44:29,000 És a kép valóban üldözi a képre. 751 00:44:29,000 --> 00:44:33,140 Most, a játék csinál, talán ez olyan, mint egy ellenséges üldöző 752 00:44:33,140 --> 00:44:35,240 A kis karakter, vagy bármi. 753 00:44:35,240 --> 00:44:37,440 De itt van a A kép kergeti az egeret. 754 00:44:37,440 --> 00:44:41,000 És ha rákattintok, az egér indul kergeti a kép 755 00:44:41,000 --> 00:44:42,860 és a kép menekül a képre. 756 00:44:42,860 --> 00:44:43,810 Szóval ez elég jó. 757 00:44:43,810 --> 00:44:47,770 És észre ismét, van még ütközés észlelése itt. 758 00:44:47,770 --> 00:44:53,930 >> Tehát ez a végső kis demo állítottam fel itt. 759 00:44:53,930 --> 00:44:58,870 És vessünk egy pillantást még egy dolog. 760 00:44:58,870 --> 00:45:02,970 Szóval vissza ide, említettem ezt a remegést. 761 00:45:02,970 --> 00:45:05,000 Minden rendben. 762 00:45:05,000 --> 00:45:12,890 Tehát, ha a távolság kisebb, mint öt képpont, Én beállítása x és y sebesség nulla. 763 00:45:12,890 --> 00:45:15,960 Mi történik, ha megszabadulunk, hogy? 764 00:45:15,960 --> 00:45:19,070 Szóval megyek, csak ezt. 765 00:45:19,070 --> 00:45:23,820 766 00:45:23,820 --> 00:45:30,150 Kérlek, bocsáss ezt a borzalmas stílusban, de megjegyezte ki a helyes kódot. 767 00:45:30,150 --> 00:45:38,080 Így fogok menteni, hogy, és nem a ugyanazt a parancsot előtti tenni. 768 00:45:38,080 --> 00:45:38,785 >> Minden rendben. 769 00:45:38,785 --> 00:45:39,660 És most mi lesz? 770 00:45:39,660 --> 00:45:43,260 771 00:45:43,260 --> 00:45:43,760 Jó. 772 00:45:43,760 --> 00:45:45,801 Még mindig követi a egér, mint korábban, 773 00:45:45,801 --> 00:45:49,310 de ha eljutunk az egér, megvan ez a bruttó remegést. 774 00:45:49,310 --> 00:45:50,320 Mi folyik ott? 775 00:45:50,320 --> 00:45:52,600 Nos, a mi vektor matek, emlékszem voltunk 776 00:45:52,600 --> 00:45:57,540 figyelembe a távolság a A kurzor és a központ a kép? 777 00:45:57,540 --> 00:46:00,710 Nos, ahogy megközelíti 0, akkor elkezd egyre 778 00:46:00,710 --> 00:46:06,280 mint ez a fajta őrült viselkedés ahol a kép a fajta 779 00:46:06,280 --> 00:46:08,910 mint oszcilláló körül a kurzor. 780 00:46:08,910 --> 00:46:12,000 És ez létre ezt a remegést. 781 00:46:12,000 --> 00:46:13,020 És ez nagyon csúnya. 782 00:46:13,020 --> 00:46:15,103 És akkor valószínűleg nem szeretné, hogy a játékok csinálja, 783 00:46:15,103 --> 00:46:17,350 hacsak nem valami különleges hatást. 784 00:46:17,350 --> 00:46:21,960 >> Szóval ezért van Csak ez az önkényes 785 00:46:21,960 --> 00:46:27,150 levágta az öt pixel, ahol azt mondjuk, ha ez öt pixel, jók vagyunk. 786 00:46:27,150 --> 00:46:29,560 Nem kell mozgatni a kép többé. 787 00:46:29,560 --> 00:46:32,260 Szóval ez, mi folyik ott. 788 00:46:32,260 --> 00:46:37,390 789 00:46:37,390 --> 00:46:40,870 >> Szóval ez elég sokat. 790 00:46:40,870 --> 00:46:44,390 Most már tudja, hogyan kell létrehozni ablak, töltse be egy képet, 791 00:46:44,390 --> 00:46:49,330 felhívni egy képet az ablak, hogy billentyűzet, egér beviteli kap, 792 00:46:49,330 --> 00:46:52,190 van egy csomó más input, amit nem 793 00:46:52,190 --> 00:46:56,070 tudom, hogyan lehet, ha csak eltölteni egy Néhány perc nézi dokumentációt. 794 00:46:56,070 --> 00:46:59,670 Így valóban meglehetősen Néhány eszköz a rendelkezésére áll most 795 00:46:59,670 --> 00:47:01,650 hogy írjon egy teljes értékű játék. 796 00:47:01,650 --> 00:47:05,030 >> Most minden játékban kell egy kis hang, de a hang dokumentáció 797 00:47:05,030 --> 00:47:06,460 Az is nagyon jó. 798 00:47:06,460 --> 00:47:09,200 És nem vagyok hajlandó fogadni, hogy ha Ön megértse a dolgokat 799 00:47:09,200 --> 00:47:14,560 beszélgettünk ma A képek és felületek, 800 00:47:14,560 --> 00:47:18,370 Az ablakok, és mindent, majd kitalálni a hang API nem 801 00:47:18,370 --> 00:47:21,170 lesz olyan rossz. 802 00:47:21,170 --> 00:47:27,420 Szóval várom, hogy lássam mit hoz létre SDL. 803 00:47:27,420 --> 00:47:31,595