THOMAS Lively: U redu.
Pozdrav svima.
Ja sam Thomas Lively.
Ovaj seminar će biti pisanje 2D igre u C pomoću SDL.
Dakle, znam da si sve traži, da, ja stvarno
žele igrati igre i učiniti igre, ali što je to SDL posao?
Dakle SDL je C knjižnica.
To stoji za Jednostavan DirectMedia sloj.
I to je križ platforma, Razvoj knjižnica igre.
Ona radi na Windows, Mac, Linux, čak i iOS i Android.
Ona obrađuje stvari kao što su pristup audio sustava
za računala, tipkovnica, i miš, joystick, ako oni vezani.
Na mobitelu, čak i ona može učiniti touch input i sve to.
I naravno, obrađuje grafike, crtanje stvari na zaslonu.
>> Dakle, to je vrlo široko koristi, iako možda niste čuli za njega prije.
Ona je građena u, primjerice, Valve je izvor motora,
koja pokreće igre kao što su Portal i Team Fortress 2.
Također je u vrlo velikom broju od indie igara koje izlaze,
pa sam uzbuđen vidjeti što Sve će biti stvaranje s njim.
>> Ciljevi seminara su ti krenuo da se razvija s SDL.
Idemo naučiti kako stvoriti prozor igra.
Idemo napraviti duhovi, koje su slike u igri
koji može kretati.
Idemo naučiti kako da i animirati Duhovi,
pa ih kretati, provjerite ih mijenjati tijekom vremena.
A mi ćemo naučiti kako uhvatiti tipkovnicu i miša
ulaz s računala.
Ono što mi se ne govori o danas je 3D grafiku,
jer to je vrlo komplicirano predmet koji nemamo vremena za.
Nećemo naučiti kako igrati zvuk na našim igrama.
I nećemo se gradi za ništa, ali Linux.
>> Sada upozorenja postoje da, nadamo se, do kraja seminara
vi ćete biti zadovoljni SDL dokumentacije,
tako da ćete biti u mogućnosti otići shvatiti kako igrati zvuk za sebe.
Također gradi za Mac ili PC bi trebao raditi točno isto kao zgrada za Linux,
ali postava će biti malo drugačija.
Tako da bi trebao biti u mogućnosti to odgonetati kako to učiniti te stvari
do kraja današnjeg seminara.
>> Tako za postavljanje, idemo koristiti virtualni stroj.
Mi bi koristiti CS50 IDE, jer samo ćemo se pisanje u C.
No, budući da je IDE nije preglednika smo Ne mogu stvoriti nove prozore ili zaslon
Grafika u njemu.
Dakle, trebamo virtualni stroj.
Dakle, možete slijediti upute ovdje na manual.CS50.net/appliance/15~~pobj
instalirati službenu CS50 aparat, što je samo Linux virtualni
stroj.
>> I onda kada imate da su sve postavili up-- njega
može potrajati neko vrijeme, jer je vrlo velika download-- idete
izvoditi u VM sudo apt-get update.
I to se doista događa ažurirati sav softver
paket na vašem virtualnom stroju.
>> Nakon toga, ti si idući u trčanje sudo apt-get install, libsdl2-2.0-0,
libsdl2-DBG, libsdl2-dev, i dodatno libsdl2 slika-2,0-0,
libsdl2-image-DBG, i libsdl2-slika-dev.
Dakle, što to učiniti?
To jednostavno instalira debug Informacije, dokumentacija, zaglavlja,
i binarne datoteke za dvije knjižnice.
Redovita stara, SDL 2,0, i još jedna knjižnica
zove SDL slike, koje ćemo se pomoću
učitavanje slikovne datoteke u našoj igri.
>> Dakle, nakon što su to i da, baš kad je pita,
vi samo upišite da, pritisnite Enter instalirati te pakete,
i onda bi trebao biti dobar to ići.
Dakle, da biste dobili distribucije koda, can-- o draga, to nije ažuriran.
Osim ako imate GitHub account-- ako imate GitHub račun,
možete učiniti Git klon naredbu repo
i da će preuzeti Git repo sa svim koda u njemu,
tako da ćete imati kod.
>> Ako nemate GitHub račun, ono što trebate učiniti je upisati
wgithttps: //github.com/tlively/sdl seminar-- i ovdje je different--
/archive/master.zip.
Pa opet, to je isti URL, osim što će biti
tlively / SDL_seminar / master.zip i koju koristite wgit preuzeti to.
I onda možete jednostavno raspakirajte arhivu da
i onda ćete imati sve izvorni kod.
Tako mi je zbog toga.
A onda kod će biti domaćin na u CS50 Seminar web stranica u par
dana.
>> U redu.
Pa kako ćemo početi pisanje svoju igru?
Pa, prva stvar ćemo želite učiniti
je pogledajte SDL dokumentaciju.
Dakle ovdje je VM.
I ovdje je web stranica.
Ja sam upravljao živjeti libsdl.org.
Što ću učiniti ovdje je ići preko na sidebar, pod dokumentacije,
i kliknite na wikiju.
To će me dovesti na wikiju da ima većinu dokumentacije za SDL.
Više o sidebar ovdje smo ide kliknuti API po kategorijama,
jer će dati nas lijepo kategoričan pogled
cjelokupnog API za SDL.
>> Tako, na primjer, imamo osnovni inicijalizacije
a isključite, sve vrsta upravna stvar za korištenje SDL,
a onda imamo odjeljak za prikazujući stvari na zaslonu.
To je videozapis.
Ulazni događaji, to je sve unos s tipkovnice,
dobivanje ulaz iz miša, i joystick, ako ga još ima.
Postoji sila povratne informacije za stvari kao igra kontrolora, koji
nećemo govoriti o tome.
I ovdje je zvuk.
A tu je i hrpa drugih stvari koje SDL mogu učiniti za vas.
>> No, danas ćemo se usredotočiti na inicijalizacije ovdje
prikaz slike u videu poglavlje i rukovanje ulaznih događaja.
Dakle, to su glavni dijelovi dokumentacije
koji bi trebali biti brige o.
Samo za zabavu, ako ćemo ići preko ovdje i kliknite na API po imenu,
možemo vidjeti popis svih jedna stvar na SDL knjižnica.
Dakle, sve te funkcije, enumerations, strukture, luda količina stvari,
abecedni red.
I jasno, dok se znate što radite,
to ne će biti previše pomoći, što je razlog zašto mi API po kategoriji.
>> Tako ćemo početi.
Nadam se da ste već preuzeli distribucije koda.
I tako ono što možete učiniti je, zar ne Ovdje u CS50 aparata,
Jednostavno otvorite terminal.
Idemo.
Tako sam već preuzeli Raspodjela broj pomoću .zip
Postupak.
I ja sam ga raspakirali.
Dakle, ovdje je u SDL seminara majstora.
Tako ću ići u tom direktoriju.
I ono što vidimo ovdje da imamo sedam C datoteke.
A to se događa šifru ćemo se gleda na danas.
Imamo Makefile.
I imamo resursa katalog, koji jednostavno ima fotografiju
da ćete se gledajući uskoro.
>> Tako ćemo otvoriti te datoteke pomoću G-Edit urednik.
Dakle, želim otvoriti sve datoteke koje početak Pozdrav i završiti .c.
Idemo.
Tako da je maleni prozor, tako da smo će pokušati napraviti da veći.
Ne, on je otišao dalje.
>> U redu.
Dakle ovdje je prvi Datoteka ćemo pogledati.
To se zove hello1_sdl.c.
I sve to čini se inicijalizacija SDL knjižnice, tako da možemo početi koristiti.
Kako bi ste znali doći s ovim kodom sami?
Pa, ako ćemo gledati preko na dokumentaciju
i idemo u inicijalizacije a isključite dio,
to će nas sve reći o tome kako inicijalizirati SDL.
Dakle, svakako pročitajte ovaj neki drugi put.
To će vam reći sve o tome što se ovdje događa.
No, glavna poanta je u tome da moramo nazvati tu funkciju SDL u njoj
i to prođe što vrste stvari želimo knjižnica inicijalizirati.
Dakle, u našem slučaju, mi samo idete inicijalizirati video za sada,
tako da možemo početi prikazivati ​​slike.
>> Više ovdje, možete li mi kliknite na SDL u njemu, mi
mogu dobiti još više informacija, uključujući povratnu vrijednost.
Dakle, vidimo da se ovdje to returnes nula na uspjeh.
Dakle, u našem kodu, idemo vidjeti ako to ne vraća na nulu,
a ako se ne vrati nula, tako da nije bio uspješan,
onda ćemo jednostavno ispisati pogreška koristite ovu drugu funkciju,
SDL GET pogreška, koja vraća string opisuje pogrešku koja se dogodila.
Idemo ispis koji pogreškama i onda smo jednostavno
će izaći iz programa sa šifrom pogreške.
>> Zatim još jedna stvar koja nam je potrebna učiniti je, prije programa izlazima,
ako smo uspješno inicijalizira SDL, samo mi treba da ga SDL prestati zvati.
A što će nositi čišćenje sve SDL unutarnjih resursa za nas.
Tako je dokumentacija opet there--, Ovdje smo u inicijalizacije
a isključite odjeljak dokumentacije.
Možete samo kliknuti na Funkcija ovdje, SDL prestati,
a možete pročitati sve o tome kako je dobro.
I puno tih funkcija Dokumentacija stranice
imate primjer koda, tako da to vrlo dobar izvor.
Definitivno provesti neko vrijeme čitajući dijelove ovog wikija
ako idete raditi to za projekt.
>> U redu.
Tako da je naš cijeli program.
Što možemo učiniti sada is-- sam će otvoriti Makefile ovdje
pa ću uzeti pogledajte kako se to radi.
I to je vrlo jednostavan makefile, slično onome što ste vidjeli prije.
Jedna od glavnih razlika je da se ovdje, ovaj
će umetnuti rezultat trčanja ova naredba, koji ste već
instalirani ako ste instalirali SDL.
I ovo je zapovijed koja će generirati
neki dodatni zastave za kompilator.
>> Osim toga, mi smo ga daje sve uobičajene naredbe, kao
ove dvije naredbe.
Tako su -lsdl2-image ručke povezivanje u SDL slike knjižnica.
A -lm zapravo obrađuje povezivanje u standardnom C matematike knjižnica.
Dakle, mi se ne događa da je potrebno oni za sve naše C datoteka,
ali mi ih samo staviti u tako da možemo koriste istu Makefile za sve
bez izmjena.
>> Ovamo u izvorima, ovo je mjesto gdje ćete bih
staviti datoteke koje su išli sastaviti za svoj projekt.
No, budući da svaki od mojih C datoteka ovdje ima glavnu ulogu,
to će se zbuniti ako smo ih sve staviti u.
Zato ću samo reći, za sada, hello1_sdl.c,
što je jedan smo upravo pogledao.
Dakle, ako sam se vratiti preko ovdje, ja mogu ne čine.
I ono što je učinio je to samo sastavio tu prvu datoteku.
A onda možemo upisati ./game, jer to je izvršna je proizvedena.
I sve što je učinio bilo ispis inicijalizacija uspješna.
Tako smo učinili nešto dobro.
Ali to je vrsta dosadno, jer nismo vidjeli prozor,
ništa se kreće oko.
>> Pa super, dobili smo SDL inicijalizacije.
Sada, krenimo na nešto malo više zanimljiv.
Dakle, ovdje imamo hello2_window.c i ovo će biti nešto više
Kompleks C program koji inicijalizira SDL baš kao i prije,
osim sada smo također ćemo inicijalizirati SDL vremena.
A to će nas pustiti pristupiti interne timer
i koriste funkcije koje se odnose na vrijeme.
>> A onda pogledajmo ovdje.
Ono što radimo je da se ovaj pokazivač na SDL prozora STRUCT, koji
će biti izrađen od strane ovog poziva u funkciji, SDL stvoriti prozor.
Sada, to traje puno argumenata, pa idemo pogledajte dokumentaciju.
Pa opet, idem API po kategoriji, ja sam
ide dolje na video ovdje, a prvi poglavlje, prikazujući prozor za upravljanje.
Dakle, ovo poglavlje ima tona stvari u njemu,
ali ako pogledamo kroz ove funkcije, vi ćete
vidjeti da je vjerojatno jedan mi Želite se zove SDL izradu prozora,
što se događa da se na samom vrhu.
>> I tako je to Dokumentacija za tu funkciju.
Prozor će imati naslov, X i Y položaj na zaslonu,
to će imati širinu, visinu, a onda će se poduzeti neke zastave.
Sada, mi zapravo ne stalo bilo koji od ovih zastava upravo sada,
ali ako ste htjeli nešto učiniti kao što napraviti puni zaslon prozor,
možete pogledati na to.
Za sada, samo ćemo koristiti ove posebne vrijednosti,
SDL prozor plus usmjeren za x i y u cilju
samo stvoriti prozor u središtu našeg ekrana.
>> Dakle, to je ono što se radi.
A ako se dogodi da se prozor NULL, što znači da je došlo do pogreške,
opet mi samo ide na ispis pogreške pomoću SDL get pogrešku.
A onda, jer mi inicijalizacije SDL, sada ga morati zatvoriti.
Tako mi zovemo SDL prestati prije povratak jedan za glavno.
>> Dakle, imamo ovaj prozor otvoriti nadamo.
A što ćemo učiniti je da ćemo
pozvati SDL za 5000 milisekundi, koji je isti kao i pet sekundi.
A kad završimo s tim, to će uništiti prozor,
počistiti SDL knjižnica, i napustite program.
Tako ćemo ići naprijed i dati da je pucao.
>> Tako sada umjesto mijenjanja makefile svaki put,
Ja jednostavno ne čine i zatim na naredbenog retka,
kažu izvori jednaka, a zatim file smo sastavljanju.
Tako da je hello2_window.c.
Fantastičan.
Nema erros.
Sada, ako ćemo pokrenuti našu izvršnu, vidimo ovaj prozor.
Sada postoji nekoliko problemi s prozora.
Možemo ga kretati, ali ima Ova pozadina junk unutar nje.
Pa nismo izvučeni ništa, i tako to
Samo puna smeća, što je ljepušan velik dio onoga što smo očekivali.
>> Nadalje, ne možemo zatvoriti prozor.
Ja pritiskom ovaj X u kutak i ništa ne događa.
Tako ćemo vidjeti kako popraviti da u malo.
Tako ćemo riješiti dio gdje Prozor je pun smeća prvi.
Dakle, ako ćemo ići preko hello3_image.c, što Vidimo se da smo dodali malo
više stvari ovdje.
Dodali smo ovaj novi zaglavlje podnijeti da se funkcija timera.
Mislim da je to učinio u posljednje jedan, previše, i nisam ga spomenuo.
Ali sada, jer smo rad sa slikama,
moramo uključiti SDL Slika zaglavlje datoteke kao dobro.
Dakle, to je ista stvar kao prije inicijalizacije SDL ovdje
Isto se bave stvaranjem prozore.
Vidjeli smo da je do sada.
>> Sada moramo stvoriti nešto što se zove renderer koji nekako ide uz
s prozora.
Ali, to je neka vrsta sažetak objekt koji je
zadužen radiš sve to crtanje operacija na prozor.
I to je zapravo odgovara za program učitava
u grafičkom hardveru u vašem računalo ili telefon ili bilo što drugo.
Tako su zastave želimo it-- proći i možete pogledajte dokumentaciju
dobiti više detalja here-- se događa treba SDL žbuka ubrzan, što
znači da će biti pomoću grafičkog hardvera
i to ne samo emulirati u softver.
>> A mi ćemo koristiti SDL renderer PRESENTVSYNC.
VSync je stvar koja se jednostavno čini Vaši grafike izgledaju bolje i sprječava
ova stvar zove zaslon užas, gdje je polovica
jednog okvira i polovici sljedeće Okvir uvući istovremeno
i to izgleda strašno.
Ali opet, možete ići čitati O tome na svoju vlastitu.
>> Dakle, imamo neke zastave ovdje.
I tako smo samo ćemo nazvati ova funkcija SDL stvoriti renderer.
Mi ćemo dati prozor povezati s tom renderer.
Negativan znači da nije briga što Grafika Vozač ćemo koristiti.
Tako da bi trebao prilično mnogo uvijek biti negativan,
ako ne znate o grafičkim vozača.
I onda mi samo idete da to prođe naše zastave.
Dakle, ako se to vraća null, onda smo će ispisati grešku kao i obično,
ali onda smo i idemo uništiti prozor
očistiti te resurse prije zove SDL otkaz i povratka.
>> Sada, zanimljiv dio ovdje je gdje ćemo učitavanje naše slike
Ova funkcija IMG_load.
To je jedina funkcija ćemo koristiti s SDL slike knjižnica.
To je samo jedna trebamo.
To je funkcija koja uzima string da je put bilo slike resursa.
I to može biti .png, GIF, bitmap, bilo koju od tih stvari.
I to je razlog zašto ova funkcija je tako lijepo.
To se može nositi prilično mnogo bilo kojem obliku.
Opterećenja u memoriju i pohranjuje ga kao što se zove SDL površinu.
>> Sada SDL površina je samo struct koji predstavlja slikovnih podataka u memoriji.
Dakle, možete pročitati više o da je u dokumentaciji dva.
A ako je to pogrešaka, onda smo učiniti cijelu stvar gdje
možemo ispisati grešku, zatvoriti resursa, a zatim zatvorite program.
Sada Zanimljivo je, prije možemo izvući ovu sliku na prozoru,
moramo zapravo čine ga teksture.
Sada tekstura odgovara slikovnih podataka učitava
u grafičkom hardveru memoriju.
>> Dakle, površina je glavna memorije, redovito memorije
koje smo koristili cijeli semestar, a tekstura je u tom zasebnom VRAM
memorije da kontrole grafička kartica.
Tako zovemo ovu funkciju SDL_CreateTextureFromSurface.
Mi dati mu naše renderer i naš površine.
I onda smo zapravo učinjeno s površinom,
tako da smo samo će ga osloboditi.
Mi ne treba više.
A onda pa ako taj poziv errored i vratio null,
onda ćemo napraviti cjelinu opet izvješćivanje stvar pogreške.
>> U redu.
Ovdje smo dobili u neki Stvarni renderiranje funkcije.
Dakle, nazivajući SDL_RenderClear i to prolazi
prikazivačem povezane s naših prozora jednostavno čini prozor ići crno.
Tako da uklanja to smeće koje smo vidjeli u naš prozor prije i čini crno.
A onda ćemo nazvati SDL_RenderCopy,
Daju našu renderer, naš teksturu.
A mi ćemo govoriti o tome što Ta polja su malo.
Ali to će uzeti podatke teksture
i kopirajte ga na našem prozor za crtanje slika.
Dakle, nakon što smo učinili ovu kopiju podatke na našem prozoru,
moramo napraviti taj dodatni funkciju zove SDL_RenderPresent.
>> I ovo je interesantno jer je to dobiva
u temi pod nazivom dvostruko razdvajanje.
Dakle, dvostruko razdvajanje je tehnika koja čini svoje grafike izgledaju puno bolje.
Opet, ona sprečava da se zaslon kidanje Ja sam govorio o ranije, gdje je
imate dva odbojnika.
Postoji natrag tampon u memorije i prednji tampon.
Prednji tampon doslovno što je na zaslonu u ovom trenutku.
Dakle, radimo sve to izvući varijacije, kao SDL donijeti kopiju ili SDL_RenderClear
na stražnjoj pufera.
Tako su mijenjati stvari u leđa tampon.
Ovdje bismo mogli biti crtež ovo zeleni kvadrat na stražnji tampon.
>> Pa onda kad završimo radili naši uzvratiti operacija, koje
može potrajati jako dugo Vrijeme, što ćemo učiniti
je prebaciti odbojnika.
Dakle, to je doslovno samo uzima Prednji tampon i natrag tampon
i prebacuje ih, pa to, trenutno,
u jednoj operaciji, umjesto možda stotine ili tisuće,
sve naše novo donio objekti na zaslonu.
I to sprečava stvari poput zaslona okrepljujući
kad smo samo sam izvučeni na pola naših objekata za okvir.
Dakle, to je razlog zašto moramo zvati SDL_RenderPresent, kao
kao SDL_RenderCopy.
>> Opet, mi samo idete čekati pet sekundi.
Onda ćemo očistiti naše resurse.
Imamo dosta više ovaj put.
I onda mi samo idete za izlaz iz programa.
Tako ćemo učiniti.
Idem upisati napraviti, a onda izvora jednako hello-- ovo je sada 3image.c.
U redu, to sastaviti bez greške.
A možete vidjeti ovdje imam sada izvučen moju sliku, Pozdrav, CS50!
našem prozoru, koji nestaje nakon pet sekundi.
>> Sada, to još uvijek ima problema, zar ne?
To nije dobra aplikacija, jer kad sam pokušati zatvoriti prozor,
ništa se ne događa.
To je x uvijek ne reagira.
Tako ćemo uzeti pogledajte Sljedeći datoteke, hello4animation.
Dakle, ovo je varalica da će uvesti
kreće i pokret za svoju sliku.
Tako ćemo učiniti Ista stvar kao i prije,
pokrenuti SDL, stvoriti prozor, stvoriti renderer,
učitati sliku u memorije, stvarati teksture.
Vidjeli smo sve to prije.
Sada, ovo je novo.
Idemo se struktura naziva SDL pravokutnika, što je samo pravokutnik.
Ako idemo ovamo, možemo napraviti pretragu za SDL RECT,
i možete vidjeti da je to vrlo jednostavna struktura.
Ima x, y za položaj, a to
ima širinu i visinu za veličina pravokutnika.
>> Pa što ćemo učiniti je da smo će definirati ovu SDL Prav Odr,
za odredište.
I ovo je mjesto na ekranu gdje
ćemo biti crtež naša slika, zar ne Pa
ako ćemo biti kreće sliku okolo,
onda destinacija u kojoj idemo nacrtati sliku
treba kretanje.
Tako ćemo zvati Funkcija SDL_QueryTexture.
I primijetiti sam prolazeći adresu od dest.w, što je širina,
i dest.h, što je visina.
I tako SDL_QueryTexture ide pohraniti u tim područjima širina
a visina našeg teksture.
>> I onda ono što ću učiniti je idem
postaviti dest.x biti prozor Širina minus dest.w, što je
širina sprite, podijeljena 2.
I to će ga postaviti tako da je slika savršeno centriran
u našem prozoru, u redu?
Tako sada imam y položaj.
A to će se biti varijablu koja je
mijenja, zato što ćemo biti pomicanje slike u y smjeru.
I sada imamo nešto zove animacija petlje.
>> Pa kako se animacija raditi?
Pa, ljudsko oko može otkriti 12 različita slika u svakoj sekundi, u redu?
Dakle, ako ste bljesak 12 slika kartice na mene u sekundi, vidio sam svaki od tih slika
kao vlastitu izrazitu pojedinačne slike.
Sada, ako treptati više Slike na mene u drugom,
onda moje oči će početi ih zamagliti zajedno
i ja bi ga doživljavaju kao pokretu, umjesto jedne zasebne slike.
Tako, na primjer, filmova i televizije, oni Flash slike na vas 24 puta
drugi.
Tako da je 24 sličica u sekundi.
Ekrana računala, s druge strane, Često su na 60 sličica u sekundi.
To je njihova brzina osvježavanja.
Tako često osvježavati slika na zaslonu.
Dakle, naš cilj će biti 60 sličica u sekundi za naše igre.
>> Tako ćemo vidjeti da u kodu.
Dakle, za svaki okvir, mi smo prvi će očistiti prozor.
To je opći obrazac.
Ti uvijek jasno svaki okvir prozora, a potom
učiniti sve svoj crtež operacije, a onda na kraju,
ne RenderPresent pokazati sve u okviru.
A onda idete imaju čekati na kraju
čekati do sljedećeg Okvir treba početi.
>> Dakle, ako sam bio događaj puno Kompleks računanje ovdje
da je više od 16 milisekundi, to bi bilo nemoguće za mene
da biste dobili taj frame rate od 60 koji Htio sam, jer je svaki okvir
predugo traje izračunati.
Nadalje, mi stvarno radite vrsta zanemarivom količinom posla
ovdje, jer samo je jedna stvar mi crtež.
Pa sam samo čekati 1/60 jednog Druga, što se duljina
od okvira u između okvira.
Tako sam nekako praveći radi sve moj rad traje nula vremena.
No, u stvarnom igri, ne bi se oduzimati
količina vremena je trebalo učiniti sve to rade iz svog vremena za odmor.
>> Pa ipak, ono što sam ja zapravo radi u ovoj petlji?
I jasno prozor.
Ja postaviti dest.y, što je za int moja stvarna y pozicija baci u int.
Sada, želim plutati razlučivost za moj y položaju u mojoj igri,
ali onda se zapravo privući ga na zaslonu,
treba Ints, jer je u jedinicama piksela, tako da je ono što je za cast.
Idem nacrtati sliku.
Dakle, ovo je izvor pravokutnik.
I ovo je mjesto pravokutnik.
Tako sam prošli null za izvor pravokutnik
reći želim skrenuti moju cijelu teksture.
No, ako ste imali puno teksture u igri
i oni su svi u jedan veliki tekstura karti koji je učitan u SDL kao samo jedan
teksture, što bi koristite izvorni pravokutnik
odabrati jedan od manjih tekstura, jedna od manjih duhovi,
iz tog velikog teksture karte.
>> Pa opet, mi prolazi moj žbuke, moj teksture, a sada odredište.
To će biti gdje u Prozor to će biti izvučeni.
A onda, jer sam animiranje nešto, trebam pokret,
Idem se ažuriranje Sprite položaj na svaki okvir.
Dakle, imam stalnu zove svitak brzina u jedinicama piksela u sekundi.
Sada, svaki put smo napraviti pokret, okvir samo 1/60 sekunde.
Zato ću podijeliti da do 60.
A onda, da vidimo, ja sam oduzimanjem da je od y položaju.
Zašto mi oduzme?
Mi ćemo doći na to u sekundi.
Pa onda sam počistiti svoje resurse a program je završen.
>> Tako ćemo učiniti da.
Dakle, idemo u make SRCS = hello4 animation.c, u redu?
Igra.
Izvoli.
Tako sam ga pomicati gore prozor, što je prilično uredan.
Ali drži se, bio sam oduzimanjem iz y položaj svaki put.
Što se događa tamo?
Pa, ispada da u SDL i Zapravo, u većini računalne grafike,
podrijetlo za koordinatnom sustavu je u gornjem lijevom kutu prozora.
>> Tako je pozitivno x smjer ide preko prozora na desnoj strani.
I pozitivni y smjer zapravo ide dolje.
Pa opet, podrijetlo je u gornjem lijevom kutu prozora,
pozitivni y smjer je prema dolje, i pozitivno x desno.
Dakle, kada sam oduzeti od y pozicija, to je
ide kako bi se ići na negativne y smjeru, što je do prozora.
Dakle, to je ono što se događa tamo.
Cool.
>> Pogledajmo sljedeću datoteku.
Ovdje je dio od pokazati gdje smo napokon
dobiti taj X u kutu prozora koji je trebao zatvoriti prozor
raditi.
I što ima?
Mi inicijalizirati SDL, stvoriti prozor, stvoriti renderer, učitati sliku,
stvaranje teksture kao što smo vidjeli.
Imamo isti odredišni pravokutnik kao i prije, isto poziv na upit teksture.
Ali ovaj put, mi smo onda će podijeliti širinu
a visina naše odredište za 4.
To samo za posljedicu ima skaliranje našu snimku kada
možemo ga prikazati u prozoru s četiri.
Dakle, to je prilično uredan.
Mi samo možemo ljestvici samo tako.
Idemo za početak sprite u sredini zaslona.
I sada imamo X i Y brzinu i Obojica će početi od nule.
>> To je u redu datoteka.
Oprosti.
Tako da je sve istina.
To je sve još u ovoj datoteci.
Imamo podijeliti sa 4 i sve.
Dakle, ovdje imamo X i Y poziciju za sredini prozora.
I da je to početnu brzinu ove stalnom brzinom, što
Vjerujem iznosi 300 piksela po sekundi.
Sada imamo ovaj int mogao jednako dobro biti boolean zove blizu zatražio.
I umjesto da radiš beskonačna petlja na timer ovdje
ćemo biti animiranje kao dok u blizini nije zatražio.
>> Pa kako ćemo obraditi događaje?
Pa, SDL queues do događaja na doslovni red iza kulisa.
I onda svaki okvir, možemo dequeue događaje
iz tog reda pomoću Ovaj poziv SDL_PullEvent.
I opet, definitivno ići čitati o tome u dokumentaciji.
Postoji puno više detalja i puno više funkcija možete koristiti s ovim.
Mi to adresa proći ove stvari, SDL_Event
da imamo ovdje na stog.
>> Sada, što je SDL_event?
Jer SDL, ako gledamo u su documentation-- neka je
vidi, API prema kategoriji, ulaz događanja, događaj rukovanje,
možemo gledati na broj različitih događanja ovdje
i možemo vidjeti da je cijela tona od njih.
Pa što je ovo SDL_Event stvar?
SDL_Event je sindikat.
Wow, što je sindikat?
Vi ste vjerojatno nikada čuo prije.
I to je u redu.
>> Savez je vrsta kao struct, osim STRUCT
ima mjesta za sve njegovi polja i memorije,
dok je sindikat ima samo dovoljno mjesta da stane najveće
jedan od njegovih polja, što znači da može samo jedno od njegovih polja
u vrijeme, koje vrste smisla za događaje, zar ne?
Možemo imati tipkovnicu događaj ili prozor događaja,
ali jedan događaj ne može biti i Tipkovnica događaj i prozor događaja,
pa bi glupo da imaju prostor za kako onih unutar našeg događaja unije.
Dakle, ako ste htjeli napraviti svoj vlastiti sindikat,
izgleda točno isto kao stvaranje struct,
osim što mi koristimo Unije ključnu riječ umjesto struct ključne riječi.
I zapamtite, za sve stvari unutar vašeg sindikata,
stvarna varijabla koja je sindikat može imati samo jednu od tih vrijednosti
tada.
>> Pa kako možemo reći kakav događaj mi samo popped off ovog reda?
Pa, možemo testirati event.type.
A ako je jednaka da SDL_Quit, znamo
to je događaj koji se generira kada smo
pogoditi X u kutu prozora.
I možemo postaviti u blizini zatražio jednak 1.
Ostalo je samo neke animacije da ste vidjeli prije.
Tako ćemo ići naprijed i učiniti to i vidjeti koliko dobro to radi.
Tako ću upisati napraviti i onda SRCS = hello5_events.c.
Idemo tamo.
Igre.
>> Sada, možemo vidjeti da je doista umanjena po četiri.
A sada je odskakanje okolo.
Imam neke detekcija sudara događa sa strane prozora
da možemo pogledati.
A što se događa kad idem da ga zatvoriti?
To zatvara.
Fantastičan.
Dobili smo taj događaj.
I mi ga obrađuju.
>> Tako ćemo se osvrnuti na kodu.
Pa kako sam ga dobiti odskakanje okolo kao da je?
Zapamtite da postavite X i y početku brzinama.
A brzina je pozitivna konstantna, tako da je
će se to počinje ide prema dolje i udesno.
>> Sada, da svaki okvir, uz rukovanje događaji koje bi mogle nastati,
Idem li otkriti moj Sprite pokušava izaći kroz prozor.
Dakle, što možemo učiniti da je samo provjerom x_pos s 0, y_pos 0, a zatim
također x_pos i y_pos s Širina i visina prozora prozor.
Obavijest sam oduzeti širina duh.
A to je zato što ako nisam oduzmite širinu Sprite,
to bi samo provjeriti da podrijetlo Sprite
ne ići van kroz prozor.
Ali mi žele cijelu širina Sprite
uvijek biti unutar prozora i cijela visina sprite
uvijek biti unutar prozora.
Dakle, to je ono što je za oduzimanje.
Puno geometrije ovdje može biti od pomoći da ga izvući
na papiru s koordinatnom Sustav se vidi što se događa.
>> Dakle, ako ja ne sudaraju, samo sam jednostavno resetirati poziciju
tako da se ne ide iz ekrana.
I ja ću, ako se odbija na jednom od bočnih stijenki,
Idem negirati X tako da brzina
počinje odskakanje u drugom smjeru.
A isto tako, ako ga pogodi vrh ili dno,
Idem postaviti y brzinu jednaka negativne y brzine,
tako da će odskočiti natrag.
Dakle, to je samo kako smo ovdje.
>> Te ažuriranje pozicije baš kao što smo vidjeli,
podijeliti po 60, jer smo samo rukovanje 1/60 sekunde.
A onda renderiranje, točno isto kao i prije.
A kako je sve što se događa ove datoteke.
Dakle, to je kako radimo događaja.
Glavna stvar da odnese ovdje ovo SDL_PullEvent funkcija.
I svakako treba pročitati Dokumentacija više o SDL_Event
sindikat, jer je ova vrsta podataka je vrlo, vrlo važno, jer ćemo ga koristiti
za sve vrste događaja.
>> Na primjer, možemo ga koristiti za tipkovnicu događanja, što je ono što je ova datoteka za.
Pa što imamo?
Imamo istu stvar kao i prije, inicijalizirati SDL, stvoriti prozor,
stvoriti renderer, učitati sliku u memoriju, stvoriti tekstura.
Opet, mi ćemo imati ovaj Odred pravokutnik,
idemo na ljestvici sliku po četiri, čine ga malo manji.
Sada ćemo početi Sprite u središtu zaslona.
Ali ovaj put, idemo postaviti početna X i Y brzine na nulu,
jer tipkovnica je će kontrolirati one.
I nadalje, idemo pratiti ovih varijabli
gore, dolje, lijevo i desno.
I to će držati Staza je li imamo
pritisne tipke na tipkovnici da odgovaraju gore, dolje, lijevo,
i pravo.
>> Sada, ovo je vrsta fantazija jer možemo koristiti W, A, S,
D ovdje ili stvarni tipke sa strelicama.
Vidjet ćemo da je u samo sekundi.
Tako ćemo obraditi događaj baš kao i prije.
Mi povucite događaj.
Ali sada ćemo uključite vrstu događaja.
Ako je SDL_Quit, mi smo će postaviti u blizini
zatražio da se jedan, baš kao i prije.
To obrađuje xu kut prozora,
tako da je naš prozor zapravo zatvara.
>> Inače, ako smo dobili SDL tipku prema dolje događaj, što znači da pritisne tipku,
onda ono što ćemo učiniti je da smo će prebaciti na ovu stvar ovdje,
koji means-- tako event.key znači liječiti našu događanja sindikat,
ići i dobiti ključ Struktura događaj u njemu.
Tako ispada da je ovaj Sindikat je ključni struktura događaja.
A onda ići na ključ Struktura događaja njegova polje
zove keysym a zatim scancode.
I opet, svakako pročitati dokumentacija o tome.
Ulazi Riječ vrlo zanimljiv.
Možete dobiti skeniranje kodova ili ključne kodove.
I to je malo suptilna, ali dokumentacija je vrlo dobar.
>> Dakle, ako vidimo kod skeniranja za naš ključni pritisnite W ili biti gore,
ćemo postaviti jednak 1.
A onda smo pobjeći iz tog prekidača.
Ako je A ili ostavi, postavili smo ostavili na 1, i cetera, et cetera, za dolje i desno.
Sada, u ovom vanjskom prekidač, ako vidimo ključ do događaja,
to znači da smo izdali ključ i mi više ne si ga pritiskom.
Zato ću reći do jednak 0, lijeva jednak 0, dolje jednak 0, pravo
jednak 0, i tako dalje.
>> I primijetiti imamo u svakoj od njih dva slučaja stavi pravu jedni pored drugih
bez posebnom šifrom Prvi slučaj, koji
znači da li je je S ili dolje upravo ovdje,
to će izvršiti ovaj kod.
Dakle, to je prilično zgodan.
To sprečava nas da se učini više uvjeti i IFS i stvari
kao što je to.
>> Tako ćemo određivanje brzine.
Postavili smo brzinu na 0.
Onda, ako se pritisne a ne prema dolje, onda smo
postavite y brzine do negativnog brzine.
Zapamtite negativna, jer je negativna y smjer gore.
I pozitivni y smjer prema dolje.
Ako je pritisnut i ne, onda smo
će ga postaviti na pozitivne brzinu, što znači da ide dolje na zaslonu.
Ista stvar s lijeve i desne strane.
>> A onda ćemo ažurirati pozicije baš kao i prije.
Idemo napraviti sudar detekcija s granice,
ali nećemo se resetirao brzina, jer brzina je samo
kontrolira tipkovnici.
Ali ćemo resetirao Položaji ga zadržati u prozoru.
I mi ćemo postaviti pozicije u STRUCT
a zatim učinite sve čineći stvari od prije.
Tako ćemo vidjeti što to radi.
Tako bi SRCS-- ćemo vidjeti, ovo je hello6_keyboard.c.
>> O ne.
Tako smo dobili neke upozorenja ovdje.
I to je jednostavno govoreći nismo provjeriti svaku moguću vrstu
događaja.
To je u redu, jer je postoji 236 njih ili tako.
Tako ću ignorirati one upozorenja.
To je još uvijek sastavlja u redu.
Tako ću igrati.
Nije se kreće.
Ali sada, kada sam kaša na moj tipkovnica, Ja mogu napraviti neki WASD kretanje ovdje
Koristim moje tipke sa strelicama kao dobro.
I primijetiti, iako sam Pritiskom pravu upravo sada,
to ne ide kroz prozor, jer sam ga resetirati na svakom kadru.
Dakle, to je prilično uredan.
Možete zamisliti kretanje Mario s neke tipke sa strelicama ili nešto slično.
I da, X radi.
>> Dakle, konačna datoteka ćemo pogledati, hellow7_mouse.
To je o dobivanju miša ulaz.
Dakle, u ovoj smo uvoz matematike zaglavlje,
jer ćemo imati malo matematike ovdje.
Isti stari, isti stari stvar, odredište, isti stari, vidio da je i prije.
Pa, ovo je zanimljivo.
Dakle, vraćamo se samo provjeru za SDL prestati događaj.
Zašto je to?
Na taj način možete dobiti miša ulaz s događajima.
Kao kada je miš premjestiti, dobivate događaj za to.
Kad pritisnete tipku miša, možete dobiti događaj za to.
>> Ali postoji još jedan, malo jednostavnije možda, API za dobivanje miša ulaz.
I to je jednostavno SDL get miša stanje.
Dakle, imam int za X i y za poziciju kursora.
Ja ga proslijediti SDL_GetMouseState, koji postavlja ovo.
A to je pozicija u koordinatni sustav prozora.
Dakle, ako je masa u gornjem lijevom prozor, da bi 0, 0.
>> Sada, ono što ću učiniti je da ću učiniti malo vektora matematike.
Kladim ste mislili da ne bi vidjeti da je u CS50, ali ovdje je.
Idem napraviti neki vektor matematike dobiti vektor
iz slike pokazivača.
I tako zašto moram ovo oduzimanje ovdje?
Pa, ako sam samo koristi Odr .-- tako Trebam prevesti miša x
i y od pola širine i visina slike,
jer želim središtu Slika se ide prema miš,
Ne podrijetlo slike.
>> Dakle, to je samo da bi bili sigurni Govorim o središtu slike ovdje.
Onda smo dobili delta X i Y, koji je razlika od cilja
na stvarni položaj slike.
I onda možemo dobiti udaljenost ovdje, što
će biti Pitagorin teorem, korijen od x
puta x plus y y puta.
>> Sada bi se spriječilo podrhtavanje, a ja mogu pokazati vi što to radi, ako ne to učiniti,
ako udaljenost između pokazivača i slika Centar manji od pet,
Ja jednostavno ne idući u premjestiti sliku.
Inače, postavili smo brzinu.
I mi ga postaviti tako da brzina će uvijek biti konstantan.
I neto rezultat svega ova matematika je da slike
će se kretati prema pokazivača.
>> Sada ispada da SDL_GetMouseState,
uz podešavanje X i Y argumente ovdje,
također vraća int koji odgovara na stanje tipki miša.
Dakle, ne možemo pročitati da izravno, ali možemo
koristiti ove makronaredbe, jedan bitovni operator, a ne da zastrašujuće,
samo bitovima i.
Tako bismo mogli reći gumbiće, što je rezultat naše SDL_GetMouseState, ako je to
i bitovima i to makro Ovdje, SDL_BUTTON_LEFT.
>> Dakle, to će se jednostavno riješiti u bitmap koji odgovara
na lijevu tipku miša se pritisne.
I tako, ako bitovni i događa se i to
nule, što znači lijevu tipku pritisnut,
onda mi zapravo ide negirati i x i y brzine,
što će tek napraviti sliku odbjegla.
Ažuriranje pozicije.
Sudari detekcija, vidi ga sve prije donošenja, u redu.
Idemo to napraviti.
Tako da je dobio bi SRCS = hello7_mouse.c.
Veliki.
Nema pogreške.
A igra.
>> Dakle, ovdje imam miš.
A slika je doista jurnjava moj miš.
Sada, u igri što bi, možda ovo je kao neprijateljske jurnjava
tvoj mali znak ili što god.
Ali ovdje imamo Slika jurnjava miša.
A kad kliknem, miš počinje jurnjava sliku
a slika je bježi od miša.
Dakle, to je prilično cool.
I obavijest opet, tu je dalje sudara otkrivanje ovdje.
>> Tako da je konačna malo Demo sam postavio ovdje.
I neka je pogledati još jedna stvar.
Dakle ovamo, spomenuo sam to podrhtavanje.
U redu.
Dakle, ako je udaljenost manja od pet piksela, Bio sam postavljanje X i Y brzine na nulu.
Što se događa ako smo riješiti to?
Zato ću samo to učiniti.
Molimo izgovor ovaj grozan stil, ali smo komentirali kako točan broj.
Tako ću spasiti i učiniti Ista naredba od prije to napraviti.
>> U redu.
A sada što se događa?
Dobro.
Još uvijek slijedeći miš baš kao i prije,
ali kad smo dobili na mišu, imamo ovu bruto podrhtavanje.
Što se događa tamo?
Pa, u našem vektor matematike, sjetite se da smo
da je udaljenost između kursora i središte slike?
Pa, kao da pristupi 0, što počnete dobivanje
ovako vrstom ludog ponašanja gdje je slika vrsta
kao oscilirajući oko kursora.
A to je stvaranje ovog podrhtavanje.
I to je stvarno ružno.
I vjerojatno ne Želite vaše igre da radi,
osim ako je neka vrsta posebnog učinka.
>> Dakle, to je razlog zašto smo upravo to proizvoljna
odsječeni od pet piksela, gdje kažemo ako je u roku od pet piksela, mi smo dobri.
Ne trebamo premjestiti sliku više.
Dakle, to je ono što se događa tamo.
>> Dakle, to je uglavnom to.
Sada znate kako stvoriti prozor, učitavanje slike,
nacrtati sliku na prozoru, dobiti ulaz tipkovnica, miš dobili ulaz,
postoji hrpa drugih ulaz da ne bi
znate kako doći ako se samo provesti Nekoliko minuta gleda na dokumentaciji.
Tako da zapravo imaju prilično nekoliko alata na raspolaganju sada
napisati punopravni igru.
>> Sada, svaka igra treba neki zvuk, ali audio dokumentacija
Također je prilično dobro.
I ja sam spreman kladiti da ako da razumijete sve stvari
smo razgovarali o danas s slike i površine,
prozori i sve, onda figuring out audio API nije
će biti tako loše.
Tako sam gledati prema naprijed da vidim što ste stvorili sa SDL.