1 00:00:00,000 --> 00:00:05,069 2 00:00:05,069 --> 00:00:06,110 THOMAS Lively: U redu. 3 00:00:06,110 --> 00:00:07,450 Pozdrav svima. 4 00:00:07,450 --> 00:00:08,690 Ja sam Thomas Lively. 5 00:00:08,690 --> 00:00:15,160 Ovaj seminar će biti pisanje 2D igre u C pomoću SDL. 6 00:00:15,160 --> 00:00:17,970 Dakle, znam da si sve traži, da, ja stvarno 7 00:00:17,970 --> 00:00:22,050 žele igrati igre i učiniti igre, ali što je to SDL posao? 8 00:00:22,050 --> 00:00:25,320 Dakle SDL je C knjižnica. 9 00:00:25,320 --> 00:00:28,270 To stoji za Jednostavan DirectMedia sloj. 10 00:00:28,270 --> 00:00:31,340 I to je križ platforma, Razvoj knjižnica igre. 11 00:00:31,340 --> 00:00:37,160 Ona radi na Windows, Mac, Linux, čak i iOS i Android. 12 00:00:37,160 --> 00:00:40,380 Ona obrađuje stvari kao što su pristup audio sustava 13 00:00:40,380 --> 00:00:44,900 za računala, tipkovnica, i miš, joystick, ako oni vezani. 14 00:00:44,900 --> 00:00:48,300 Na mobitelu, čak i ona može učiniti touch input i sve to. 15 00:00:48,300 --> 00:00:53,030 I naravno, obrađuje grafike, crtanje stvari na zaslonu. 16 00:00:53,030 --> 00:00:56,470 >> Dakle, to je vrlo široko koristi, iako možda niste čuli za njega prije. 17 00:00:56,470 --> 00:01:00,860 Ona je građena u, primjerice, Valve je izvor motora, 18 00:01:00,860 --> 00:01:04,970 koja pokreće igre kao što su Portal i Team Fortress 2. 19 00:01:04,970 --> 00:01:08,680 Također je u vrlo velikom broju od indie igara koje izlaze, 20 00:01:08,680 --> 00:01:13,545 pa sam uzbuđen vidjeti što Sve će biti stvaranje s njim. 21 00:01:13,545 --> 00:01:20,000 >> Ciljevi seminara su ti krenuo da se razvija s SDL. 22 00:01:20,000 --> 00:01:22,700 Idemo naučiti kako stvoriti prozor igra. 23 00:01:22,700 --> 00:01:26,130 Idemo napraviti duhovi, koje su slike u igri 24 00:01:26,130 --> 00:01:27,744 koji može kretati. 25 00:01:27,744 --> 00:01:29,910 Idemo naučiti kako da i animirati Duhovi, 26 00:01:29,910 --> 00:01:32,910 pa ih kretati, provjerite ih mijenjati tijekom vremena. 27 00:01:32,910 --> 00:01:35,580 A mi ćemo naučiti kako uhvatiti tipkovnicu i miša 28 00:01:35,580 --> 00:01:38,240 ulaz s računala. 29 00:01:38,240 --> 00:01:41,550 Ono što mi se ne govori o danas je 3D grafiku, 30 00:01:41,550 --> 00:01:45,520 jer to je vrlo komplicirano predmet koji nemamo vremena za. 31 00:01:45,520 --> 00:01:49,010 Nećemo naučiti kako igrati zvuk na našim igrama. 32 00:01:49,010 --> 00:01:53,300 I nećemo se gradi za ništa, ali Linux. 33 00:01:53,300 --> 00:01:58,330 >> Sada upozorenja postoje da, nadamo se, do kraja seminara 34 00:01:58,330 --> 00:02:01,660 vi ćete biti zadovoljni SDL dokumentacije, 35 00:02:01,660 --> 00:02:05,370 tako da ćete biti u mogućnosti otići shvatiti kako igrati zvuk za sebe. 36 00:02:05,370 --> 00:02:12,150 Također gradi za Mac ili PC bi trebao raditi točno isto kao zgrada za Linux, 37 00:02:12,150 --> 00:02:14,700 ali postava će biti malo drugačija. 38 00:02:14,700 --> 00:02:17,700 Tako da bi trebao biti u mogućnosti to odgonetati kako to učiniti te stvari 39 00:02:17,700 --> 00:02:20,900 do kraja današnjeg seminara. 40 00:02:20,900 --> 00:02:26,980 >> Tako za postavljanje, idemo koristiti virtualni stroj. 41 00:02:26,980 --> 00:02:31,010 Mi bi koristiti CS50 IDE, jer samo ćemo se pisanje u C. 42 00:02:31,010 --> 00:02:35,120 No, budući da je IDE nije preglednika smo Ne mogu stvoriti nove prozore ili zaslon 43 00:02:35,120 --> 00:02:36,410 Grafika u njemu. 44 00:02:36,410 --> 00:02:38,450 Dakle, trebamo virtualni stroj. 45 00:02:38,450 --> 00:02:47,790 Dakle, možete slijediti upute ovdje na manual.CS50.net/appliance/15~~pobj 46 00:02:47,790 --> 00:02:53,290 instalirati službenu CS50 aparat, što je samo Linux virtualni 47 00:02:53,290 --> 00:02:55,110 stroj. 48 00:02:55,110 --> 00:02:58,090 >> I onda kada imate da su sve postavili up-- njega 49 00:02:58,090 --> 00:03:02,090 može potrajati neko vrijeme, jer je vrlo velika download-- idete 50 00:03:02,090 --> 00:03:07,060 izvoditi u VM sudo apt-get update. 51 00:03:07,060 --> 00:03:09,410 I to se doista događa ažurirati sav softver 52 00:03:09,410 --> 00:03:12,670 paket na vašem virtualnom stroju. 53 00:03:12,670 --> 00:03:20,130 >> Nakon toga, ti si idući u trčanje sudo apt-get install, libsdl2-2.0-0, 54 00:03:20,130 --> 00:03:27,960 libsdl2-DBG, libsdl2-dev, i dodatno libsdl2 slika-2,0-0, 55 00:03:27,960 --> 00:03:32,560 libsdl2-image-DBG, i libsdl2-slika-dev. 56 00:03:32,560 --> 00:03:33,640 Dakle, što to učiniti? 57 00:03:33,640 --> 00:03:38,440 To jednostavno instalira debug Informacije, dokumentacija, zaglavlja, 58 00:03:38,440 --> 00:03:41,260 i binarne datoteke za dvije knjižnice. 59 00:03:41,260 --> 00:03:45,090 Redovita stara, SDL 2,0, i još jedna knjižnica 60 00:03:45,090 --> 00:03:50,110 zove SDL slike, koje ćemo se pomoću 61 00:03:50,110 --> 00:03:54,560 učitavanje slikovne datoteke u našoj igri. 62 00:03:54,560 --> 00:03:57,860 >> Dakle, nakon što su to i da, baš kad je pita, 63 00:03:57,860 --> 00:04:01,100 vi samo upišite da, pritisnite Enter instalirati te pakete, 64 00:04:01,100 --> 00:04:04,430 i onda bi trebao biti dobar to ići. 65 00:04:04,430 --> 00:04:14,800 Dakle, da biste dobili distribucije koda, can-- o draga, to nije ažuriran. 66 00:04:14,800 --> 00:04:18,480 Osim ako imate GitHub account-- ako imate GitHub račun, 67 00:04:18,480 --> 00:04:24,450 možete učiniti Git klon naredbu repo 68 00:04:24,450 --> 00:04:30,490 i da će preuzeti Git repo sa svim koda u njemu, 69 00:04:30,490 --> 00:04:31,700 tako da ćete imati kod. 70 00:04:31,700 --> 00:04:36,470 >> Ako nemate GitHub račun, ono što trebate učiniti je upisati 71 00:04:36,470 --> 00:04:48,867 wgithttps: //github.com/tlively/sdl seminar-- i ovdje je 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 Pa opet, to je isti URL, osim što će biti 75 00:04:59,220 --> 00:05:09,010 tlively / SDL_seminar / master.zip i koju koristite wgit preuzeti to. 76 00:05:09,010 --> 00:05:12,940 I onda možete jednostavno raspakirajte arhivu da 77 00:05:12,940 --> 00:05:14,900 i onda ćete imati sve izvorni kod. 78 00:05:14,900 --> 00:05:17,580 Tako mi je zbog toga. 79 00:05:17,580 --> 00:05:23,880 A onda kod će biti domaćin na u CS50 Seminar web stranica u par 80 00:05:23,880 --> 00:05:25,230 dana. 81 00:05:25,230 --> 00:05:26,590 >> U redu. 82 00:05:26,590 --> 00:05:29,932 Pa kako ćemo početi pisanje svoju igru? 83 00:05:29,932 --> 00:05:31,890 Pa, prva stvar ćemo želite učiniti 84 00:05:31,890 --> 00:05:34,740 je pogledajte SDL dokumentaciju. 85 00:05:34,740 --> 00:05:37,020 Dakle ovdje je VM. 86 00:05:37,020 --> 00:05:38,720 I ovdje je web stranica. 87 00:05:38,720 --> 00:05:40,340 Ja sam upravljao živjeti libsdl.org. 88 00:05:40,340 --> 00:05:43,110 89 00:05:43,110 --> 00:05:48,140 Što ću učiniti ovdje je ići preko na sidebar, pod dokumentacije, 90 00:05:48,140 --> 00:05:51,040 i kliknite na wikiju. 91 00:05:51,040 --> 00:05:56,870 To će me dovesti na wikiju da ima većinu dokumentacije za SDL. 92 00:05:56,870 --> 00:06:01,360 Više o sidebar ovdje smo ide kliknuti API po kategorijama, 93 00:06:01,360 --> 00:06:04,300 jer će dati nas lijepo kategoričan pogled 94 00:06:04,300 --> 00:06:07,770 cjelokupnog API za SDL. 95 00:06:07,770 --> 00:06:12,390 >> Tako, na primjer, imamo osnovni inicijalizacije 96 00:06:12,390 --> 00:06:18,380 a isključite, sve vrsta upravna stvar za korištenje SDL, 97 00:06:18,380 --> 00:06:21,630 a onda imamo odjeljak za prikazujući stvari na zaslonu. 98 00:06:21,630 --> 00:06:23,000 To je videozapis. 99 00:06:23,000 --> 00:06:25,790 Ulazni događaji, to je sve unos s tipkovnice, 100 00:06:25,790 --> 00:06:29,710 dobivanje ulaz iz miša, i joystick, ako ga još ima. 101 00:06:29,710 --> 00:06:32,901 Postoji sila povratne informacije za stvari kao igra kontrolora, koji 102 00:06:32,901 --> 00:06:34,150 nećemo govoriti o tome. 103 00:06:34,150 --> 00:06:35,630 I ovdje je zvuk. 104 00:06:35,630 --> 00:06:38,940 A tu je i hrpa drugih stvari koje SDL mogu učiniti za vas. 105 00:06:38,940 --> 00:06:43,830 >> No, danas ćemo se usredotočiti na inicijalizacije ovdje 106 00:06:43,830 --> 00:06:48,332 prikaz slike u videu poglavlje i rukovanje ulaznih događaja. 107 00:06:48,332 --> 00:06:50,290 Dakle, to su glavni dijelovi dokumentacije 108 00:06:50,290 --> 00:06:53,050 koji bi trebali biti brige o. 109 00:06:53,050 --> 00:06:57,170 Samo za zabavu, ako ćemo ići preko ovdje i kliknite na API po imenu, 110 00:06:57,170 --> 00:07:04,350 možemo vidjeti popis svih jedna stvar na SDL knjižnica. 111 00:07:04,350 --> 00:07:11,330 Dakle, sve te funkcije, enumerations, strukture, luda količina stvari, 112 00:07:11,330 --> 00:07:12,820 abecedni red. 113 00:07:12,820 --> 00:07:14,580 I jasno, dok se znate što radite, 114 00:07:14,580 --> 00:07:19,100 to ne će biti previše pomoći, što je razlog zašto mi API po kategoriji. 115 00:07:19,100 --> 00:07:20,810 >> Tako ćemo početi. 116 00:07:20,810 --> 00:07:25,680 Nadam se da ste već preuzeli distribucije koda. 117 00:07:25,680 --> 00:07:30,070 I tako ono što možete učiniti je, zar ne Ovdje u CS50 aparata, 118 00:07:30,070 --> 00:07:31,150 Jednostavno otvorite terminal. 119 00:07:31,150 --> 00:07:33,750 120 00:07:33,750 --> 00:07:34,440 Idemo. 121 00:07:34,440 --> 00:07:40,740 Tako sam već preuzeli Raspodjela broj pomoću .zip 122 00:07:40,740 --> 00:07:41,690 Postupak. 123 00:07:41,690 --> 00:07:43,140 I ja sam ga raspakirali. 124 00:07:43,140 --> 00:07:46,120 Dakle, ovdje je u SDL seminara majstora. 125 00:07:46,120 --> 00:07:49,750 Tako ću ići u tom direktoriju. 126 00:07:49,750 --> 00:07:55,310 I ono što vidimo ovdje da imamo sedam C datoteke. 127 00:07:55,310 --> 00:07:58,070 A to se događa šifru ćemo se gleda na danas. 128 00:07:58,070 --> 00:08:00,040 Imamo Makefile. 129 00:08:00,040 --> 00:08:06,950 I imamo resursa katalog, koji jednostavno ima fotografiju 130 00:08:06,950 --> 00:08:09,070 da ćete se gledajući uskoro. 131 00:08:09,070 --> 00:08:16,060 >> Tako ćemo otvoriti te datoteke pomoću G-Edit urednik. 132 00:08:16,060 --> 00:08:22,000 Dakle, želim otvoriti sve datoteke koje početak Pozdrav i završiti .c. 133 00:08:22,000 --> 00:08:23,380 Idemo. 134 00:08:23,380 --> 00:08:28,180 Tako da je maleni prozor, tako da smo će pokušati napraviti da veći. 135 00:08:28,180 --> 00:08:28,900 Ne, on je otišao dalje. 136 00:08:28,900 --> 00:08:32,836 137 00:08:32,836 --> 00:08:34,570 >> U redu. 138 00:08:34,570 --> 00:08:37,959 Dakle ovdje je prvi Datoteka ćemo pogledati. 139 00:08:37,959 --> 00:08:39,000 To se zove hello1_sdl.c. 140 00:08:39,000 --> 00:08:41,890 141 00:08:41,890 --> 00:08:47,980 I sve to čini se inicijalizacija SDL knjižnice, tako da možemo početi koristiti. 142 00:08:47,980 --> 00:08:51,550 Kako bi ste znali doći s ovim kodom sami? 143 00:08:51,550 --> 00:08:53,850 Pa, ako ćemo gledati preko na dokumentaciju 144 00:08:53,850 --> 00:08:58,040 i idemo u inicijalizacije a isključite dio, 145 00:08:58,040 --> 00:09:02,230 to će nas sve reći o tome kako inicijalizirati SDL. 146 00:09:02,230 --> 00:09:06,630 Dakle, svakako pročitajte ovaj neki drugi put. 147 00:09:06,630 --> 00:09:09,230 To će vam reći sve o tome što se ovdje događa. 148 00:09:09,230 --> 00:09:14,360 No, glavna poanta je u tome da moramo nazvati tu funkciju SDL u njoj 149 00:09:14,360 --> 00:09:18,910 i to prođe što vrste stvari želimo knjižnica inicijalizirati. 150 00:09:18,910 --> 00:09:23,620 Dakle, u našem slučaju, mi samo idete inicijalizirati video za sada, 151 00:09:23,620 --> 00:09:26,690 tako da možemo početi prikazivati ​​slike. 152 00:09:26,690 --> 00:09:32,370 >> Više ovdje, možete li mi kliknite na SDL u njemu, mi 153 00:09:32,370 --> 00:09:36,160 mogu dobiti još više informacija, uključujući povratnu vrijednost. 154 00:09:36,160 --> 00:09:39,050 Dakle, vidimo da se ovdje to returnes nula na uspjeh. 155 00:09:39,050 --> 00:09:43,320 Dakle, u našem kodu, idemo vidjeti ako to ne vraća na nulu, 156 00:09:43,320 --> 00:09:47,020 a ako se ne vrati nula, tako da nije bio uspješan, 157 00:09:47,020 --> 00:09:50,650 onda ćemo jednostavno ispisati pogreška koristite ovu drugu funkciju, 158 00:09:50,650 --> 00:09:56,260 SDL GET pogreška, koja vraća string opisuje pogrešku koja se dogodila. 159 00:09:56,260 --> 00:09:58,510 Idemo ispis koji pogreškama i onda smo jednostavno 160 00:09:58,510 --> 00:10:02,270 će izaći iz programa sa šifrom pogreške. 161 00:10:02,270 --> 00:10:06,470 >> Zatim još jedna stvar koja nam je potrebna učiniti je, prije programa izlazima, 162 00:10:06,470 --> 00:10:10,830 ako smo uspješno inicijalizira SDL, samo mi treba da ga SDL prestati zvati. 163 00:10:10,830 --> 00:10:15,750 A što će nositi čišćenje sve SDL unutarnjih resursa za nas. 164 00:10:15,750 --> 00:10:21,240 Tako je dokumentacija opet there--, Ovdje smo u inicijalizacije 165 00:10:21,240 --> 00:10:23,640 a isključite odjeljak dokumentacije. 166 00:10:23,640 --> 00:10:26,680 Možete samo kliknuti na Funkcija ovdje, SDL prestati, 167 00:10:26,680 --> 00:10:28,700 a možete pročitati sve o tome kako je dobro. 168 00:10:28,700 --> 00:10:31,400 I puno tih funkcija Dokumentacija stranice 169 00:10:31,400 --> 00:10:35,630 imate primjer koda, tako da to vrlo dobar izvor. 170 00:10:35,630 --> 00:10:39,610 Definitivno provesti neko vrijeme čitajući dijelove ovog wikija 171 00:10:39,610 --> 00:10:42,520 ako idete raditi to za projekt. 172 00:10:42,520 --> 00:10:43,760 >> U redu. 173 00:10:43,760 --> 00:10:46,590 Tako da je naš cijeli program. 174 00:10:46,590 --> 00:10:53,935 Što možemo učiniti sada is-- sam će otvoriti Makefile ovdje 175 00:10:53,935 --> 00:10:56,150 pa ću uzeti pogledajte kako se to radi. 176 00:10:56,150 --> 00:10:59,500 I to je vrlo jednostavan makefile, slično onome što ste vidjeli prije. 177 00:10:59,500 --> 00:11:04,010 Jedna od glavnih razlika je da se ovdje, ovaj 178 00:11:04,010 --> 00:11:07,870 će umetnuti rezultat trčanja ova naredba, koji ste već 179 00:11:07,870 --> 00:11:10,850 instalirani ako ste instalirali SDL. 180 00:11:10,850 --> 00:11:13,230 I ovo je zapovijed koja će generirati 181 00:11:13,230 --> 00:11:16,710 neki dodatni zastave za kompilator. 182 00:11:16,710 --> 00:11:22,050 >> Osim toga, mi smo ga daje sve uobičajene naredbe, kao 183 00:11:22,050 --> 00:11:23,430 ove dvije naredbe. 184 00:11:23,430 --> 00:11:30,270 Tako su -lsdl2-image ručke povezivanje u SDL slike knjižnica. 185 00:11:30,270 --> 00:11:36,200 A -lm zapravo obrađuje povezivanje u standardnom C matematike knjižnica. 186 00:11:36,200 --> 00:11:40,630 Dakle, mi se ne događa da je potrebno oni za sve naše C datoteka, 187 00:11:40,630 --> 00:11:43,900 ali mi ih samo staviti u tako da možemo koriste istu Makefile za sve 188 00:11:43,900 --> 00:11:44,816 bez izmjena. 189 00:11:44,816 --> 00:11:46,970 190 00:11:46,970 --> 00:11:50,080 >> Ovamo u izvorima, ovo je mjesto gdje ćete bih 191 00:11:50,080 --> 00:11:53,680 staviti datoteke koje su išli sastaviti za svoj projekt. 192 00:11:53,680 --> 00:11:57,570 No, budući da svaki od mojih C datoteka ovdje ima glavnu ulogu, 193 00:11:57,570 --> 00:12:00,000 to će se zbuniti ako smo ih sve staviti u. 194 00:12:00,000 --> 00:12:06,930 Zato ću samo reći, za sada, hello1_sdl.c, 195 00:12:06,930 --> 00:12:11,150 što je jedan smo upravo pogledao. 196 00:12:11,150 --> 00:12:18,740 Dakle, ako sam se vratiti preko ovdje, ja mogu ne čine. 197 00:12:18,740 --> 00:12:22,160 I ono što je učinio je to samo sastavio tu prvu datoteku. 198 00:12:22,160 --> 00:12:28,780 A onda možemo upisati ./game, jer to je izvršna je proizvedena. 199 00:12:28,780 --> 00:12:31,660 I sve što je učinio bilo ispis inicijalizacija uspješna. 200 00:12:31,660 --> 00:12:33,300 Tako smo učinili nešto dobro. 201 00:12:33,300 --> 00:12:36,200 Ali to je vrsta dosadno, jer nismo vidjeli prozor, 202 00:12:36,200 --> 00:12:37,900 ništa se kreće oko. 203 00:12:37,900 --> 00:12:41,030 >> Pa super, dobili smo SDL inicijalizacije. 204 00:12:41,030 --> 00:12:43,520 Sada, krenimo na nešto malo više zanimljiv. 205 00:12:43,520 --> 00:12:54,700 Dakle, ovdje imamo hello2_window.c i ovo će biti nešto više 206 00:12:54,700 --> 00:13:00,010 Kompleks C program koji inicijalizira SDL baš kao i prije, 207 00:13:00,010 --> 00:13:04,250 osim sada smo također ćemo inicijalizirati SDL vremena. 208 00:13:04,250 --> 00:13:07,720 A to će nas pustiti pristupiti interne timer 209 00:13:07,720 --> 00:13:10,550 i koriste funkcije koje se odnose na vrijeme. 210 00:13:10,550 --> 00:13:11,920 >> A onda pogledajmo ovdje. 211 00:13:11,920 --> 00:13:16,840 Ono što radimo je da se ovaj pokazivač na SDL prozora STRUCT, koji 212 00:13:16,840 --> 00:13:21,160 će biti izrađen od strane ovog poziva u funkciji, SDL stvoriti prozor. 213 00:13:21,160 --> 00:13:25,380 Sada, to traje puno argumenata, pa idemo pogledajte dokumentaciju. 214 00:13:25,380 --> 00:13:27,930 Pa opet, idem API po kategoriji, ja sam 215 00:13:27,930 --> 00:13:33,820 ide dolje na video ovdje, a prvi poglavlje, prikazujući prozor za upravljanje. 216 00:13:33,820 --> 00:13:36,470 Dakle, ovo poglavlje ima tona stvari u njemu, 217 00:13:36,470 --> 00:13:39,970 ali ako pogledamo kroz ove funkcije, vi ćete 218 00:13:39,970 --> 00:13:43,620 vidjeti da je vjerojatno jedan mi Želite se zove SDL izradu prozora, 219 00:13:43,620 --> 00:13:46,600 što se događa da se na samom vrhu. 220 00:13:46,600 --> 00:13:49,080 >> I tako je to Dokumentacija za tu funkciju. 221 00:13:49,080 --> 00:13:53,710 Prozor će imati naslov, X i Y položaj na zaslonu, 222 00:13:53,710 --> 00:13:56,960 to će imati širinu, visinu, a onda će se poduzeti neke zastave. 223 00:13:56,960 --> 00:14:01,220 Sada, mi zapravo ne stalo bilo koji od ovih zastava upravo sada, 224 00:14:01,220 --> 00:14:04,560 ali ako ste htjeli nešto učiniti kao što napraviti puni zaslon prozor, 225 00:14:04,560 --> 00:14:07,920 možete pogledati na to. 226 00:14:07,920 --> 00:14:13,190 Za sada, samo ćemo koristiti ove posebne vrijednosti, 227 00:14:13,190 --> 00:14:18,775 SDL prozor plus usmjeren za x i y u cilju 228 00:14:18,775 --> 00:14:21,800 samo stvoriti prozor u središtu našeg ekrana. 229 00:14:21,800 --> 00:14:24,370 >> Dakle, to je ono što se radi. 230 00:14:24,370 --> 00:14:27,960 A ako se dogodi da se prozor NULL, što znači da je došlo do pogreške, 231 00:14:27,960 --> 00:14:32,570 opet mi samo ide na ispis pogreške pomoću SDL get pogrešku. 232 00:14:32,570 --> 00:14:36,570 A onda, jer mi inicijalizacije SDL, sada ga morati zatvoriti. 233 00:14:36,570 --> 00:14:40,900 Tako mi zovemo SDL prestati prije povratak jedan za glavno. 234 00:14:40,900 --> 00:14:42,905 >> Dakle, imamo ovaj prozor otvoriti nadamo. 235 00:14:42,905 --> 00:14:44,613 A što ćemo učiniti je da ćemo 236 00:14:44,613 --> 00:14:50,340 pozvati SDL za 5000 milisekundi, koji je isti kao i pet sekundi. 237 00:14:50,340 --> 00:14:55,640 A kad završimo s tim, to će uništiti prozor, 238 00:14:55,640 --> 00:14:59,470 počistiti SDL knjižnica, i napustite program. 239 00:14:59,470 --> 00:15:05,240 Tako ćemo ići naprijed i dati da je pucao. 240 00:15:05,240 --> 00:15:08,660 >> Tako sada umjesto mijenjanja makefile svaki put, 241 00:15:08,660 --> 00:15:12,180 Ja jednostavno ne čine i zatim na naredbenog retka, 242 00:15:12,180 --> 00:15:16,090 kažu izvori jednaka, a zatim file smo sastavljanju. 243 00:15:16,090 --> 00:15:17,090 Tako da je hello2_window.c. 244 00:15:17,090 --> 00:15:21,390 245 00:15:21,390 --> 00:15:21,890 Fantastičan. 246 00:15:21,890 --> 00:15:22,970 Nema erros. 247 00:15:22,970 --> 00:15:26,085 Sada, ako ćemo pokrenuti našu izvršnu, vidimo ovaj prozor. 248 00:15:26,085 --> 00:15:27,960 Sada postoji nekoliko problemi s prozora. 249 00:15:27,960 --> 00:15:32,820 Možemo ga kretati, ali ima Ova pozadina junk unutar nje. 250 00:15:32,820 --> 00:15:34,660 Pa nismo izvučeni ništa, i tako to 251 00:15:34,660 --> 00:15:38,210 Samo puna smeća, što je ljepušan velik dio onoga što smo očekivali. 252 00:15:38,210 --> 00:15:41,010 >> Nadalje, ne možemo zatvoriti prozor. 253 00:15:41,010 --> 00:15:44,780 Ja pritiskom ovaj X u kutak i ništa ne događa. 254 00:15:44,780 --> 00:15:47,840 Tako ćemo vidjeti kako popraviti da u malo. 255 00:15:47,840 --> 00:15:51,750 Tako ćemo riješiti dio gdje Prozor je pun smeća prvi. 256 00:15:51,750 --> 00:16:00,850 Dakle, ako ćemo ići preko hello3_image.c, što Vidimo se da smo dodali malo 257 00:16:00,850 --> 00:16:03,360 više stvari ovdje. 258 00:16:03,360 --> 00:16:08,740 Dodali smo ovaj novi zaglavlje podnijeti da se funkcija timera. 259 00:16:08,740 --> 00:16:11,490 Mislim da je to učinio u posljednje jedan, previše, i nisam ga spomenuo. 260 00:16:11,490 --> 00:16:13,550 Ali sada, jer smo rad sa slikama, 261 00:16:13,550 --> 00:16:18,720 moramo uključiti SDL Slika zaglavlje datoteke kao dobro. 262 00:16:18,720 --> 00:16:22,087 Dakle, to je ista stvar kao prije inicijalizacije SDL ovdje 263 00:16:22,087 --> 00:16:23,420 Isto se bave stvaranjem prozore. 264 00:16:23,420 --> 00:16:25,380 Vidjeli smo da je do sada. 265 00:16:25,380 --> 00:16:29,870 >> Sada moramo stvoriti nešto što se zove renderer koji nekako ide uz 266 00:16:29,870 --> 00:16:30,800 s prozora. 267 00:16:30,800 --> 00:16:33,860 Ali, to je neka vrsta sažetak objekt koji je 268 00:16:33,860 --> 00:16:37,370 zadužen radiš sve to crtanje operacija na prozor. 269 00:16:37,370 --> 00:16:41,580 I to je zapravo odgovara za program učitava 270 00:16:41,580 --> 00:16:47,880 u grafičkom hardveru u vašem računalo ili telefon ili bilo što drugo. 271 00:16:47,880 --> 00:16:51,005 Tako su zastave želimo it-- proći i možete pogledajte dokumentaciju 272 00:16:51,005 --> 00:16:56,160 dobiti više detalja here-- se događa treba SDL žbuka ubrzan, što 273 00:16:56,160 --> 00:16:58,550 znači da će biti pomoću grafičkog hardvera 274 00:16:58,550 --> 00:17:01,490 i to ne samo emulirati u softver. 275 00:17:01,490 --> 00:17:07,390 >> A mi ćemo koristiti SDL renderer PRESENTVSYNC. 276 00:17:07,390 --> 00:17:12,280 VSync je stvar koja se jednostavno čini Vaši grafike izgledaju bolje i sprječava 277 00:17:12,280 --> 00:17:14,970 ova stvar zove zaslon užas, gdje je polovica 278 00:17:14,970 --> 00:17:17,720 jednog okvira i polovici sljedeće Okvir uvući istovremeno 279 00:17:17,720 --> 00:17:20,056 i to izgleda strašno. 280 00:17:20,056 --> 00:17:23,130 Ali opet, možete ići čitati O tome na svoju vlastitu. 281 00:17:23,130 --> 00:17:24,319 >> Dakle, imamo neke zastave ovdje. 282 00:17:24,319 --> 00:17:27,810 I tako smo samo ćemo nazvati ova funkcija SDL stvoriti renderer. 283 00:17:27,810 --> 00:17:31,340 Mi ćemo dati prozor povezati s tom renderer. 284 00:17:31,340 --> 00:17:34,520 Negativan znači da nije briga što Grafika Vozač ćemo koristiti. 285 00:17:34,520 --> 00:17:36,603 Tako da bi trebao prilično mnogo uvijek biti negativan, 286 00:17:36,603 --> 00:17:39,010 ako ne znate o grafičkim vozača. 287 00:17:39,010 --> 00:17:41,650 I onda mi samo idete da to prođe naše zastave. 288 00:17:41,650 --> 00:17:47,240 Dakle, ako se to vraća null, onda smo će ispisati grešku kao i obično, 289 00:17:47,240 --> 00:17:49,550 ali onda smo i idemo uništiti prozor 290 00:17:49,550 --> 00:17:54,970 očistiti te resurse prije zove SDL otkaz i povratka. 291 00:17:54,970 --> 00:17:58,110 >> Sada, zanimljiv dio ovdje je gdje ćemo učitavanje naše slike 292 00:17:58,110 --> 00:18:00,870 Ova funkcija IMG_load. 293 00:18:00,870 --> 00:18:04,050 To je jedina funkcija ćemo koristiti s SDL slike knjižnica. 294 00:18:04,050 --> 00:18:05,480 To je samo jedna trebamo. 295 00:18:05,480 --> 00:18:12,950 To je funkcija koja uzima string da je put bilo slike resursa. 296 00:18:12,950 --> 00:18:18,024 I to može biti .png, GIF, bitmap, bilo koju od tih stvari. 297 00:18:18,024 --> 00:18:19,690 I to je razlog zašto ova funkcija je tako lijepo. 298 00:18:19,690 --> 00:18:22,560 To se može nositi prilično mnogo bilo kojem obliku. 299 00:18:22,560 --> 00:18:27,240 Opterećenja u memoriju i pohranjuje ga kao što se zove SDL površinu. 300 00:18:27,240 --> 00:18:34,660 >> Sada SDL površina je samo struct koji predstavlja slikovnih podataka u memoriji. 301 00:18:34,660 --> 00:18:38,054 Dakle, možete pročitati više o da je u dokumentaciji dva. 302 00:18:38,054 --> 00:18:40,720 A ako je to pogrešaka, onda smo učiniti cijelu stvar gdje 303 00:18:40,720 --> 00:18:44,480 možemo ispisati grešku, zatvoriti resursa, a zatim zatvorite program. 304 00:18:44,480 --> 00:18:48,970 Sada Zanimljivo je, prije možemo izvući ovu sliku na prozoru, 305 00:18:48,970 --> 00:18:51,390 moramo zapravo čine ga teksture. 306 00:18:51,390 --> 00:18:54,460 Sada tekstura odgovara slikovnih podataka učitava 307 00:18:54,460 --> 00:18:57,820 u grafičkom hardveru memoriju. 308 00:18:57,820 --> 00:19:00,720 >> Dakle, površina je glavna memorije, redovito memorije 309 00:19:00,720 --> 00:19:05,550 koje smo koristili cijeli semestar, a tekstura je u tom zasebnom VRAM 310 00:19:05,550 --> 00:19:09,410 memorije da kontrole grafička kartica. 311 00:19:09,410 --> 00:19:13,170 Tako zovemo ovu funkciju SDL_CreateTextureFromSurface. 312 00:19:13,170 --> 00:19:17,104 Mi dati mu naše renderer i naš površine. 313 00:19:17,104 --> 00:19:19,020 I onda smo zapravo učinjeno s površinom, 314 00:19:19,020 --> 00:19:20,311 tako da smo samo će ga osloboditi. 315 00:19:20,311 --> 00:19:22,210 Mi ne treba više. 316 00:19:22,210 --> 00:19:26,650 A onda pa ako taj poziv errored i vratio null, 317 00:19:26,650 --> 00:19:29,630 onda ćemo napraviti cjelinu opet izvješćivanje stvar pogreške. 318 00:19:29,630 --> 00:19:30,920 >> U redu. 319 00:19:30,920 --> 00:19:34,810 Ovdje smo dobili u neki Stvarni renderiranje funkcije. 320 00:19:34,810 --> 00:19:37,730 Dakle, nazivajući SDL_RenderClear i to prolazi 321 00:19:37,730 --> 00:19:42,550 prikazivačem povezane s naših prozora jednostavno čini prozor ići crno. 322 00:19:42,550 --> 00:19:47,650 Tako da uklanja to smeće koje smo vidjeli u naš prozor prije i čini crno. 323 00:19:47,650 --> 00:19:50,750 A onda ćemo nazvati SDL_RenderCopy, 324 00:19:50,750 --> 00:19:53,010 Daju našu renderer, naš teksturu. 325 00:19:53,010 --> 00:19:55,800 A mi ćemo govoriti o tome što Ta polja su malo. 326 00:19:55,800 --> 00:19:57,830 Ali to će uzeti podatke teksture 327 00:19:57,830 --> 00:20:03,100 i kopirajte ga na našem prozor za crtanje slika. 328 00:20:03,100 --> 00:20:07,020 Dakle, nakon što smo učinili ovu kopiju podatke na našem prozoru, 329 00:20:07,020 --> 00:20:11,180 moramo napraviti taj dodatni funkciju zove SDL_RenderPresent. 330 00:20:11,180 --> 00:20:15,360 >> I ovo je interesantno jer je to dobiva 331 00:20:15,360 --> 00:20:18,770 u temi pod nazivom dvostruko razdvajanje. 332 00:20:18,770 --> 00:20:24,380 Dakle, dvostruko razdvajanje je tehnika koja čini svoje grafike izgledaju puno bolje. 333 00:20:24,380 --> 00:20:28,240 Opet, ona sprečava da se zaslon kidanje Ja sam govorio o ranije, gdje je 334 00:20:28,240 --> 00:20:29,590 imate dva odbojnika. 335 00:20:29,590 --> 00:20:32,260 Postoji natrag tampon u memorije i prednji tampon. 336 00:20:32,260 --> 00:20:36,410 Prednji tampon doslovno što je na zaslonu u ovom trenutku. 337 00:20:36,410 --> 00:20:42,070 Dakle, radimo sve to izvući varijacije, kao SDL donijeti kopiju ili SDL_RenderClear 338 00:20:42,070 --> 00:20:43,080 na stražnjoj pufera. 339 00:20:43,080 --> 00:20:44,800 Tako su mijenjati stvari u leđa tampon. 340 00:20:44,800 --> 00:20:48,970 Ovdje bismo mogli biti crtež ovo zeleni kvadrat na stražnji tampon. 341 00:20:48,970 --> 00:20:52,300 >> Pa onda kad završimo radili naši uzvratiti operacija, koje 342 00:20:52,300 --> 00:20:55,700 može potrajati jako dugo Vrijeme, što ćemo učiniti 343 00:20:55,700 --> 00:20:57,860 je prebaciti odbojnika. 344 00:20:57,860 --> 00:21:00,720 Dakle, to je doslovno samo uzima Prednji tampon i natrag tampon 345 00:21:00,720 --> 00:21:02,990 i prebacuje ih, pa to, trenutno, 346 00:21:02,990 --> 00:21:06,630 u jednoj operaciji, umjesto možda stotine ili tisuće, 347 00:21:06,630 --> 00:21:10,910 sve naše novo donio objekti na zaslonu. 348 00:21:10,910 --> 00:21:13,160 I to sprečava stvari poput zaslona okrepljujući 349 00:21:13,160 --> 00:21:16,710 kad smo samo sam izvučeni na pola naših objekata za okvir. 350 00:21:16,710 --> 00:21:21,280 Dakle, to je razlog zašto moramo zvati SDL_RenderPresent, kao 351 00:21:21,280 --> 00:21:23,320 kao SDL_RenderCopy. 352 00:21:23,320 --> 00:21:25,749 >> Opet, mi samo idete čekati pet sekundi. 353 00:21:25,749 --> 00:21:27,540 Onda ćemo očistiti naše resurse. 354 00:21:27,540 --> 00:21:29,540 Imamo dosta više ovaj put. 355 00:21:29,540 --> 00:21:31,750 I onda mi samo idete za izlaz iz programa. 356 00:21:31,750 --> 00:21:35,350 Tako ćemo učiniti. 357 00:21:35,350 --> 00:21:41,880 Idem upisati napraviti, a onda izvora jednako hello-- ovo je sada 3image.c. 358 00:21:41,880 --> 00:21:49,632 359 00:21:49,632 --> 00:21:52,240 U redu, to sastaviti bez greške. 360 00:21:52,240 --> 00:21:57,210 A možete vidjeti ovdje imam sada izvučen moju sliku, Pozdrav, CS50! 361 00:21:57,210 --> 00:22:00,560 našem prozoru, koji nestaje nakon pet sekundi. 362 00:22:00,560 --> 00:22:02,090 >> Sada, to još uvijek ima problema, zar ne? 363 00:22:02,090 --> 00:22:05,750 To nije dobra aplikacija, jer kad sam pokušati zatvoriti prozor, 364 00:22:05,750 --> 00:22:06,500 ništa se ne događa. 365 00:22:06,500 --> 00:22:09,540 To je x uvijek ne reagira. 366 00:22:09,540 --> 00:22:17,420 Tako ćemo uzeti pogledajte Sljedeći datoteke, hello4animation. 367 00:22:17,420 --> 00:22:21,850 Dakle, ovo je varalica da će uvesti 368 00:22:21,850 --> 00:22:25,124 kreće i pokret za svoju sliku. 369 00:22:25,124 --> 00:22:27,040 Tako ćemo učiniti Ista stvar kao i prije, 370 00:22:27,040 --> 00:22:30,190 pokrenuti SDL, stvoriti prozor, stvoriti renderer, 371 00:22:30,190 --> 00:22:33,030 učitati sliku u memorije, stvarati teksture. 372 00:22:33,030 --> 00:22:35,090 Vidjeli smo sve to prije. 373 00:22:35,090 --> 00:22:36,770 Sada, ovo je novo. 374 00:22:36,770 --> 00:22:42,305 Idemo se struktura naziva SDL pravokutnika, što je samo pravokutnik. 375 00:22:42,305 --> 00:22:49,950 Ako idemo ovamo, možemo napraviti pretragu za SDL RECT, 376 00:22:49,950 --> 00:22:54,040 i možete vidjeti da je to vrlo jednostavna struktura. 377 00:22:54,040 --> 00:22:56,760 Ima x, y za položaj, a to 378 00:22:56,760 --> 00:23:02,080 ima širinu i visinu za veličina pravokutnika. 379 00:23:02,080 --> 00:23:07,785 >> Pa što ćemo učiniti je da smo će definirati ovu SDL Prav Odr, 380 00:23:07,785 --> 00:23:09,480 za odredište. 381 00:23:09,480 --> 00:23:14,130 I ovo je mjesto na ekranu gdje 382 00:23:14,130 --> 00:23:16,005 ćemo biti crtež naša slika, zar ne Pa 383 00:23:16,005 --> 00:23:17,880 ako ćemo biti kreće sliku okolo, 384 00:23:17,880 --> 00:23:20,300 onda destinacija u kojoj idemo nacrtati sliku 385 00:23:20,300 --> 00:23:22,620 treba kretanje. 386 00:23:22,620 --> 00:23:24,910 Tako ćemo zvati Funkcija SDL_QueryTexture. 387 00:23:24,910 --> 00:23:27,550 388 00:23:27,550 --> 00:23:33,500 I primijetiti sam prolazeći adresu od dest.w, što je širina, 389 00:23:33,500 --> 00:23:36,950 i dest.h, što je visina. 390 00:23:36,950 --> 00:23:40,425 I tako SDL_QueryTexture ide pohraniti u tim područjima širina 391 00:23:40,425 --> 00:23:41,675 a visina našeg teksture. 392 00:23:41,675 --> 00:23:44,680 393 00:23:44,680 --> 00:23:47,030 >> I onda ono što ću učiniti je idem 394 00:23:47,030 --> 00:23:55,580 postaviti dest.x biti prozor Širina minus dest.w, što je 395 00:23:55,580 --> 00:23:59,000 širina sprite, podijeljena 2. 396 00:23:59,000 --> 00:24:03,860 I to će ga postaviti tako da je slika savršeno centriran 397 00:24:03,860 --> 00:24:06,780 u našem prozoru, u redu? 398 00:24:06,780 --> 00:24:08,652 Tako sada imam y položaj. 399 00:24:08,652 --> 00:24:10,360 A to će se biti varijablu koja je 400 00:24:10,360 --> 00:24:16,390 mijenja, zato što ćemo biti pomicanje slike u y smjeru. 401 00:24:16,390 --> 00:24:19,050 I sada imamo nešto zove animacija petlje. 402 00:24:19,050 --> 00:24:21,180 >> Pa kako se animacija raditi? 403 00:24:21,180 --> 00:24:27,630 Pa, ljudsko oko može otkriti 12 različita slika u svakoj sekundi, u redu? 404 00:24:27,630 --> 00:24:33,060 Dakle, ako ste bljesak 12 slika kartice na mene u sekundi, vidio sam svaki od tih slika 405 00:24:33,060 --> 00:24:35,950 kao vlastitu izrazitu pojedinačne slike. 406 00:24:35,950 --> 00:24:39,690 Sada, ako treptati više Slike na mene u drugom, 407 00:24:39,690 --> 00:24:42,140 onda moje oči će početi ih zamagliti zajedno 408 00:24:42,140 --> 00:24:46,920 i ja bi ga doživljavaju kao pokretu, umjesto jedne zasebne slike. 409 00:24:46,920 --> 00:24:51,930 Tako, na primjer, filmova i televizije, oni Flash slike na vas 24 puta 410 00:24:51,930 --> 00:24:52,570 drugi. 411 00:24:52,570 --> 00:24:55,110 Tako da je 24 sličica u sekundi. 412 00:24:55,110 --> 00:25:00,136 Ekrana računala, s druge strane, Često su na 60 sličica u sekundi. 413 00:25:00,136 --> 00:25:01,260 To je njihova brzina osvježavanja. 414 00:25:01,260 --> 00:25:04,650 Tako često osvježavati slika na zaslonu. 415 00:25:04,650 --> 00:25:08,960 Dakle, naš cilj će biti 60 sličica u sekundi za naše igre. 416 00:25:08,960 --> 00:25:11,770 417 00:25:11,770 --> 00:25:13,710 >> Tako ćemo vidjeti da u kodu. 418 00:25:13,710 --> 00:25:19,064 Dakle, za svaki okvir, mi smo prvi će očistiti prozor. 419 00:25:19,064 --> 00:25:20,230 To je opći obrazac. 420 00:25:20,230 --> 00:25:22,450 Ti uvijek jasno svaki okvir prozora, a potom 421 00:25:22,450 --> 00:25:25,210 učiniti sve svoj crtež operacije, a onda na kraju, 422 00:25:25,210 --> 00:25:29,610 ne RenderPresent pokazati sve u okviru. 423 00:25:29,610 --> 00:25:33,910 A onda idete imaju čekati na kraju 424 00:25:33,910 --> 00:25:36,340 čekati do sljedećeg Okvir treba početi. 425 00:25:36,340 --> 00:25:38,650 >> Dakle, ako sam bio događaj puno Kompleks računanje ovdje 426 00:25:38,650 --> 00:25:43,100 da je više od 16 milisekundi, to bi bilo nemoguće za mene 427 00:25:43,100 --> 00:25:46,890 da biste dobili taj frame rate od 60 koji Htio sam, jer je svaki okvir 428 00:25:46,890 --> 00:25:48,750 predugo traje izračunati. 429 00:25:48,750 --> 00:25:52,340 Nadalje, mi stvarno radite vrsta zanemarivom količinom posla 430 00:25:52,340 --> 00:25:54,820 ovdje, jer samo je jedna stvar mi crtež. 431 00:25:54,820 --> 00:25:59,390 Pa sam samo čekati 1/60 jednog Druga, što se duljina 432 00:25:59,390 --> 00:26:01,520 od okvira u između okvira. 433 00:26:01,520 --> 00:26:05,610 Tako sam nekako praveći radi sve moj rad traje nula vremena. 434 00:26:05,610 --> 00:26:09,050 No, u stvarnom igri, ne bi se oduzimati 435 00:26:09,050 --> 00:26:13,760 količina vremena je trebalo učiniti sve to rade iz svog vremena za odmor. 436 00:26:13,760 --> 00:26:16,970 >> Pa ipak, ono što sam ja zapravo radi u ovoj petlji? 437 00:26:16,970 --> 00:26:19,070 I jasno prozor. 438 00:26:19,070 --> 00:26:27,470 Ja postaviti dest.y, što je za int moja stvarna y pozicija baci u int. 439 00:26:27,470 --> 00:26:32,070 Sada, želim plutati razlučivost za moj y položaju u mojoj igri, 440 00:26:32,070 --> 00:26:34,150 ali onda se zapravo privući ga na zaslonu, 441 00:26:34,150 --> 00:26:39,070 treba Ints, jer je u jedinicama piksela, tako da je ono što je za cast. 442 00:26:39,070 --> 00:26:41,745 Idem nacrtati sliku. 443 00:26:41,745 --> 00:26:45,180 Dakle, ovo je izvor pravokutnik. 444 00:26:45,180 --> 00:26:47,060 I ovo je mjesto pravokutnik. 445 00:26:47,060 --> 00:26:50,310 Tako sam prošli null za izvor pravokutnik 446 00:26:50,310 --> 00:26:53,426 reći želim skrenuti moju cijelu teksture. 447 00:26:53,426 --> 00:26:55,300 No, ako ste imali puno teksture u igri 448 00:26:55,300 --> 00:26:59,120 i oni su svi u jedan veliki tekstura karti koji je učitan u SDL kao samo jedan 449 00:26:59,120 --> 00:27:02,850 teksture, što bi koristite izvorni pravokutnik 450 00:27:02,850 --> 00:27:06,750 odabrati jedan od manjih tekstura, jedna od manjih duhovi, 451 00:27:06,750 --> 00:27:09,450 iz tog velikog teksture karte. 452 00:27:09,450 --> 00:27:14,740 >> Pa opet, mi prolazi moj žbuke, moj teksture, a sada odredište. 453 00:27:14,740 --> 00:27:18,320 To će biti gdje u Prozor to će biti izvučeni. 454 00:27:18,320 --> 00:27:21,390 A onda, jer sam animiranje nešto, trebam pokret, 455 00:27:21,390 --> 00:27:25,150 Idem se ažuriranje Sprite položaj na svaki okvir. 456 00:27:25,150 --> 00:27:30,190 Dakle, imam stalnu zove svitak brzina u jedinicama piksela u sekundi. 457 00:27:30,190 --> 00:27:34,320 Sada, svaki put smo napraviti pokret, okvir samo 1/60 sekunde. 458 00:27:34,320 --> 00:27:36,740 Zato ću podijeliti da do 60. 459 00:27:36,740 --> 00:27:42,350 A onda, da vidimo, ja sam oduzimanjem da je od y položaju. 460 00:27:42,350 --> 00:27:44,470 Zašto mi oduzme? 461 00:27:44,470 --> 00:27:46,169 Mi ćemo doći na to u sekundi. 462 00:27:46,169 --> 00:27:48,460 Pa onda sam počistiti svoje resurse a program je završen. 463 00:27:48,460 --> 00:27:49,830 >> Tako ćemo učiniti da. 464 00:27:49,830 --> 00:27:52,450 465 00:27:52,450 --> 00:28:03,570 Dakle, idemo u make SRCS = hello4 animation.c, u redu? 466 00:28:03,570 --> 00:28:05,720 Igra. 467 00:28:05,720 --> 00:28:06,770 Izvoli. 468 00:28:06,770 --> 00:28:12,690 Tako sam ga pomicati gore prozor, što je prilično uredan. 469 00:28:12,690 --> 00:28:17,110 Ali drži se, bio sam oduzimanjem iz y položaj svaki put. 470 00:28:17,110 --> 00:28:18,910 Što se događa tamo? 471 00:28:18,910 --> 00:28:24,010 Pa, ispada da u SDL i Zapravo, u većini računalne grafike, 472 00:28:24,010 --> 00:28:28,890 podrijetlo za koordinatnom sustavu je u gornjem lijevom kutu prozora. 473 00:28:28,890 --> 00:28:34,960 >> Tako je pozitivno x smjer ide preko prozora na desnoj strani. 474 00:28:34,960 --> 00:28:38,110 I pozitivni y smjer zapravo ide dolje. 475 00:28:38,110 --> 00:28:40,470 Pa opet, podrijetlo je u gornjem lijevom kutu prozora, 476 00:28:40,470 --> 00:28:46,190 pozitivni y smjer je prema dolje, i pozitivno x desno. 477 00:28:46,190 --> 00:28:48,770 Dakle, kada sam oduzeti od y pozicija, to je 478 00:28:48,770 --> 00:28:52,640 ide kako bi se ići na negativne y smjeru, što je do prozora. 479 00:28:52,640 --> 00:28:55,500 Dakle, to je ono što se događa tamo. 480 00:28:55,500 --> 00:28:56,510 Cool. 481 00:28:56,510 --> 00:28:59,240 >> Pogledajmo sljedeću datoteku. 482 00:28:59,240 --> 00:29:05,700 Ovdje je dio od pokazati gdje smo napokon 483 00:29:05,700 --> 00:29:08,920 dobiti taj X u kutu prozora koji je trebao zatvoriti prozor 484 00:29:08,920 --> 00:29:10,660 raditi. 485 00:29:10,660 --> 00:29:12,800 I što ima? 486 00:29:12,800 --> 00:29:17,520 Mi inicijalizirati SDL, stvoriti prozor, stvoriti renderer, učitati sliku, 487 00:29:17,520 --> 00:29:19,770 stvaranje teksture kao što smo vidjeli. 488 00:29:19,770 --> 00:29:26,850 Imamo isti odredišni pravokutnik kao i prije, isto poziv na upit teksture. 489 00:29:26,850 --> 00:29:29,780 Ali ovaj put, mi smo onda će podijeliti širinu 490 00:29:29,780 --> 00:29:33,110 a visina naše odredište za 4. 491 00:29:33,110 --> 00:29:36,430 To samo za posljedicu ima skaliranje našu snimku kada 492 00:29:36,430 --> 00:29:39,884 možemo ga prikazati u prozoru s četiri. 493 00:29:39,884 --> 00:29:40,800 Dakle, to je prilično uredan. 494 00:29:40,800 --> 00:29:42,770 Mi samo možemo ljestvici samo tako. 495 00:29:42,770 --> 00:29:45,970 Idemo za početak sprite u sredini zaslona. 496 00:29:45,970 --> 00:29:49,410 I sada imamo X i Y brzinu i Obojica će početi od nule. 497 00:29:49,410 --> 00:29:53,740 498 00:29:53,740 --> 00:29:55,880 >> To je u redu datoteka. 499 00:29:55,880 --> 00:29:56,380 Oprosti. 500 00:29:56,380 --> 00:29:57,960 Tako da je sve istina. 501 00:29:57,960 --> 00:30:00,170 To je sve još u ovoj datoteci. 502 00:30:00,170 --> 00:30:03,210 Imamo podijeliti sa 4 i sve. 503 00:30:03,210 --> 00:30:07,830 Dakle, ovdje imamo X i Y poziciju za sredini prozora. 504 00:30:07,830 --> 00:30:12,480 I da je to početnu brzinu ove stalnom brzinom, što 505 00:30:12,480 --> 00:30:15,180 Vjerujem iznosi 300 piksela po sekundi. 506 00:30:15,180 --> 00:30:19,850 Sada imamo ovaj int mogao jednako dobro biti boolean zove blizu zatražio. 507 00:30:19,850 --> 00:30:23,970 I umjesto da radiš beskonačna petlja na timer ovdje 508 00:30:23,970 --> 00:30:29,180 ćemo biti animiranje kao dok u blizini nije zatražio. 509 00:30:29,180 --> 00:30:30,960 >> Pa kako ćemo obraditi događaje? 510 00:30:30,960 --> 00:30:35,600 Pa, SDL queues do događaja na doslovni red iza kulisa. 511 00:30:35,600 --> 00:30:38,860 I onda svaki okvir, možemo dequeue događaje 512 00:30:38,860 --> 00:30:43,900 iz tog reda pomoću Ovaj poziv SDL_PullEvent. 513 00:30:43,900 --> 00:30:46,730 I opet, definitivno ići čitati o tome u dokumentaciji. 514 00:30:46,730 --> 00:30:50,450 Postoji puno više detalja i puno više funkcija možete koristiti s ovim. 515 00:30:50,450 --> 00:30:54,750 Mi to adresa proći ove stvari, SDL_Event 516 00:30:54,750 --> 00:30:56,990 da imamo ovdje na stog. 517 00:30:56,990 --> 00:30:58,840 >> Sada, što je SDL_event? 518 00:30:58,840 --> 00:31:02,356 Jer SDL, ako gledamo u su documentation-- neka je 519 00:31:02,356 --> 00:31:07,580 vidi, API prema kategoriji, ulaz događanja, događaj rukovanje, 520 00:31:07,580 --> 00:31:15,150 možemo gledati na broj različitih događanja ovdje 521 00:31:15,150 --> 00:31:18,600 i možemo vidjeti da je cijela tona od njih. 522 00:31:18,600 --> 00:31:22,150 Pa što je ovo SDL_Event stvar? 523 00:31:22,150 --> 00:31:28,190 524 00:31:28,190 --> 00:31:31,107 SDL_Event je sindikat. 525 00:31:31,107 --> 00:31:31,940 Wow, što je sindikat? 526 00:31:31,940 --> 00:31:33,910 Vi ste vjerojatno nikada čuo prije. 527 00:31:33,910 --> 00:31:35,610 I to je u redu. 528 00:31:35,610 --> 00:31:39,420 >> Savez je vrsta kao struct, osim STRUCT 529 00:31:39,420 --> 00:31:41,960 ima mjesta za sve njegovi polja i memorije, 530 00:31:41,960 --> 00:31:45,060 dok je sindikat ima samo dovoljno mjesta da stane najveće 531 00:31:45,060 --> 00:31:49,660 jedan od njegovih polja, što znači da može samo jedno od njegovih polja 532 00:31:49,660 --> 00:31:52,830 u vrijeme, koje vrste smisla za događaje, zar ne? 533 00:31:52,830 --> 00:31:55,810 Možemo imati tipkovnicu događaj ili prozor događaja, 534 00:31:55,810 --> 00:31:59,750 ali jedan događaj ne može biti i Tipkovnica događaj i prozor događaja, 535 00:31:59,750 --> 00:32:05,450 pa bi glupo da imaju prostor za kako onih unutar našeg događaja unije. 536 00:32:05,450 --> 00:32:07,770 Dakle, ako ste htjeli napraviti svoj vlastiti sindikat, 537 00:32:07,770 --> 00:32:10,020 izgleda točno isto kao stvaranje struct, 538 00:32:10,020 --> 00:32:14,140 osim što mi koristimo Unije ključnu riječ umjesto struct ključne riječi. 539 00:32:14,140 --> 00:32:17,490 I zapamtite, za sve stvari unutar vašeg sindikata, 540 00:32:17,490 --> 00:32:22,020 stvarna varijabla koja je sindikat može imati samo jednu od tih vrijednosti 541 00:32:22,020 --> 00:32:24,780 tada. 542 00:32:24,780 --> 00:32:29,940 >> Pa kako možemo reći kakav događaj mi samo popped off ovog reda? 543 00:32:29,940 --> 00:32:33,370 Pa, možemo testirati event.type. 544 00:32:33,370 --> 00:32:35,792 A ako je jednaka da SDL_Quit, znamo 545 00:32:35,792 --> 00:32:37,500 to je događaj koji se generira kada smo 546 00:32:37,500 --> 00:32:39,510 pogoditi X u kutu prozora. 547 00:32:39,510 --> 00:32:44,270 I možemo postaviti u blizini zatražio jednak 1. 548 00:32:44,270 --> 00:32:47,230 Ostalo je samo neke animacije da ste vidjeli prije. 549 00:32:47,230 --> 00:32:52,802 Tako ćemo ići naprijed i učiniti to i vidjeti koliko dobro to radi. 550 00:32:52,802 --> 00:32:55,135 Tako ću upisati napraviti i onda SRCS = hello5_events.c. 551 00:32:55,135 --> 00:33:03,760 552 00:33:03,760 --> 00:33:04,770 Idemo tamo. 553 00:33:04,770 --> 00:33:05,780 Igre. 554 00:33:05,780 --> 00:33:08,920 >> Sada, možemo vidjeti da je doista umanjena po četiri. 555 00:33:08,920 --> 00:33:10,360 A sada je odskakanje okolo. 556 00:33:10,360 --> 00:33:14,630 Imam neke detekcija sudara događa sa strane prozora 557 00:33:14,630 --> 00:33:16,840 da možemo pogledati. 558 00:33:16,840 --> 00:33:21,190 A što se događa kad idem da ga zatvoriti? 559 00:33:21,190 --> 00:33:22,120 To zatvara. 560 00:33:22,120 --> 00:33:22,740 Fantastičan. 561 00:33:22,740 --> 00:33:24,290 Dobili smo taj događaj. 562 00:33:24,290 --> 00:33:26,630 I mi ga obrađuju. 563 00:33:26,630 --> 00:33:30,730 >> Tako ćemo se osvrnuti na kodu. 564 00:33:30,730 --> 00:33:33,020 Pa kako sam ga dobiti odskakanje okolo kao da je? 565 00:33:33,020 --> 00:33:37,200 Zapamtite da postavite X i y početku brzinama. 566 00:33:37,200 --> 00:33:39,260 A brzina je pozitivna konstantna, tako da je 567 00:33:39,260 --> 00:33:42,680 će se to počinje ide prema dolje i udesno. 568 00:33:42,680 --> 00:33:45,680 569 00:33:45,680 --> 00:33:50,310 >> Sada, da svaki okvir, uz rukovanje događaji koje bi mogle nastati, 570 00:33:50,310 --> 00:33:57,520 Idem li otkriti moj Sprite pokušava izaći kroz prozor. 571 00:33:57,520 --> 00:34:03,610 Dakle, što možemo učiniti da je samo provjerom x_pos s 0, y_pos 0, a zatim 572 00:34:03,610 --> 00:34:07,370 također x_pos i y_pos s Širina i visina prozora prozor. 573 00:34:07,370 --> 00:34:11,010 Obavijest sam oduzeti širina duh. 574 00:34:11,010 --> 00:34:14,090 A to je zato što ako nisam oduzmite širinu Sprite, 575 00:34:14,090 --> 00:34:17,760 to bi samo provjeriti da podrijetlo Sprite 576 00:34:17,760 --> 00:34:19,690 ne ići van kroz prozor. 577 00:34:19,690 --> 00:34:21,480 Ali mi žele cijelu širina Sprite 578 00:34:21,480 --> 00:34:24,030 uvijek biti unutar prozora i cijela visina sprite 579 00:34:24,030 --> 00:34:25,321 uvijek biti unutar prozora. 580 00:34:25,321 --> 00:34:27,429 Dakle, to je ono što je za oduzimanje. 581 00:34:27,429 --> 00:34:30,080 Puno geometrije ovdje može biti od pomoći da ga izvući 582 00:34:30,080 --> 00:34:33,929 na papiru s koordinatnom Sustav se vidi što se događa. 583 00:34:33,929 --> 00:34:38,090 >> Dakle, ako ja ne sudaraju, samo sam jednostavno resetirati poziciju 584 00:34:38,090 --> 00:34:41,400 tako da se ne ide iz ekrana. 585 00:34:41,400 --> 00:34:47,179 I ja ću, ako se odbija na jednom od bočnih stijenki, 586 00:34:47,179 --> 00:34:51,469 Idem negirati X tako da brzina 587 00:34:51,469 --> 00:34:53,210 počinje odskakanje u drugom smjeru. 588 00:34:53,210 --> 00:34:56,210 A isto tako, ako ga pogodi vrh ili dno, 589 00:34:56,210 --> 00:34:59,820 Idem postaviti y brzinu jednaka negativne y brzine, 590 00:34:59,820 --> 00:35:01,690 tako da će odskočiti natrag. 591 00:35:01,690 --> 00:35:03,860 Dakle, to je samo kako smo ovdje. 592 00:35:03,860 --> 00:35:07,560 >> Te ažuriranje pozicije baš kao što smo vidjeli, 593 00:35:07,560 --> 00:35:12,510 podijeliti po 60, jer smo samo rukovanje 1/60 sekunde. 594 00:35:12,510 --> 00:35:15,750 A onda renderiranje, točno isto kao i prije. 595 00:35:15,750 --> 00:35:19,810 A kako je sve što se događa ove datoteke. 596 00:35:19,810 --> 00:35:22,490 Dakle, to je kako radimo događaja. 597 00:35:22,490 --> 00:35:29,260 Glavna stvar da odnese ovdje ovo SDL_PullEvent funkcija. 598 00:35:29,260 --> 00:35:33,020 I svakako treba pročitati Dokumentacija više o SDL_Event 599 00:35:33,020 --> 00:35:38,630 sindikat, jer je ova vrsta podataka je vrlo, vrlo važno, jer ćemo ga koristiti 600 00:35:38,630 --> 00:35:40,690 za sve vrste događaja. 601 00:35:40,690 --> 00:35:46,539 >> Na primjer, možemo ga koristiti za tipkovnicu događanja, što je ono što je ova datoteka za. 602 00:35:46,539 --> 00:35:47,330 Pa što imamo? 603 00:35:47,330 --> 00:35:50,180 Imamo istu stvar kao i prije, inicijalizirati SDL, stvoriti prozor, 604 00:35:50,180 --> 00:35:55,260 stvoriti renderer, učitati sliku u memoriju, stvoriti tekstura. 605 00:35:55,260 --> 00:36:00,530 Opet, mi ćemo imati ovaj Odred pravokutnik, 606 00:36:00,530 --> 00:36:04,890 idemo na ljestvici sliku po četiri, čine ga malo manji. 607 00:36:04,890 --> 00:36:08,000 Sada ćemo početi Sprite u središtu zaslona. 608 00:36:08,000 --> 00:36:12,090 Ali ovaj put, idemo postaviti početna X i Y brzine na nulu, 609 00:36:12,090 --> 00:36:15,140 jer tipkovnica je će kontrolirati one. 610 00:36:15,140 --> 00:36:18,900 I nadalje, idemo pratiti ovih varijabli 611 00:36:18,900 --> 00:36:20,450 gore, dolje, lijevo i desno. 612 00:36:20,450 --> 00:36:23,090 I to će držati Staza je li imamo 613 00:36:23,090 --> 00:36:27,370 pritisne tipke na tipkovnici da odgovaraju gore, dolje, lijevo, 614 00:36:27,370 --> 00:36:28,460 i pravo. 615 00:36:28,460 --> 00:36:32,440 >> Sada, ovo je vrsta fantazija jer možemo koristiti W, A, S, 616 00:36:32,440 --> 00:36:35,480 D ovdje ili stvarni tipke sa strelicama. 617 00:36:35,480 --> 00:36:38,590 Vidjet ćemo da je u samo sekundi. 618 00:36:38,590 --> 00:36:41,140 Tako ćemo obraditi događaj baš kao i prije. 619 00:36:41,140 --> 00:36:42,530 Mi povucite događaj. 620 00:36:42,530 --> 00:36:45,840 Ali sada ćemo uključite vrstu događaja. 621 00:36:45,840 --> 00:36:47,710 Ako je SDL_Quit, mi smo će postaviti u blizini 622 00:36:47,710 --> 00:36:49,990 zatražio da se jedan, baš kao i prije. 623 00:36:49,990 --> 00:36:52,315 To obrađuje xu kut prozora, 624 00:36:52,315 --> 00:36:55,050 tako da je naš prozor zapravo zatvara. 625 00:36:55,050 --> 00:37:00,110 >> Inače, ako smo dobili SDL tipku prema dolje događaj, što znači da pritisne tipku, 626 00:37:00,110 --> 00:37:04,470 onda ono što ćemo učiniti je da smo će prebaciti na ovu stvar ovdje, 627 00:37:04,470 --> 00:37:11,370 koji means-- tako event.key znači liječiti našu događanja sindikat, 628 00:37:11,370 --> 00:37:15,490 ići i dobiti ključ Struktura događaj u njemu. 629 00:37:15,490 --> 00:37:18,810 Tako ispada da je ovaj Sindikat je ključni struktura događaja. 630 00:37:18,810 --> 00:37:22,820 A onda ići na ključ Struktura događaja njegova polje 631 00:37:22,820 --> 00:37:26,140 zove keysym a zatim scancode. 632 00:37:26,140 --> 00:37:29,480 I opet, svakako pročitati dokumentacija o tome. 633 00:37:29,480 --> 00:37:31,220 Ulazi Riječ vrlo zanimljiv. 634 00:37:31,220 --> 00:37:34,020 Možete dobiti skeniranje kodova ili ključne kodove. 635 00:37:34,020 --> 00:37:38,590 I to je malo suptilna, ali dokumentacija je vrlo dobar. 636 00:37:38,590 --> 00:37:43,380 >> Dakle, ako vidimo kod skeniranja za naš ključni pritisnite W ili biti gore, 637 00:37:43,380 --> 00:37:45,450 ćemo postaviti jednak 1. 638 00:37:45,450 --> 00:37:47,240 A onda smo pobjeći iz tog prekidača. 639 00:37:47,240 --> 00:37:52,980 Ako je A ili ostavi, postavili smo ostavili na 1, i cetera, et cetera, za dolje i desno. 640 00:37:52,980 --> 00:37:57,080 Sada, u ovom vanjskom prekidač, ako vidimo ključ do događaja, 641 00:37:57,080 --> 00:38:00,730 to znači da smo izdali ključ i mi više ne si ga pritiskom. 642 00:38:00,730 --> 00:38:05,380 Zato ću reći do jednak 0, lijeva jednak 0, dolje jednak 0, pravo 643 00:38:05,380 --> 00:38:08,260 jednak 0, i tako dalje. 644 00:38:08,260 --> 00:38:12,070 >> I primijetiti imamo u svakoj od njih dva slučaja stavi pravu jedni pored drugih 645 00:38:12,070 --> 00:38:14,490 bez posebnom šifrom Prvi slučaj, koji 646 00:38:14,490 --> 00:38:18,180 znači da li je je S ili dolje upravo ovdje, 647 00:38:18,180 --> 00:38:20,520 to će izvršiti ovaj kod. 648 00:38:20,520 --> 00:38:22,090 Dakle, to je prilično zgodan. 649 00:38:22,090 --> 00:38:24,830 To sprečava nas da se učini više uvjeti i IFS i stvari 650 00:38:24,830 --> 00:38:26,980 kao što je to. 651 00:38:26,980 --> 00:38:29,420 >> Tako ćemo određivanje brzine. 652 00:38:29,420 --> 00:38:31,020 Postavili smo brzinu na 0. 653 00:38:31,020 --> 00:38:33,910 Onda, ako se pritisne a ne prema dolje, onda smo 654 00:38:33,910 --> 00:38:37,450 postavite y brzine do negativnog brzine. 655 00:38:37,450 --> 00:38:42,930 Zapamtite negativna, jer je negativna y smjer gore. 656 00:38:42,930 --> 00:38:45,540 I pozitivni y smjer prema dolje. 657 00:38:45,540 --> 00:38:47,510 Ako je pritisnut i ne, onda smo 658 00:38:47,510 --> 00:38:53,860 će ga postaviti na pozitivne brzinu, što znači da ide dolje na zaslonu. 659 00:38:53,860 --> 00:38:55,460 Ista stvar s lijeve i desne strane. 660 00:38:55,460 --> 00:38:58,200 >> A onda ćemo ažurirati pozicije baš kao i prije. 661 00:38:58,200 --> 00:39:00,740 Idemo napraviti sudar detekcija s granice, 662 00:39:00,740 --> 00:39:04,290 ali nećemo se resetirao brzina, jer brzina je samo 663 00:39:04,290 --> 00:39:06,780 kontrolira tipkovnici. 664 00:39:06,780 --> 00:39:11,230 Ali ćemo resetirao Položaji ga zadržati u prozoru. 665 00:39:11,230 --> 00:39:14,400 I mi ćemo postaviti pozicije u STRUCT 666 00:39:14,400 --> 00:39:17,400 a zatim učinite sve čineći stvari od prije. 667 00:39:17,400 --> 00:39:20,750 Tako ćemo vidjeti što to radi. 668 00:39:20,750 --> 00:39:25,460 Tako bi SRCS-- ćemo vidjeti, ovo je hello6_keyboard.c. 669 00:39:25,460 --> 00:39:38,140 670 00:39:38,140 --> 00:39:38,820 >> O ne. 671 00:39:38,820 --> 00:39:40,150 Tako smo dobili neke upozorenja ovdje. 672 00:39:40,150 --> 00:39:43,840 I to je jednostavno govoreći nismo provjeriti svaku moguću vrstu 673 00:39:43,840 --> 00:39:45,610 događaja. 674 00:39:45,610 --> 00:39:49,470 To je u redu, jer je postoji 236 njih ili tako. 675 00:39:49,470 --> 00:39:51,760 Tako ću ignorirati one upozorenja. 676 00:39:51,760 --> 00:39:53,530 To je još uvijek sastavlja u redu. 677 00:39:53,530 --> 00:39:56,100 Tako ću igrati. 678 00:39:56,100 --> 00:39:57,590 Nije se kreće. 679 00:39:57,590 --> 00:40:04,150 Ali sada, kada sam kaša na moj tipkovnica, Ja mogu napraviti neki WASD kretanje ovdje 680 00:40:04,150 --> 00:40:06,870 Koristim moje tipke sa strelicama kao dobro. 681 00:40:06,870 --> 00:40:10,070 I primijetiti, iako sam Pritiskom pravu upravo sada, 682 00:40:10,070 --> 00:40:13,804 to ne ide kroz prozor, jer sam ga resetirati na svakom kadru. 683 00:40:13,804 --> 00:40:14,720 Dakle, to je prilično uredan. 684 00:40:14,720 --> 00:40:19,420 Možete zamisliti kretanje Mario s neke tipke sa strelicama ili nešto slično. 685 00:40:19,420 --> 00:40:22,880 I da, X radi. 686 00:40:22,880 --> 00:40:26,900 >> Dakle, konačna datoteka ćemo pogledati, hellow7_mouse. 687 00:40:26,900 --> 00:40:29,600 To je o dobivanju miša ulaz. 688 00:40:29,600 --> 00:40:34,790 Dakle, u ovoj smo uvoz matematike zaglavlje, 689 00:40:34,790 --> 00:40:38,100 jer ćemo imati malo matematike ovdje. 690 00:40:38,100 --> 00:40:45,260 Isti stari, isti stari stvar, odredište, isti stari, vidio da je i prije. 691 00:40:45,260 --> 00:40:46,910 Pa, ovo je zanimljivo. 692 00:40:46,910 --> 00:40:51,730 Dakle, vraćamo se samo provjeru za SDL prestati događaj. 693 00:40:51,730 --> 00:40:52,460 Zašto je to? 694 00:40:52,460 --> 00:40:55,110 Na taj način možete dobiti miša ulaz s događajima. 695 00:40:55,110 --> 00:40:57,670 Kao kada je miš premjestiti, dobivate događaj za to. 696 00:40:57,670 --> 00:41:00,520 Kad pritisnete tipku miša, možete dobiti događaj za to. 697 00:41:00,520 --> 00:41:05,760 >> Ali postoji još jedan, malo jednostavnije možda, API za dobivanje miša ulaz. 698 00:41:05,760 --> 00:41:09,500 I to je jednostavno SDL get miša stanje. 699 00:41:09,500 --> 00:41:14,370 Dakle, imam int za X i y za poziciju kursora. 700 00:41:14,370 --> 00:41:18,910 Ja ga proslijediti SDL_GetMouseState, koji postavlja ovo. 701 00:41:18,910 --> 00:41:22,200 A to je pozicija u koordinatni sustav prozora. 702 00:41:22,200 --> 00:41:25,520 Dakle, ako je masa u gornjem lijevom prozor, da bi 0, 0. 703 00:41:25,520 --> 00:41:28,040 704 00:41:28,040 --> 00:41:33,380 >> Sada, ono što ću učiniti je da ću učiniti malo vektora matematike. 705 00:41:33,380 --> 00:41:36,910 Kladim ste mislili da ne bi vidjeti da je u CS50, ali ovdje je. 706 00:41:36,910 --> 00:41:40,720 Idem napraviti neki vektor matematike dobiti vektor 707 00:41:40,720 --> 00:41:43,840 iz slike pokazivača. 708 00:41:43,840 --> 00:41:53,280 I tako zašto moram ovo oduzimanje ovdje? 709 00:41:53,280 --> 00:42:01,350 Pa, ako sam samo koristi Odr .-- tako Trebam prevesti miša x 710 00:42:01,350 --> 00:42:05,166 i y od pola širine i visina slike, 711 00:42:05,166 --> 00:42:08,040 jer želim središtu Slika se ide prema miš, 712 00:42:08,040 --> 00:42:10,160 Ne podrijetlo slike. 713 00:42:10,160 --> 00:42:15,650 >> Dakle, to je samo da bi bili sigurni Govorim o središtu slike ovdje. 714 00:42:15,650 --> 00:42:19,510 Onda smo dobili delta X i Y, koji je razlika od cilja 715 00:42:19,510 --> 00:42:23,430 na stvarni položaj slike. 716 00:42:23,430 --> 00:42:25,690 I onda možemo dobiti udaljenost ovdje, što 717 00:42:25,690 --> 00:42:29,140 će biti Pitagorin teorem, korijen od x 718 00:42:29,140 --> 00:42:32,720 puta x plus y y puta. 719 00:42:32,720 --> 00:42:38,400 >> Sada bi se spriječilo podrhtavanje, a ja mogu pokazati vi što to radi, ako ne to učiniti, 720 00:42:38,400 --> 00:42:45,830 ako udaljenost između pokazivača i slika Centar manji od pet, 721 00:42:45,830 --> 00:42:48,730 Ja jednostavno ne idući u premjestiti sliku. 722 00:42:48,730 --> 00:42:52,900 Inače, postavili smo brzinu. 723 00:42:52,900 --> 00:42:55,960 I mi ga postaviti tako da brzina će uvijek biti konstantan. 724 00:42:55,960 --> 00:42:58,770 I neto rezultat svega ova matematika je da slike 725 00:42:58,770 --> 00:43:01,660 će se kretati prema pokazivača. 726 00:43:01,660 --> 00:43:08,470 >> Sada ispada da SDL_GetMouseState, 727 00:43:08,470 --> 00:43:14,490 uz podešavanje X i Y argumente ovdje, 728 00:43:14,490 --> 00:43:21,340 također vraća int koji odgovara na stanje tipki miša. 729 00:43:21,340 --> 00:43:24,600 Dakle, ne možemo pročitati da izravno, ali možemo 730 00:43:24,600 --> 00:43:29,090 koristiti ove makronaredbe, jedan bitovni operator, a ne da zastrašujuće, 731 00:43:29,090 --> 00:43:30,650 samo bitovima i. 732 00:43:30,650 --> 00:43:38,320 Tako bismo mogli reći gumbiće, što je rezultat naše SDL_GetMouseState, ako je to 733 00:43:38,320 --> 00:43:43,990 i bitovima i to makro Ovdje, SDL_BUTTON_LEFT. 734 00:43:43,990 --> 00:43:47,680 >> Dakle, to će se jednostavno riješiti u bitmap koji odgovara 735 00:43:47,680 --> 00:43:51,090 na lijevu tipku miša se pritisne. 736 00:43:51,090 --> 00:43:55,470 I tako, ako bitovni i događa se i to 737 00:43:55,470 --> 00:43:59,340 nule, što znači lijevu tipku pritisnut, 738 00:43:59,340 --> 00:44:04,320 onda mi zapravo ide negirati i x i y brzine, 739 00:44:04,320 --> 00:44:06,700 što će tek napraviti sliku odbjegla. 740 00:44:06,700 --> 00:44:07,980 Ažuriranje pozicije. 741 00:44:07,980 --> 00:44:10,920 Sudari detekcija, vidi ga sve prije donošenja, u redu. 742 00:44:10,920 --> 00:44:11,510 Idemo to napraviti. 743 00:44:11,510 --> 00:44:14,200 744 00:44:14,200 --> 00:44:16,050 Tako da je dobio bi SRCS = hello7_mouse.c. 745 00:44:16,050 --> 00:44:21,720 746 00:44:21,720 --> 00:44:22,220 Veliki. 747 00:44:22,220 --> 00:44:23,490 Nema pogreške. 748 00:44:23,490 --> 00:44:24,900 A igra. 749 00:44:24,900 --> 00:44:26,440 >> Dakle, ovdje imam miš. 750 00:44:26,440 --> 00:44:29,000 A slika je doista jurnjava moj miš. 751 00:44:29,000 --> 00:44:33,140 Sada, u igri što bi, možda ovo je kao neprijateljske jurnjava 752 00:44:33,140 --> 00:44:35,240 tvoj mali znak ili što god. 753 00:44:35,240 --> 00:44:37,440 Ali ovdje imamo Slika jurnjava miša. 754 00:44:37,440 --> 00:44:41,000 A kad kliknem, miš počinje jurnjava sliku 755 00:44:41,000 --> 00:44:42,860 a slika je bježi od miša. 756 00:44:42,860 --> 00:44:43,810 Dakle, to je prilično cool. 757 00:44:43,810 --> 00:44:47,770 I obavijest opet, tu je dalje sudara otkrivanje ovdje. 758 00:44:47,770 --> 00:44:53,930 >> Tako da je konačna malo Demo sam postavio ovdje. 759 00:44:53,930 --> 00:44:58,870 I neka je pogledati još jedna stvar. 760 00:44:58,870 --> 00:45:02,970 Dakle ovamo, spomenuo sam to podrhtavanje. 761 00:45:02,970 --> 00:45:05,000 U redu. 762 00:45:05,000 --> 00:45:12,890 Dakle, ako je udaljenost manja od pet piksela, Bio sam postavljanje X i Y brzine na nulu. 763 00:45:12,890 --> 00:45:15,960 Što se događa ako smo riješiti to? 764 00:45:15,960 --> 00:45:19,070 Zato ću samo to učiniti. 765 00:45:19,070 --> 00:45:23,820 766 00:45:23,820 --> 00:45:30,150 Molimo izgovor ovaj grozan stil, ali smo komentirali kako točan broj. 767 00:45:30,150 --> 00:45:38,080 Tako ću spasiti i učiniti Ista naredba od prije to napraviti. 768 00:45:38,080 --> 00:45:38,785 >> U redu. 769 00:45:38,785 --> 00:45:39,660 A sada što se događa? 770 00:45:39,660 --> 00:45:43,260 771 00:45:43,260 --> 00:45:43,760 Dobro. 772 00:45:43,760 --> 00:45:45,801 Još uvijek slijedeći miš baš kao i prije, 773 00:45:45,801 --> 00:45:49,310 ali kad smo dobili na mišu, imamo ovu bruto podrhtavanje. 774 00:45:49,310 --> 00:45:50,320 Što se događa tamo? 775 00:45:50,320 --> 00:45:52,600 Pa, u našem vektor matematike, sjetite se da smo 776 00:45:52,600 --> 00:45:57,540 da je udaljenost između kursora i središte slike? 777 00:45:57,540 --> 00:46:00,710 Pa, kao da pristupi 0, što počnete dobivanje 778 00:46:00,710 --> 00:46:06,280 ovako vrstom ludog ponašanja gdje je slika vrsta 779 00:46:06,280 --> 00:46:08,910 kao oscilirajući oko kursora. 780 00:46:08,910 --> 00:46:12,000 A to je stvaranje ovog podrhtavanje. 781 00:46:12,000 --> 00:46:13,020 I to je stvarno ružno. 782 00:46:13,020 --> 00:46:15,103 I vjerojatno ne Želite vaše igre da radi, 783 00:46:15,103 --> 00:46:17,350 osim ako je neka vrsta posebnog učinka. 784 00:46:17,350 --> 00:46:21,960 >> Dakle, to je razlog zašto smo upravo to proizvoljna 785 00:46:21,960 --> 00:46:27,150 odsječeni od pet piksela, gdje kažemo ako je u roku od pet piksela, mi smo dobri. 786 00:46:27,150 --> 00:46:29,560 Ne trebamo premjestiti sliku više. 787 00:46:29,560 --> 00:46:32,260 Dakle, to je ono što se događa tamo. 788 00:46:32,260 --> 00:46:37,390 789 00:46:37,390 --> 00:46:40,870 >> Dakle, to je uglavnom to. 790 00:46:40,870 --> 00:46:44,390 Sada znate kako stvoriti prozor, učitavanje slike, 791 00:46:44,390 --> 00:46:49,330 nacrtati sliku na prozoru, dobiti ulaz tipkovnica, miš dobili ulaz, 792 00:46:49,330 --> 00:46:52,190 postoji hrpa drugih ulaz da ne bi 793 00:46:52,190 --> 00:46:56,070 znate kako doći ako se samo provesti Nekoliko minuta gleda na dokumentaciji. 794 00:46:56,070 --> 00:46:59,670 Tako da zapravo imaju prilično nekoliko alata na raspolaganju sada 795 00:46:59,670 --> 00:47:01,650 napisati punopravni igru. 796 00:47:01,650 --> 00:47:05,030 >> Sada, svaka igra treba neki zvuk, ali audio dokumentacija 797 00:47:05,030 --> 00:47:06,460 Također je prilično dobro. 798 00:47:06,460 --> 00:47:09,200 I ja sam spreman kladiti da ako da razumijete sve stvari 799 00:47:09,200 --> 00:47:14,560 smo razgovarali o danas s slike i površine, 800 00:47:14,560 --> 00:47:18,370 prozori i sve, onda figuring out audio API nije 801 00:47:18,370 --> 00:47:21,170 će biti tako loše. 802 00:47:21,170 --> 00:47:27,420 Tako sam gledati prema naprijed da vidim što ste stvorili sa SDL. 803 00:47:27,420 --> 00:47:31,595