THOMAS elav: Okei.
Tere kõigile.
Ma olen Thomas Lively.
See seminar saab olema kirjalikult 2D mänge C SDL.
Nii et ma tean, et sa oled kõik küsib, jah, ma tõesti
tahad mängida ja teha mänge, aga mis see SDL äri?
Nii SDL on C raamatukogu.
Ta seisab Simple Direct Layer.
Ja see on rist platvorm, mängu areng raamatukogu.
Ta töötab Windows, Mac, Linux, isegi iOS ja Android.
Ta tegeleb asjad juurdepääsu audio süsteemid
arvuti, klaviatuuri ja hiir, juhtpuldid, kui nad külge.
On liikuv, see võib isegi teha touch sisestamise ja kõike seda.
Ja muidugi, ta tegeleb graafika, joonistus asju ekraanil.
>> Nii et see on väga laialt levinud, kuigi sa ei kuulnud seda varem.
See on ehitatud viiakse näiteks Valve allikas mootor,
kellele mänge nagu Portal ja Team Fortress 2.
See on ka väga suur hulk indie mänge, mis tulevad,
nii et ma olen põnevil, et näha, mida kõik teeme seda.
>> Seminari eesmärgid on sulle sätestatud olema, ilmutades SDL.
Me läheme õppida luua mängu aknas.
Me läheme luua haldjaid, mis on pildid oma mängu
mida saab liikuda.
Me läheme õppida ja animeerida haldjaid,
nii neid liigutada, teha need muutuvad ajas.
Ja me ei kavatse õppida, kuidas lüüa klaviatuur ja hiir
sisend arvutist.
Mida me ei räägi umbes täna on 3D graafika,
sest see on väga keeruline teema, et meil ei ole aega.
Me ei õpi, kuidas mängida audio meie mängud.
Ja me ei saa ehitada midagi, kuid Linux.
>> Nüüd piirangutega on see, loodetavasti lõpuks seminari,
Teil on rahul SDL dokumentatsiooni,
nii et sa pead olema võimeline minema nuputada kuidas mängida audio ise.
Ka hoone Mac või PC peaks töötama täpselt sama nagu hoone Linux,
kuid setup läheb olla veidi erinev.
Nii et sa peaksid suutma välja mõelda kuidas neid asju teha
lõpuks tänane seminar.
>> Nii et moodustada, me ei kavatse kasutada virtuaalmasina.
Meil oleks kasutada CS50 IDE, sest me lihtsalt saab olema kirjalikult C.
Aga kuna IDE ei ole brauser, me ei saa luua uusi aknaid või ekraan
graafika on.
Seega peame virtuaalne masin.
Nii saab järgige siin manual.CS50.net/appliance/15
paigaldada ametlikes CS50 aparaat, mis on vaid Linux virtuaalse
masin.
>> Ja siis, kui sul on et kõik seatud up-- see
võib võtta natuke aega, sest väga suur download-- sa lähed
töötamine VM sudo apt-get update.
Ja mis tegelikult toimub uuendada kogu tarkvara
pakette oma virtuaalne masin.
>> Pärast seda, sa lähed sõitma sudo apt-get install, libsdl2-2.0-0,
libsdl2-dbg, libsdl2-dev ja Lisaks libsdl2-image-2,0-0,
libsdl2-image-dbg, ja libsdl2-image-dev.
Mida see teeb?
See lihtsalt installib siluda teavet, dokumente, päised,
ja kahendfailid kaks raamatukogud.
Regulaarne vana, SDL 2.0, ja muud teegi
nimetatakse SDL Pilt, mis me ei kavatse olla kasutades
laadida pildifaile meie mängu.
>> Nii et kui teil on, et ka et just siis, kui ta küsib,
sa lihtsalt kirjuta jah, Enter paigaldada need pakid,
ja siis peaks olema hea minna.
Nii et saada jaotus koodi, siis can-- Oh, see ei ole uuendatud.
Kui sul ei ole github account-- Kui teil on github konto
seda saab teha Git kloon käsu repo
ja mis alla laadida Git repo kõik tunnuskoodi,
nii, et sul on kood.
>> Kui te ei ole github konto, mida sa peaksid tegema, on tüüpi
wgithttps: //github.com/tlively/sdl seminar-- ja siin see on erinevalt--
/archive/master.zip.
Nii jälle, et on täpselt sama URL, välja arvatud see saab olema
tlively / SDL_seminar / master.zip ja te kasutate wgit allalaadimist.
Ja siis saate lihtsalt unzip, et arhiiv
ja siis pead kõik lähtekoodi.
Nii kahju.
Ja siis koodi ka võõrustajaks CS50 seminar kodulehel paar
päeva.
>> Hästi.
Niisiis, kuidas me Alustamiseks kirjalikult oma mängu?
Noh, esimene asi, me ei kavatse teha tahad
on vaadata SDL dokumentatsiooni.
Nii et siin on VM.
Ja siin on veebilehel.
Olen liikunud elada libsdl.org.
Mida ma teen siin on minna üle külgriba all dokumentatsiooni,
ja klõpsa wiki.
See toob mind wiki et on enamik dokumente SDL.
Üle sidebar siin me oleme läheb klõpsake API kaupa,
kuna annan meil kena kategooriline vaade
Kogu API SDL.
>> Nii näiteks on meil põhilised initsialiseerimise
ja sulgeda, kõik omamoodi haldus- kraami SDL,
ja siis on meil sektsioon väljapanek asju ekraanil.
See video.
Sisend sündmused, mis on saada sisend klaviatuurilt,
saada sisend hiire ja juhtkangi, kui teil seda isegi.
Seal jõu tagasiside eest asju nagu mäng kontrollerid, mis
me ei hakka rääkima.
Ja siin on heli.
Ja siis on hunnik muid värk, et SDL teha saab.
>> Aga täna me ei kavatse keskenduda lähtestamise siin
piltide kuvamiseks video osas ning käitlemise sisend sündmused.
Nii et need on peamised sektsioonid dokumentide
et sa peaksid muretsema.
Just for fun, kui me läheme üle siin ja klõpsake API nime järgi
saame näha nimekirja iga ühe asjana SDL raamatukogu.
Nii et kõik need funktsioonid, loendite, struktuure, hull summa kraami,
tähestikulises järjekorras.
Ja selgelt, kuni tead sa teed,
see ei kavatse olla liiga abivalmis, mistõttu me API kaupa.
>> Nii alustame.
Loodetavasti olete juba Allalaaditud jaotus koodi.
Ja mis siis saab teha, on õigus siin CS50 aparaat,
lihtsalt avada terminal.
Siin me läheme.
Nii et ma olen juba alla laadinud jaotus koodi abil .zip
meetodit.
Ja ma olen mahalaadimist seda.
Nii et siin see on SDL seminar kapten.
Nii et ma lähen sinna kataloogi.
Ja mida me näeme siin et meil on seitse C faile.
Ja see saab koodi me ei kavatse vaadates täna.
Meil on makefile'i.
Ja meil on ressursse kataloog, mis lihtsalt on pilt
mis sest te näete varsti.
>> Nii saab avada neid faile kasutades G-Edit toimetaja.
Ma tahan, et avada kõik failid, mis Kõigepealt tere ja lõpeb .c.
Siin me läheme.
Nii et see väike aken, nii et me oleme üritagi teha, et suurem.
Ei, see läks ära.
>> Hästi.
Nii et siin on kõige esimene file me ei kavatse vaadata.
Seda nimetatakse hello1_sdl.c.
Ja seda kõike teeb, on initsialiseerida SDL raamatukogu, nii et me saame seda kasutama hakata.
Kuidas sa tead, et tulla kuni see kood ise?
Noh, kui me vaatame üle dokumentatsiooniga
ja läheme initsialiseerimise ja sulgeda osas
see läheb meile kõigile kuidas initsialiseerida SDL.
Nii kindlasti lugeda seda mõni teine ​​kord.
See ei ütle teile kõigile selle kohta, mis siin toimub.
Kuid peamine asja tuum on selles, et peame nimetame seda funktsiooni SDL IT
ja liigu see, milliseid asju tahame raamatukogu initsialiseerida.
Nii meie puhul me lihtsalt läheb initsialiseerida video nüüd,
nii et saame alustada piltide kuvamiseks.
>> Üle siin, näete, kui me klõpsate SDL see, me
võib saada isegi rohkem infot, sealhulgas tagasipöördumise väärtust.
Nii et me näeme siin, et seda returnes null edu.
Nii meie koodi, me ei kavatse kas see ei tagasta null,
ja kui ta ei tagasta null, nii et see ei õnnestunud,
siis me lähme lihtsalt print viga kasutades seda muud ülesanded,
SDL get viga, mis tagastab stringi kirjeldades esinenud vea.
Me läheme printida, et viga ja siis me lihtsalt
läheb väljuda programmi veakoodi.
>> Siis veel üks asi, mida me vajame teha on, enne programmi väljapääsu,
kui me edukalt vormindatud SDL, Me lihtsalt vaja kutsuda SDL loobuda.
Ja see läheb hakkama puhastamiseks kõik SDL sisemiste ressursside juures.
Nii dokumentatsiooni there-- uuesti, siin me oleme initsialiseerimise
ja sulgeda osa dokumentatsiooni.
Sa võid klõpsata funktsiooni siin, SDL loobuda,
ja saate lugeda kõike, mis samuti.
Ja palju neid funktsiooni dokumentatsiooni lehekülge
on näiteks koodi, nii et see on väga hea vahend.
Kindlasti veeta aega lugedes osad selle wiki
kui sa lähed tegema Selle projekti.
>> Hästi.
Nii et kogu meie programmi.
Mida me saame teha nüüd on-- ma olen läheb avama Makefile'i siin
nii et ma lähen võtta vaadata, kuidas see toimib.
Ja see on väga lihtne Makefile'i sarnane sellega, mida olete näinud.
Üks peamisi erinevusi on see, et siin, see
läheb sisestada tulemus jooksmine Selle käsu, mis olete juba
paigaldatud, kui olete installinud SDL.
Ja see on käsk et läheb genereerima
mõned ekstra lipud koostaja.
>> Lisaks sellele, anname selle kõiki tavalisi käske, samuti
Nende kahe käske.
Nii -lsdl2 pildi käepidemed ühendab ka SDL raamatukogu pilt.
Ja -lm tegelikult tegeleb sidumine standardis C matemaatika raamatukogu.
Nii et me ei kavatse vaja Neil kõigile meie C faile,
aga me lihtsalt panna neid nii, et me saame kasutada sama makefile'i kõike
ilma muudatusteta.
>> Üle siin allikatest, see on koht, kus sa tahaks
pane failid, et sa läksid koostada oma projekti.
Aga kuna iga üks mu C ideks on peamine funktsioon,
see läheb Segaduse Kui me paneme neid kõiki.
Nii et ma lähen lihtsalt öelda, nüüd, hello1_sdl.c,
mis on üks me lihtsalt vaatasin.
Nii et kui ma lähen tagasi üle siin, ma suudan teha.
Ja mis ta tegi on see lihtsalt koostatud, et esimene fail.
Ja siis saame kirjutada ./game, sest see on käivitatav seda toodetakse.
Ja kõik see ei olnud print initsialiseerimise edukas.
Nii et me tegime midagi õigesti.
Aga see oli selline igav, sest me ei näe aknas
midagi liikus ringi.
>> Nii tore, me saime SDL vormindatud.
Nüüd liigume millegi natuke huvitavamaks.
Nii et siin on meil hello2_window.c ja see saab olema veidi rohkem
keeruline C programm, mis algväärtustab SDL nagu enne,
va nüüd oleme ka läheb initsialiseerida SDL taimer.
Ja see läheb meile juurdepääsu sisemise taimeri
ja kasutada funktsioone, mis on seotud aja.
>> Ja siis vaatame siin.
Mida me teeme, on meil see pointer kaasa SDL aknas struct, mis
läheb loodud see kõne funktsioonile, SDL luua aknas.
Nüüd, see võtab palju argumente, nii lähme vaatame dokumentatsiooni.
Nii jälle, ma lähen API kategooria, ma olen
läheb alla video siin, ja esimene paragrahvi väljapanek aknas juhtimise.
Nii et see osa on ton asju see,
aga kui sa vaatad läbi neid funktsioone, saate
näha, et ilmselt üks me tahan nimetatakse SDL luua aknas
mis juhtub olema õigus ülaosas.
>> Ja nii see on dokumentatsiooni selle funktsiooni.
Aken läheb on pealkiri, x ja y asukoha ekraanil,
see saab olema laiusega, kõrgus, ja siis see läheb võtma mõned lipud.
Nüüd, me ei tegelikult hoolivad kõik need lipud kohe,
aga kui sa tahad midagi teha nagu make täisekraani aken,
sa võiksid heita pilk selle.
Praegu me lihtsalt läheb kasutada neid erilisi väärtusi,
SDL aknas pluss keskele x ja y, et
lihtsalt luua aken keskel meie ekraanil.
>> Nii et mida see teeb.
Ja kui akna juhtub olema null, mis tähendab, et on viga,
siis jälle me lihtsalt läheb prindi viga SDL get viga.
Ja siis kuna me vormindatud SDL, nüüd on meil vaja sulgeda.
Nii me nimetame SDL loobuda enne tagasi üks peamine.
>> Nii et meil on see aken avada loodetavasti.
Ja mida me ei kavatse tegema, on me läheme
helistada SDL 5000 millisekundit, mis on sama kui viis sekundit.
Ja kui me teinud, et see saab hävitada aknas
koristada SDL raamatukogu ja programmist väljuda.
Nii lähme edasi ja anda, et tulistas.
>> Nüüd muutmise asemel Makefile'i iga kord,
Ma lihtsalt ei tee, ja siis käsurealt
öelda allikatest võrdub ja seejärel Faili me koostamisel.
Nii et see on hello2_window.c.
Fantastiline.
No erros.
Nüüd, kui võtame meie käivitatav, me näeme seda akent.
Nüüd on paar probleeme aknas.
Me saame seda liigutatakse, kuid see on Selle taustal junk sees on.
Nii et me ei ole koostatud midagi, ja nii see on
lihtsalt täis prügi, mis on päris palju, mida me ootame.
>> Veelgi enam, me ei saa akna sulgeda.
Ma selle nupu X nurgas ja midagi juhtub.
Nii me näeme, kuidas määrata et natuke.
Nii saab määrata osa, kus aken on täis prügi esimene.
Nii et kui me läheme üle hello3_image.c, mida näeme, et me oleme lisanud mõned
rohkem asju siin.
Lisasime see uus päise kaudu esitada saada ajastifunktsiooniga.
Ma arvan, et me tegime seda eelmisel üks, liiga, ja ma ei maininud seda.
Aga nüüd, sest me oleme töötab koos piltidega,
vajame lisada SDL image päisefail samuti.
Nii et see on sama asi nagu Enne, initializing SDL siin
Sama asi on luua aknad.
Me oleme näinud, et enne praegu.
>> Nüüd tuleb meil luua midagi, mida nimetatakse rasvasulataja, mis justkui läheb mööda
aknaga.
Aga see on omamoodi abstraktne objekt, mis on
vastutab teeme kõik need joonistus toimingud akent.
Ja see vastab tegelikult et programmi koormatud
arvesse graafika riistvara teie arvuti või telefoni või mis iganes.
Nii lipud tahame edasi see-- ja te saate vaadata dokumentatsioon
saada täpsemalt siin-- ei kavatse tuleb SDL krohvikihid kiirenenud, mis
tähendab see saab olema kasutades graafika riistvara
ja mitte ainult eeskuju tarkvara.
>> Ja me ei kavatse kasutada SDL RENDERER PRESENTVSYNC.
VSYNC on asi, mis lihtsalt teeb Sinu graafika vaata parem ja takistab
see asi, mida nimetatakse ekraan terror, kus pool
Ühe raami ja pool järgmise raam laskuge samal ajal
ja see tundub kohutav.
Aga jälle, võid minna lugema sellest oma.
>> Nii et meil on mõned lipud siin.
Ja nii me lihtsalt läheb helistada Selle funktsiooni SDL luua renderdusmootoriga.
Me läheme anna see aken seostaks selle renderdusmootoriga.
Negatiivne üks tähendab, et me ei hooli, mida graafikadraiver me ei kavatse kasutada.
Nii et peaks päris palju alati negatiivne,
kui sa tead graafika draiverid.
Ja siis me lihtsalt läheb andke seda meie lippu.
Nii et kui mis tagastab null, siis me oleme trükkimineku viga nagu tavaliselt,
aga siis me ka läheb hävitada akna
puhastada neid vahendeid enne kutsudes SDL väljuda ja tagasi.
>> Nüüd huvitavam osa siin on koht, kus me koormus meie pilti
Selle funktsiooni abil IMG_load.
See on ainus funktsioon läheme kasutada alates SDL raamatukogu pilt.
See on ainus, mida me vajame.
See on funktsioon, mis võtab stringi mis on tee ühtegi pilti ressurss.
Ja see võib olla PNG, GIF, bitmap, mõni neist asjadest.
Ja see ongi see funktsioon on nii kena.
Seda võib käsitleda päris palju tahes vormis.
Saadetised mällu ja salvestab selle kui asi nimega SDL pinnale.
>> Nüüd SDL pind on vaid struct mis esindab kujutise andmete mälus.
Nii saab lähemalt lugeda et dokumentatsioonis kaks.
Ja kui see viga, siis me oleme kavatsed teha kogu asi, kus
Me printida viga, sulgeda ressursse ja seejärel sulgege programm.
Nüüd huvitav asi on, enne saame teha seda pilti akna
peame tegelikult oleks tekstuuri.
Nüüd tekstuur vastab pildi andmed laetakse
arvesse graafika riistvara mällu.
>> Nii pinnale on peamine mälu, regulaarne mälu
et me oleme kasutanud kõiki poolaasta ja tekstuur on selles eraldi VRAM
mälu, videokaart kontrolli.
Nii et me nimetame seda funktsiooni SDL_CreateTextureFromSurface.
Anname siis meie renderdusmootoriga ja meie pinnal.
Ja siis me tegelikult teinud pinnaga,
nii me lihtsalt läheb vabastatud.
Me ei vaja seda enam.
Ja siis nii et kui see kõne errored ja tagasi null,
siis me teeme kogu Tõrketeavituse asi uuesti.
>> Hästi.
Siin me sattuda mõnda tegelik renderdamine toimib.
Nii helistades SDL_RenderClear ja saata see
renderdusmootor seotud meie aknas lihtsalt teeb akna mustaks.
Nii see eemaldab et rämps, et me nägime Meie aknas enne ja muudab mustaks.
Ja siis me läheme helistada SDL_RenderCopy,
annab see meie renderdusmootoriga meie tekstuuri.
Ja me räägime, mida Nendes valdkondades on natuke.
Aga see läheb võtta tekstuuri andmeid
ja kopeerida selle peale meie akna joonistamiseks pilti.
Nii et pärast oleme teinud seda koopiat andmed peale meie aknas
Me ei pea seda tegema ekstra funktsiooni nimetatakse SDL_RenderPresent.
>> Ja see on huvitav sest see muutub
arvesse teema nimega topeltpuhverduseks.
Nii topeltpuhverduseks on meetod, mis muudab graafika otsida palju parem.
Jällegi, see takistab selle ekraani rebimine Ma rääkisin varem, kus
Teil on kaks puhvrid.
Seal on tagasi puhvri mälu ja ees puhvri.
Ees puhver on sõna otseses mõttes Mis ekraanile hetkel.
Nii et me kõik need teha muutusi, nagu SDL muuta koopia või SDL_RenderClear
taha puhvri.
Nii nad muuta asju taga puhver.
Siin võiks olla joonistus seda roheline ruut, et tagasi puhvri.
>> Nii siis, kui me teinud teed Meie muuta operatsioone, mis
võib võtta päris pika aeg, mida me teeme
on vaja minna puhvrid.
Nii et see sõna otseses mõttes lihtsalt võtab ees puhver ja tagasi puhver
ja lülitab neid nii et kohe,
ühe operatsiooniga asemel võibolla sadu või tuhandeid,
kõik meie äsja sulatatud objektid on ekraanil.
Ja see takistab asja nagu ekraani värskendav
Kui me oleme vaid tõmmatakse poole Meie objektid kaadris.
Nii et miks meil on vaja helistada SDL_RenderPresent, samuti
kui SDL_RenderCopy.
>> Jällegi, me lihtsalt läheb ootama viis sekundit.
Siis me ei kavatse koristada meie ressursse.
Meil on üsna vähe rohkem seekord.
Ja siis me lihtsalt läheb programmist väljuda.
Nii teeme seda.
Ma lähen kirjutama make ja seejärel allikad võrdub hello-- see on nüüd 3image.c.
Kõik õige, et koostatud vigu.
Ja näed siin ma olen nüüd välja toodud minu pilt, Tere, CS50!
meie akna, mis kaob pärast viie sekundiga.
>> Nüüd, see on veel probleeme, eks?
See ei ole hea rakendus, sest kui ma üritan akna sulgeda,
midagi ei juhtu.
See x ole veel tundlik.
Võtame pilk Järgmise faili hello4animation.
Nii et see on faili mis läheb sisse
Liikumine ja liikumine meie pilt.
Nii et me läheme tegema sama asi nagu enne,
algatada SDL, luua aken, luua renderdusmootoriga
koormus pildi mälu, luua tekstuuri.
Me oleme näinud kõike seda enne.
Nüüd on see uus.
Me läheme on struktuuri nimetatakse SDL ristkülik, mis on ristkülik.
Kui me läheme siia, saame ei otsi SDL ristkülik,
ja näed, et see on väga lihtsa struktuuriga.
See on x, y for positsiooni, ja see
on laius ja kõrgus for suurusest ristkülik.
>> Mida me teeme on me läheb määratleda selle SDL ristkülik dest,
sihtkohale.
Ja see on koht, Ekraanil, kus
me ei kavatse joonistus meie pilt, eks siis
Kui me ei kavatse olla liikuv pilt ümber,
siis kohtades, kus me ei kavatse teha pilti
tuleb ringi liiguvad.
Nii et me läheme nimetame seda funktsiooni SDL_QueryTexture.
Ja teate ma möödaminnes aadress of dest.w, mis on laiust,
ja dest.h, mis on kõrgusest.
Ja nii SDL_QueryTexture läheb talletada nende valdkondade laius
ja kõrgus meie tekstuuri.
>> Ja siis ma lähen teha on Ma lähen
seada dest.x olema aken laius miinus dest.w, mis on
laiuse sprite jagatuna 2.
Ja see saab seda seadistada nii, et pilt on täiesti keskele
meie akna, eks?
Nüüd on mul y positsiooni.
Ja see läheb on muutuja, mis on
muutumas, sest me ei kavatse olla liikuv pilt y suunas.
Ja nüüd on meil midagi nimetatakse animatsiooni loop.
>> Niisiis, kuidas animatsioon toimib?
Noh, inimsilm suudab tuvastada 12 erinevat pildid iga teine, eks?
Nii et kui sa vilkuma 12 pilti kaardid mind teises, ma nägin kõiki neid pilte
kui oma isikupäraseid pilti.
Nüüd, kui te vilkuma rohkem pildid minu teine,
siis mu silma hakkaks hägustada neid koos
ja ma seda tajuda algatusel, ühe asemel eraldiseisev pilt.
Nii näiteks filmi ja televisiooni, nad vilguvad pildid sa 24 korda
teise.
Nii et 24 kaadrit sekundis.
Arvuti ekraanidel, teisalt Sageli on 60 kaadrit sekundis.
See on nende refresh kiirus.
See, kui tihti nad värskendada pilt ekraanil.
Nii et meie eesmärk saab olema 60 kaadrit sekundis meie mängud.
>> Vaatame, mis koodi.
Nii iga kaadri, me oleme esimene läheb puhtaks aknas.
See on üldine muster.
Sa alati selge akna iga kaadri ning seejärel
teha kõik oma joonistus operatsioone, ja siis lõpus,
ei RenderPresent näidata kõik raami.
Ja siis sa lähed on oodata aasta lõpus
ootama kuni järgmise raam peaks algama.
>> Nii et kui ma tegin palju keeruliste arvutuste siin
et võttis rohkem kui 16 millisekundit, oleks mul võimatu
saada, et kaadrisagedusega 60, et Ma tahtsin, sest iga kaadri
võtab liiga kaua aega arvutada.
Lisaks, me tõesti teeme omamoodi tühine hulk tööd
siin, sest seal on ainult üks asi, mida me oleme joonistus.
Nii et ma lihtsalt ootama 1/60 kohta Teine, mida on pikkus
raami vahele raamid.
Nii et ma olen mingi teeseldes teed kõik minu töö võtab null korda.
Aga reaalses mängus sa pead lahutama
kui palju aega kulus teha kõik selle töö oma puhkeajal.
>> Igatahes, mida ma olen tegelikult teeb see loop?
Ma puhtaks aknas.
Seadsin dest.y, mis on int minu tegelik y positsiooni heideti int.
Nüüd, ma tahan float resolutsiooni minu y positsiooni minu mäng,
kuid siis tegelikult joonistada ekraanile,
ta vajab ints, sest see ühikutes pikslit, nii et on, mida enamus on.
Ma lähen joonistada pilt.
Nii et see on allikas ristkülik.
Ja see on kohtades ristkülik.
Nii ma möödunud null jaoks allikas ristkülik
öelda, et ma tahan juhtida kogu mu tekstuuri.
Aga kui sul oleks palju tekstuurid oma mängu
ja nad kõik on üks suur tekstuurikaarti mis oli laaditud SDL kui lihtsalt üks
tekstuuri, siis võiks kasuta allikas ristkülik
valida üks väiksemaid tekstuurid üks väiksemaid haldjaid,
välja, et suur tekstuurikaarti.
>> Nii jälle, ma möödaminnes minu muuda, minu tekstuuri, ja nüüd sihtpunkti.
See saab olema, kus on aknas, et see läheb tõmmata.
Ja siis, sest ma elavdamine midagi, ma vajan liikumist,
Ma lähen ajakohastamine sprite seisukoha iga raami.
Nii et mul on see pidev nn scroll kiirendada ühikutes pikslit sekundis.
Nüüd, iga kord teeme liikumine, raam on ainult 1/60 sekundit.
Nii et ma lähen jagada, et 60.
Ja siis vaatame, ma olen lahutades et y positsiooni.
Miks ma lahutades?
Me jõuame selle teise.
Nii ma siis koristada minu ressursid ja programmi üle.
>> Nii muudame seda.
Nii saab minna make SRCS = hello4 animation.c, eks?
Game.
Palun.
Nii et mul on see kerimine üles aken, mis on päris kena.
Aga hoidke, olin lahutades alates y positsiooni iga kord.
Mis seal toimub?
Noh, selgub, et SDL, ja tegelikult enamikus arvutigraafika,
päritolu kohta koordinaatide süsteemi on ülemises vasakus aknas.
>> Nii positiivsete x suunas läheb kogu oma akna paremal.
Ja positiivne y suunas tegelikult loojub.
Nii jälle, päritolu on in ülemises vasakus aken,
positiivne y suunas on maas, ja positiivne x on õige.
Nii et kui ma lahutama y positsiooni, mis on
kavatsen teha seda minna negatiivseks y suunas, mis on üles akent.
Nii et see, mis toimub seal.
Cool.
>> Vaatame järgmise faili.
Siin on osa näidata, kus me lõpuks
saada, et X nurgas aken et see peaks akna sulgeda
töötama.
Mis toimub?
Me initsialiseerida SDL, luua aken, luua renderdusmootoriga laadida pilti,
luua tekstuuri nagu me oleme näinud.
Meil on sama kohtades ristkülik nagu enne, sama kõne päringu tekstuuri.
Aga seekord me oleme siis läheb jagavad laius
ja kõrgus meie sihtpunkti 4.
See on ainult tagajärg tagi meie pildi alla, kui
näitame seda akent neli.
Nii et päris kena.
Me lihtsalt skaala just niimoodi.
Me läheme alustada sprite keskel ekraani.
Ja nüüd on meil x ja y kiiruse ja nad mõlemad kavatse alustada nullist.
>> See on vale faili.
Mul on kahju.
Nii et kõik on tõsi.
See on kõik veel seda faili.
Meil on lõhe 4 ja puha.
Nii et siin on meil x ja y positsiooni jaoks Akna keskel.
Ja me anname selle algkiirus Selle ühtlase kiirusega, mis
Usun 300 pikslit sekundis.
Nüüd on meil see int võiks sama hästi olla loogiline nimetatakse lähedale nõutud.
Ja selle asemel, et teeme lõppahelasse taimer siin
me ei kavatse olla elavdamine kui Niikaua kui lähedale ei nõuta.
>> Niisiis, kuidas me töötleme sündmusi?
Noh, SDL järjekorrad kuni sündmusi grammatiline järjekorda kulisside taga.
Ja siis iga kaadri saame dequeue sündmused
sellest järjekorda kasutades Selle kõne SDL_PullEvent.
Ja jälle kindlasti minna lugema selle dokumentatsioonis.
Seal on palju rohkem üksikasju ja palju rohkem funktsioone, mida saab kasutada seda.
Me andke seda aadressi see asi, SDL_Event
et meil on siin pakis.
>> Nüüd, mis on SDL_event?
Kuna SDL, kui me vaatame documentation-- olgem
vaata API kaupa, sisend sündmuste, käsitsemise,
saame vaadata number erinevate ürituste siin
ja näeme seal terviku ton neist.
Mis on selle SDL_Event asi?
SDL_Event on ametiühingu.
Wow, milline on ametiühingu?
Te olete ilmselt kunagi kuulnud, et enne.
Ja see on OK.
>> Riigi liit on selline nagu struct, välja arvatud struct
on ruumi kõigile tema põldude ja mälu
arvestades, et liidul on ainult piisavalt ruumi, et mahub suurim
üks selle väljad, mis tähendab seda saab salvestada ainult ühe selle väljad
korraga, millist mõtet sündmusi, eks?
Me ei pea klaviatuuri sündmus või akna juhul
kuid ühe sündmuse saa olla nii klaviatuuri korral ja akna korral,
nii et see oleks tobe on ruumi need mõlemad sees meie üritus Liidus.
Nii et kui sa tahad luua oma Liit,
tundub täpselt sama kui luua struktuure,
välja arvatud see, mida me kasutame Liidu märksõna asemel struct märksõna.
Ja pidage meeles, et kõik asjad sees Liidu
tegelik muutuja, mis on Euroopa Liidu saab olla vaid üks neist väärtustest
korraga.
>> Niisiis, kuidas me saame öelda, millist sündmus me lihtsalt hüppasid välja selle järjekorda?
Noh, me saame testida event.type.
Ja kui see on võrdne to SDL_Quit teame
see on juhul, tekkis siis, kui me
tabanud, et X nurgas aken.
Ja saame lähedale nõutud võrdub 1.
Ülejäänu on vaid mõned animatsioon et olete näinud.
Nii saab minna ja teha seda ja näha, kui hästi see töötab.
Nii et ma lähen kirjuta mark ja siis SRCS = hello5_events.c.
Seal me läheme.
Mängud.
>> Nüüd näeme, et see oli tõepoolest vähendanud neli.
Ja nüüd on kopsakas ringi.
Mul on mõned kokkupõrke avastamise toimub koos akna ääri
et suudame heita pilk.
Ja mis juhtub, kui ma lähen sulgeda?
See sulgeb.
Fantastiline.
Saime sel juhul.
Ja me käideldakse seda.
>> Nii vaatame tagasi koodi.
Nii et kuidas ma saan seda kopsakas umbes niimoodi?
Pea meeles, ma panen nii x ja y esialgu kiirusega.
Ja kiirus on positiivne pidev, nii et see
hakka seda alustamist läheb alla ja paremale.
>> Nüüd, iga raam, lisaks käitlemine kõik sündmused, mis võisid aset leida,
Ma lähen, et tuvastada, kas mu sprite üritab minna aknast välja.
Nii saame teha, et just checking x_pos 0, y_pos 0 ja seejärel
Samuti x_pos ja y_pos koos akna laius ja akna kõrgus.
Pange tähele, ma olen maha laius sprite.
Ja seda sellepärast, et kui ma ei lahutada laius sprite,
oleks ainult kontrollida, päritolu sprite
ei lähe väljaspool akent.
Aga me tahame kogu laius sprite
et alati sees akna ja Kogu kõrgus sprite
et alati sees aknas.
Nii see on, mida lahutamine on.
Palju geomeetria Siin saad kasulik seda välja tõmmata
paberile koordinaatide süsteemi, et näha, mis toimub.
>> Nii et kui ma põrkuvad, ma lihtsalt lihtsalt reset positsiooni
nii, et see ei hakka ekraanilt välja.
Ja ma lähen, kui see põrkab ühel külgseinte,
Ma lähen tühista x kiiruse nii, et see
algab kopsakas teises suunas.
Ja sarnaselt, kui see tabab üla- või alaosas,
Ma lähen määrata y kiirus võrdne negatiivse y kiirus,
nii et see põrge tagasi.
Nii et see, kuidas me saime, et siin.
>> Ja ajakohastamise seisukohad nagu me oleme näinud,
jagada 60, sest me oleme ainult käitlemise 1/60 sekundit.
Ja siis muudab, täpselt sama nagu enne.
Ja nii see kõik mis juhtus selle faili.
Nii see on, kuidas me sündmusi.
Peaasi, et ära siin on see SDL_PullEvent funktsiooni.
Ja siis tuleb kindlasti lugeda dokumentatsiooni rohkem SDL_Event
Euroopa Liit, sest see andmetüüp on väga, väga tähtis, sest me kasutame seda
igasuguseid üritusi.
>> Näiteks me seda kasutada klaviatuuri sündmusi, mis on see, mida see fail on.
Mis meil on?
Meil on sama asi nagu enne, initsialiseerida SDL, luua aknas
luua renderdusmootoriga laadida pilti mällu, luua tekstuuri.
Jällegi, me ei kavatse on see dest ristkülik,
me ei kavatse skaala pilti neli, teha natuke väiksem.
Nüüd on meil alustada sprite on ekraani keskel.
Aga seekord, me ei kavatse seada esialgse x ja y kiirused nulli,
sest klaviatuur on läheb hõlma neid.
Ja pealegi, me ei kavatse jälgida nende muutujate
üles, alla, vasakule ja paremale.
Ja see läheb, et hoida jälgida, kas me oleme
vajutatud klaviatuuri nuppe, et vastavad üles, alla, vasakule,
ja õige.
>> Nüüd, see on selline fancy sest me ei kasuta W, A, S,
D siin või tegelik nooleklahve.
Me näeme, et üks hetk.
Nii et me läheme töötlema Kui just nagu enne.
Me tõmmata korral.
Aga nüüd me ei kavatse lülitage sündmuse tüüp.
Kui see on SDL_Quit, me oleme läheb seatud lähedal
paluti üks, just nagu enne.
See tegeleb x nurgas aken,
nii et meie aknas tegelikult sulgub.
>> Vastasel juhul, kui saame SDL klahvi sündmus, mis tähendab, et me vajutanud,
siis mida me teeme on me läheb lülitage see asi siin,
mis means-- nii event.key tähendab kohtleme oma sündmus Liidu
minna ja saada võti Kui ehitis on.
Nii selgub, et see Liit on oluline sündmus struktuuri.
Ja siis minge võti Ürituse struktuur selle valdkonna
nimetatakse keysym ja siis scancode.
Ja jälle kindlasti lugeda dokumendid selle kohta.
Märksõna sisendite üsna huvitav.
Saad skaneerida koodid või võti koodid.
Ja see on natuke peenem, kuid dokumentatsioon on üsna hea.
>> Nii et kui me näeme scan kood Meie klahvivajutust on W või üles
me ei kavatse luua võrdne 1.
Ja siis me murda, et lüliti.
Kui see on A- või vasakule, seadsime vasakult 1, et cetera, et cetera, et alla ja paremale.
Nüüd, läbi selle välimiste lüliti, Kui me näeme olulist up üritus,
see tähendab, et oleme välja peamised ja me enam seda vajutamata.
Nii et ma lähen ütlen up võrdub 0, Vasakul on 0, alla võrdub 0, õigus
võrdub 0, jne.
>> Ja märkate meil kõik need Kahel juhul panna kõrvuti teiste
ilma eraldi koodi esimest juhtumi asjaoludest, mis
tähendab, et kas see on S või alla siinsamas,
see läheb täide see kood.
Nii et on päris mugav.
See ei lase meil oleks vaja teha rohkem tingimused ja IFS ja asjad
nagu see.
>> Nii et me läheme määrata kiiruse.
Seame kiirus 0.
Siis, kui üles vajutatakse ja mitte alla, siis me
määrata y kiirus negatiivne kiirus.
Pea meeles, negatiivne, sest negatiivne y suunas on läbi.
Ja positiivne y suunas on maas.
Kui alla on vajutatud ja mitte üles, siis me oleme
läheb seadke see positiivne kiirus, mis tähendab allakäik ekraani.
Sama asi vasakule ja paremale.
>> Ja siis me läheme uuendama seisukohti nagu enne.
Me teeme kokkupõrget avastamine koos piire,
kuid me ei kavatse nullida liikumiskiirus, sest kiirus on vaid
kontrolli all klaviatuuri.
Aga me nullida positsioone hoida seda akent.
Ja me ei kavatse seada positsioone struct
ja siis teevad kõik muudab asju enne.
Vaatame, mida ta teeb.
Nii et SRCS-- vaatame, see on hello6_keyboard.c.
>> Oh ei.
Nii saime hoiatused siin.
Ja see on lihtsalt öeldes me ei kontrollida iga tahtsid
koht.
See on OK, sest seal on 236 neist või nii.
Nii et ma lähen ignoreerida neid hoiatusi.
See on ikka koostatud trahvi.
Nii et ma lähen mängu mängida.
See ei liigu.
Aga nüüd, kui ma puder minu klaviatuur, Võin teha mõned WASD liikumise siin
Ma saan kasutada nooleklahve samuti.
Ja märka, kuigi ma olen vajutades õige kohe,
ta ei kavatse aknast välja, sest ma reset see igale kaadrile.
Nii et päris kena.
Võite ette kujutada, liikudes Mario mõned nooleklahve või midagi sellist.
Ja jah, X ei tööta.
>> Nii lõpliku faili läheme vaadata, hellow7_mouse.
See on umbes saada hiire sisend.
Nii et üks, me importida matemaatika päise kaudu,
sest me ei kavatse olla natuke matemaatikat siin.
Sama vana, sama vana kraami, kohtades, sama vana, seda varem näinud.
Noh, see on huvitav.
Nii et me oleme tagasi kontrollime ainult jaoks SDL loobuda sündmus.
Miks nii?
Nii saad hiire sisend sündmused.
Nagu siis, kui hiir liigutada, saad sündmus selle eest.
Kui hiire nuppu, saad sündmus selle eest.
>> Aga seal on veel veidi lihtsamaks ehk API saada hiire sisend.
Ja see on lihtsalt SDL get hiire riik.
Nii et mul on int x ja y kursori asukohas.
Ma andke seda SDL_GetMouseState, milles neid.
Ja see on positsioon koordinaatide süsteemi akent.
Nii et kui mass on ülemises vasakus akna, et oleks 0, 0.
>> Nüüd, mida ma lähen tegema, on ma lähen teha natuke vektor matemaatikat.
Vean kihla, et sa arvasid, et sa ei näha, et CS50, kuid siin see on.
Ma teen mõned vektori matemaatika saada vektori
pildi kursori.
Ja miks ma pean Selle lahutamine siin?
Noh, kui ma lihtsalt kasutatav dest .-- nii Mul on vaja tõlkida hiire x
ja y poole võrra laiuse ja kõrgus pilti,
sest ma tahan keskel pilt läheb suunas hiir,
mitte päritolu pilti.
>> Nii et lihtsalt veendumaks, et ma räägin umbes keset pilti siin.
Siis saame delta x ja y, mis vahe on sihtmärgist
tegeliku positsiooni pilti.
Ja siis saame kaugus siin, mis
läheb Pythagorase teoreemi, ruutjuur x
korda x pluss y korda y.
>> Nüüd, et vältida närvitsema ja ma näitan teile, mida see teeb, kui ma ei tee seda,
Kui vahemaa kursor ja Pildi keskel on vähem kui viis,
Ma lihtsalt ei kavatse liigutada kujutist.
Muidu me seame kiirus.
Ja seadsime nii, et kiirus on alati konstantne.
Ja tulemit kõik see matemaatika on see, et pilti
läheb liikuma kursor.
>> Nüüd selgub, et SDL_GetMouseState,
Lisaks seades x ja y argumendid siin
Samuti tagastab int, mis vastab Riigile hiire nupud.
Nii et me ei saa lugeda, et otse, kuid me saame
kasutada neid makrosid, ühe bitwise operaator, mitte et jube,
vaid bitwise ja.
Nii me ütleme nupud, mis on tingitud Meie SDL_GetMouseState, kui see
ja bitwise ja see makro Siin SDL_BUTTON_LEFT.
>> Nii see läheb lihtsalt lahendada et bitmap, mis vastab
vasakule hiire nuppu vajutatud.
Ja nii kui bitwise ja toimub ja see on
ei ole null, mis tähendab, vasakut nuppu vajutati,
siis me tegelikult läheb tühista nii x ja y kiirustega
mis lihtsalt teeb pildi Põgenenud.
Värskenda seisukohti.
Kokkupõrked avastused, näinud kõik enne, muutes kõik õige.
Teeme seda.
Nii et sa pead tegema SRCS = hello7_mouse.c.
Hea.
Vigu ei ole.
Ja mängu.
>> Nii et siin on mul hiir.
Ja pilt on tõepoolest death minu hiir.
Nüüd on mängu teete, võib-olla see on nagu vaenlane Tagaajamine
su väike tegelane või mis iganes.
Aga siin on meil image tagaajamine hiirt.
Ja kui ma vajutan, hiir algab tagaajamine pilti
ja pilt on põgened hiir.
Nii et on päris lahe.
Ja teate uuesti, seal on veel kokkupõrke avastamise siin.
>> Nii et on lõpliku vähe demo ma panin siin.
Ja olgem heita pilk veel üks asi.
Nii siia tagasi, mainisin seda värinat.
Hästi.
Seega, kui vahe on väiksem kui viis pikslit, Olin milles x ja y kiirus nulli.
Mis juhtub, kui me vabaneda on?
Nii et ma lähen lihtsalt seda teha.
Palun vabandust selle kohutava stiili, kuid me kommentaariks õige koodi.
Nii et ma lähen päästma ja teha Sama käsk enne seda tegema.
>> Hästi.
Ja nüüd, mis juhtub?
Väga hea.
Me ikka pärast hiir nagu enne,
aga kui me saame hiire, meil seda raske närvitsema.
Mis seal toimub?
Noh, meie vektori matemaatika, mäletan, olime
võttes vaheline kaugus kursor ja kesklinnas pilti?
Noh, kui see läheneb 0, siis alustada saada
nagu selline hull käitumine kus pilt on omamoodi
nagu vahelduvaid ümber kursor.
Ja see loob see värin.
Ja see on tõesti kole.
Ja siis ilmselt ei tahad oma mänge tehes,
kui see on mingi eriline mõju.
>> Nii et miks meil lihtsalt see meelevaldne
lõigatud viis pikslit, kus me ütleme kui see on viie pikslit, me oleme head.
Meil ei ole vaja liigutada kujutist enam.
Nii et see, mis toimub seal.
>> Nii et on päris palju see.
Nüüd tean, kuidas luua aken, laadige pilt,
joonistada pilt akna saada klaviatuurilt sisestamine, saada hiire sisend,
seal on hunnik muid sisend, et te ei teeks
tea, kuidas, kui sa lihtsalt veeta Mõne minuti vaadates dokumentatsiooni.
Nii et sa tegelikult üsna vähe vahendeid teie käsutuses nüüd
kirjutada täieõiguslik mängu.
>> Nüüd, iga mäng vajab audio, kuid audio dokumentatsioon
on ka päris hea.
Ja ma olen valmis kihla, et kui sa aru, kõik asjad
me rääkisime täna piltide ja pinnad,
aknad, ja kõike, siis figuring audio API ei ole
saab olema, et halb.
Nii et ma ootan mida sa luua koos SDL.