THOMAS Lively: Në rregull. Pershendetje te gjitheve. Unë jam Thomas Lively. Ky seminar do të jetë shkrim lojëra 2D në C duke përdorur SDL. Kështu që unë e di se ju jeni të gjithë pyetur, vërtet, unë me të vërtetë duan të luajnë lojëra dhe të bëjnë lojra, por ajo që është ky biznes SDL? Pra SDL është një bibliotekë C. Ajo qëndron për Simple DirectMedia Layer. Dhe kjo është një platformë kryq, zhvillimin e lojës bibliotekë. Ai punon në Windows, Mac, Linux, madje iOS dhe Android. Ajo merret me gjëra të tilla si qasje në sistemet audio për kompjuter, tastierë, dhe mouse, joysticks, në qoftë se ata janë bashkangjitur. Në celular, ajo madje mund të bëjë prek të dhëna dhe të gjithë atë. Dhe sigurisht, ajo merret me grafikë, tërhequr gjëra në ekran. Pra, ajo është shumë i përdorur gjerësisht, edhe pse ju nuk mund të keni dëgjuar atë përpara. Është e ndërtuar në, për shembull, Motor burim Valve, të cilin fuqitë e lojëra të tilla si Portal dhe Team Fortress 2. Është gjithashtu në një numër shumë të madh e lojrave indie që vijnë jashtë, kështu që unë jam i ngazëllyer për të parë se çfarë ju të gjithë do të bënte me të. Qëllimet e seminarit do të merrni ju përcaktuar të jetë zhvilluar me SDL. Ne jemi duke shkuar për të mësuar se si për të krijuar një dritare lojë. Ne jemi duke shkuar për të krijuar sprites, të cilat janë imazhet në lojë tuaj që mund të lëvizë. Ne jemi duke shkuar për të mësuar se si për të dhe animate sprites, kështu që lëvizin rreth tyre, bëjnë ato ndryshojnë me kalimin e kohës. Dhe ne jemi duke shkuar për të mësuar se si për të kapur tastierë dhe maus të dhëna nga kompjuteri. Ajo që ne nuk do të flasim për sot është 3D grafika, sepse kjo është një shumë e komplikuar subjekt që ne nuk kemi kohë për të. Ne nuk do të mësojnë se si të luajnë audio në lojrat tona. Dhe ne nuk do të jetë ndërtimi për asgjë, por Linux. Tani përjashtime ka që, shpresë, deri në fund të seminarit, ju do të jetë kënaqur me dokumentacioni SDL, kështu që ju do të jetë në gjendje për të shkuar kuptoj se se si të luajë audio për veten tuaj. Gjithashtu ndërtimi për Mac apo PC duhet të punojnë të njëjtë si ndërtimi për Linux, por setup do të të jetë pak më ndryshe. Kështu që ju duhet të jetë në gjendje të kuptoj se si për të bërë këto gjëra deri në fund të seminarit të sotëm. Pra, për të ngritur, ne jemi duke shkuar për të përdorur një makinë virtuale. Ne do të përdorim IDE CS50, sepse ne jemi vetëm do të jetë me shkrim në C. Por meqë IDE nuk është një shfletues, ne nuk mund të krijojnë dritare të reja ose ekran grafika në të. Pra, ne kemi nevojë për një makinë virtuale. Kështu që ju mund të ndiqni udhëzimet këtu në manual.CS50.net/appliance/15~~pobj për të instaluar pajisjen zyrtare CS50, i cili është thjesht një Linux virtuale makinë. Dhe pastaj një herë ju keni që të gjithë të vendosur up-- saj mund të marrë pak kohë, sepse një download-- shumë të madhe ju do të jeni për të kandiduar në VM sudo apt-get update. Dhe kjo është me të vërtetë ndodh për të rinovuar të gjithë software të paketa në kompjuterin tuaj virtuale. Pas kësaj, ju jeni duke shkuar për të drejtuar sudo apt-get install, libsdl2-2.0-0, libsdl2-dbg, libsdl2-dev, dhe Përveç kësaj libsdl2-image-2,0-0, libsdl2-image-dbg, dhe libsdl2-image-dev. Pra, çfarë do që të bëjmë? Që thjesht instalon debug informacion, dokumentacioni, headers, dhe binareve për dy bibliotekat. Rregullt e vjetër, SDL 2.0, dhe një tjetër bibliotekë quajtur Image SDL, e cila ne do të jetë duke përdorur për të ngarkuar fotografi imazh në lojën tonë. Pra, një herë ju keni se edhe se, vetëm kur ai e kërkon, ju vetëm lloji po, hit Enter për të instaluar këto paketa, dhe atëherë ju duhet të jetë mirë për të shkuar. Pra, për të marrë kodin e shpërndarjes, ju can-- oh i dashur, kjo nuk është përditësuar. Nëse nuk keni një account-- GitHub në qoftë se ju keni një llogari GitHub, ju mund ta bëni këtë Git Komanda klon në repo dhe që do të shkarkoni Git repo me të gjithë kodin në të, kështu që ju do të keni kodin. Nëse ju nuk keni një GitHub llogari, çfarë ju duhet të bëni është të shkruani wgithttps: //github.com/tlively/sdl seminar-- dhe këtu është different-- /archive/master.zip. Pra, përsëri, kjo është e njëjtë e saktë URL, përveç se do të jetë tlively / SDL_seminar / master.zip dhe ju jeni duke përdorur wgit për të shkarkuar atë. Dhe pastaj ju mund të thjesht hap zinxhirin atë arkiv dhe pastaj ju do të keni të gjitha kod burim. Pra vjen keq për këtë. Dhe pastaj kodi gjithashtu do të strehohen në faqe web Seminari CS50 në një çift ditë. Në rregull. Deri sa nuk kemi të filloni shkrim lojën tonë? E pra, gjëja e parë ne do të dëshironi të bëni është të shikojmë në dokumentacionin SDL. Kështu që këtu është VM. Dhe këtu është web faqja. Unë kam lundruar për të jetuar libsdl.org. Ajo që unë jam duke shkuar për të bërë këtu është të shkoni gjatë në sidebar, nën dokumentacionit, dhe klikoni në wiki. Kjo do të më çojë në wiki që ka shumicën e dokumentacionit për SDL. Mbi në sidebar këtu, ne jemi do të klikoni API sipas kategorisë, sepse do të japë ne një pamje e bukur kategorik i tërë API për SDL. Kështu për shembull, ne kemi initialization themelore dhe mbyllur, të gjitha lloj gjëra administrative për përdorimin SDL, dhe pastaj ne kemi seksionin për shfaqur gjëra në ekran. Kjo është video të. Ngjarje Input, kjo është duke marrë të dhëna nga tastiera, duke marrë të dhëna nga të miut, dhe levë, në qoftë se ju keni atë edhe. Ka forca reagime për gjëra si kontrolluesit lojë, të cilat ne nuk do të flasim për. Dhe këtu është audio. Dhe pastaj nuk ka një bandë e të tjera sende që SDL mund të bëjë për ju. Por sot ne jemi duke shkuar për të përqëndrohet në inicializimit këtu, shfaqur imazhe në video seksioni, dhe trajtimin e ngjarjeve të dhëna. Pra, këto janë kryesore seksionet e dokumentacionit që ju duhet të jetë shqetësuese në lidhje. Vetëm për argëtim, në qoftë se ne do të shkojmë mbi këtu dhe klikoni mbi API me emër, ne mund të shohim një listë të çdo gjë të vetme në bibliotekë SDL. Pra, të gjitha këto funksione, regjistrimet, Strukturat, një sasi të çmendur të gjëra, sipas rendit alfabetik. Dhe në mënyrë të qartë, deri ju e dini se ju jeni duke bërë, kjo nuk do të jetë shumë e dobishme, cila është arsyeja pse ne bëjmë API sipas kategorisë. Pra, le të ketë filluar. Shpresojmë ju keni tashmë shkarkuar kodin e shpërndarjes. Dhe kështu që ajo që ju mund të bëni është, e drejtë këtu në aplikim CS50, thjesht të hapur një terminal. Këtu ne do të shkojmë. Kështu që unë tashmë e keni shkarkuar Kodi i shpërndarjes duke përdorur Zip metodë. Dhe unë e kam Unzipped atë. Kështu që këtu është në master SDL seminar. Kështu që unë jam duke shkuar për të shkuar në atë directory. Dhe ajo që ne shohim këtu është se ne kemi shtatë fotografi C. Dhe kjo do të kodit ne do të jetë në kërkim në sot. Ne kemi një Makefile. Dhe ne kemi një listë të burimeve, që thjesht ka një imazh që ju do të shohim mjaft shpejt. Pra, le të hapur këto fotografi duke përdorur G-Edit editor. Kështu që unë dua të hapur të gjitha dosjet që të fillojë me përshëndetje dhe do të përfundojë me .C. Këtu ne do të shkojmë. Pra, kjo është një dritare e vogël, kështu që ne jemi do të përpiqet të bëjë atë të mëdha. Jo, ajo u largua. Në rregull. Kështu që këtu është shumë i parë Dosja ne jemi duke shkuar për të parë. Ajo që quhet hello1_sdl.c. Dhe e gjithë kjo nuk është nisja e SDL bibliotekë kështu që ne mund të fillojnë duke e përdorur atë. Si do të ju e dini që do të vijnë me këtë kod veten? E pra, në qoftë se ne e shohim mbi në dokumentacionin dhe ne do të shkojmë në inicializimit dhe mbyllur seksion, ajo do të na tregojë të gjithë rreth asaj se si të nisja SDL. Pra, patjetër të lexoni këtë disa herë të tjera. Ajo do të ju them të gjithë për çfarë po ndodh këtu. Por thelbi kryesor i çështjes është se ne kemi nevojë për të thirrur këtë SDL funksion në It dhe të kalojë atë çfarë llojet e gjërave ne duam biblioteka të nisja. Pra, në rastin tonë, ne jemi vetëm duke shkuar të nisja video për tani, kështu që ne mund të fillojnë të shfaqur imazhe. Mbi këtu, ju mund të shihni nëse ne të klikoni mbi një SDL në të, ne mund të merrni edhe më shumë informacion, duke përfshirë edhe vlerën e kthimit. Kështu që ne shohim këtu se ajo ia kthen zero për sukses. Pra, në kodin tonë, ne jemi duke shkuar për të shohim nëse ajo nuk do të kthehet zero, dhe në qoftë se ajo nuk ka kthim zero, kështu që nuk ishte e suksesshme, atëherë ne do të thjesht të shtypura një gabim duke përdorur këtë funksion tjetër, SDL gabim get, e cila kthen një varg përshkruar gabim që ka ndodhur. Ne jemi duke shkuar për të shtypur atë gabim dhe pastaj ne jemi vetëm do të dalin nga programi me një kod gabimi. Pastaj një tjetër gjë që ne kemi nevojë për të bërë është, para se të daljeve të programit, në qoftë se ne me sukses initialized SDL, ne vetëm nevojë për të thirrur atë SDL lënë. Dhe kjo do të trajtojë pastrimin të gjitha burimeve të brendshme SDL për ne. Pra, dokumentacioni there-- përsëri, këtu ne jemi në inicializimit dhe mbyllur seksion e dokumentacionit. Ju vetëm mund të klikoni në Funksioni këtu, SDL lë, dhe ju mund të lexoni të gjitha në lidhje me atë si të mirë. Dhe shumë prej këtyre funksionit Faqet e dokumentacionit kanë shembull kodin, kështu që kjo është burim shumë i mirë. Patjetër të kalojnë disa kohë duke lexuar pjesë të këtë wiki në qoftë se ju jeni duke shkuar për të bërë kjo për një projekt. Në rregull. Pra, kjo është programi ynë i tërë. Çfarë mund të bëjmë tani is-- unë jam duke shkuar për të hapur Makefile këtu, kështu që unë jam duke shkuar për të marrë një të shohim se si punon kjo. Dhe kjo është një Makefile shumë e thjeshtë, të ngjashme me atë që ju keni parë më parë. Një nga dallimet kryesore është se, këtu, kjo do të futur rezultatin e running kjo komandë, të cilën ju keni tashmë instaluar në qoftë se ju keni instaluar SDL. Dhe kjo është një komandë që do të gjenerojë disa flamuj shtesë për përpiluesit. Përveç kësaj, ne jemi duke i dhënë atë të gjitha komandat e zakonshme, si dhe këto dy komandat. Kështu -lsdl2-image trajton lidh në bibliotekë SDL imazhit. Dhe -lm fakt trajton lidh në standarde bibliotekë C matematikë. Pra, ne nuk do të duhet ato për të gjitha dosjet tona C, por ne vetëm vënë ato në mënyrë që ne mund të përdorin të njëjtin Makefile për çdo gjë pa modifikime. Mbi këtu në burime, kjo është ajo ku ju do të vënë fotografi që keni qenë duke shkuar për të përpiluar për projektin tuaj. Por, pasi që çdo një prej C mia fotografi këtu ka një funksion kryesor, ajo do të marrë hutuar në qoftë se ne kemi vënë të gjithë në. Kështu që unë jam duke shkuar për të thënë vetëm: për tani, hello1_sdl.c, që është një nga ne vetëm e shikoi. Pra, nëse unë kthehem mbi këtu, unë mund të bëni. Dhe çfarë ajo e bëri është vetëm hartuar këtë dosje të parë. Dhe pastaj ne mund të shtypni ./game, sepse kjo është ekzekutueshme ajo prodhoi. Dhe të gjitha ai ishte shtypura initialization i suksesshëm. Pra, ne e bëmë diçka të drejtë. Por kjo ishte lloj i mërzitshëm, sepse ne nuk shohim një dritare, asgjë nuk ishte duke lëvizur rreth. Aq e madhe, ne u SDL nisur. Tani, le të lëvizin për në diçka pak më shumë interesante. Kështu që këtu kemi hello2_window.c, dhe kjo do të jetë një pak më të program kompleks C se initializes SDL ashtu si më parë, përveç tani ne jemi gjithashtu do të nisja SDL timer. Dhe kjo do të na le të hyni timer brendshëm dhe funksionet e përdorimit në lidhje me kohën. Dhe pastaj le të shohim këtu poshtë. Çfarë bëjmë ne është që ne kemi këtë akrep në një struct SDL dritare, e cila do të jetë krijuar nga kjo thirrje funksionit, SDL krijojë dritare. Tani, kjo merr një shumë e argumenteve, kështu që le të shkoni shikoni në dokumentacion. Pra, përsëri, unë jam duke shkuar për API sipas kategorisë, unë jam duke shkuar poshtë në video këtu, dhe i pari seksioni, duke shfaqur menaxhimin e dritareve. Pra, ky seksion ka një ton të gjëra në të, por në qoftë se ju shikoni nëpër këto funksione, ju do të shohim se ndoshta një ne dua quhet SDL krijojë dritare, e cila ndodh të jetë e drejtë në krye. Dhe kështu kjo është Dokumentacioni për këtë funksion. Dritarja do të ketë një titull, një x dhe pozita y në ekran, ajo do të ketë një gjerësi, një lartësi, dhe pastaj ajo do të marrë disa flamuj. Tani, ne fakt nuk e kujdesit për ndonjë nga këto flamuj të drejtë tani, por në qoftë se ju të kërkuar për të bërë diçka si të bëjë një dritare ekran të plotë, ju mund të marrë një vështrim në atë. Tani për tani, ne jemi vetëm duke shkuar për të përdorur këto vlera të veçanta, Dritare SDL plus përqëndruar për x dhe y, në mënyrë për të vetëm të krijojë dritare në qendër të ekran tonë. Pra, kjo është ajo që është duke bërë. Dhe nëse dritarja ndodh të jetë null, që do të thotë ka një gabim, pastaj përsëri ne jemi vetëm duke shkuar për të shtypura gabim duke përdorur gabim SDL merrni. Dhe pastaj sepse ne nisur SDL, tani ne kemi nevojë për të mbyllur atë. Pra, ne e quajmë SDL lë para kthyer një për kryesor. Pra, ne kemi këtë dritare të hapur me shpresë. Dhe çfarë ne jemi duke shkuar të bëni është që ne jemi duke shkuar për të thirrur për SDL 5000 milisekonda, që është e njëjtë me pesë sekonda. Dhe kur ne jemi bërë me atë, ajo do të shkatërrojë dritaren, pastruar bibliotekën SDL, dhe të dalë nga programi. Pra, le të shkojnë përpara dhe të japin atë një e shtënë. Kështu që tani në vend të ndryshimit Makefile çdo herë, Unë thjesht mund të bëjnë, dhe pastaj në rreshtin e komandave, thonë burimet e barabartë dhe pastaj file ne jemi hartimin. Pra, kjo është hello2_window.c. Fantastike. Nuk ka Erros. Tani, në qoftë se kemi drejtuar ekzekutueshme tonë, ne e shohim këtë dritare. Tani ka disa problemet me dritare. Ne mund të lëvizin atë rreth, por ajo ka kjo junk sfond në brendësi të saj. Pra, ne nuk kemi tërhequr asgjë, dhe kështu që është vetëm mbushur me mbeturina, të cilat është shumë e shumë ajo që ne presim. Për më tepër, ne nuk mund të mbyllni dritaren. Unë jam i shtypur këtë X në qoshe dhe asgjë nuk po ndodh. Pra, ne do të shohim se si për të rregulluar që në pak. Pra, le të rregulluar pjesën ku Dritarja është e mbushur me mbeturina të parë. Pra, nëse ne do të shkojmë mbi të hello3_image.c, çfarë ne mund të shohim është se ne kemi shtuar disa më shumë gjëra këtu. Ne kemi shtuar këtë kokë të re paraqesë për të marrë funksionet timer. Unë mendoj se ne e bëmë në të fundit një, shumë, dhe unë nuk e përmend atë. Por tani, sepse ne jemi punuar me imazhe, ne duhet të përfshijë SDL image header skedë si. Pra, kjo është e njëjta gjë si para, fillimin SDL këtu, njëjta marrëveshje me krijimin e dritareve. Ne e kemi parë se më parë tani. Tani ne kemi nevojë për të krijuar diçka të quajtur një renderer, cili lloj i shkon së bashku me dritare. Por kjo është një lloj i objekt abstrakt kjo është në krye të bërë të gjitha këto tërhequr operacionet në dritare. Dhe kjo në fakt i korrespondon në një program të ngarkuar në hardware graphics në tuaj kompjuteri ose telefoni juaj ose çfarëdo. Pra, flamujt që duan të kalojnë it-- dhe ju mund të shikoni në dokumentacionin për të marrë më shumë detaje here-- janë duke shkuar të SDL veti përshpejtohet, e cila do të thotë se do të jetë duke përdorur hardware graphics dhe jo emulated vetëm në software. Dhe ne jemi duke shkuar për të përdorur SDL renderim PRESENTVSYNC. VSync është një gjë që thjesht bën grafika tuaj duken më të mirë dhe parandalon kjo gjë quhet ekran terror, ku gjysma e një kornizë dhe gjysma e ardhshëm frame marrë tërhequr në të njëjtën kohë dhe ajo duket e tmerrshme. Por përsëri, ju mund të shkoni të lexoni në lidhje me atë në tuaj. Pra, ne kemi disa flamuj këtu. Dhe kështu që ne jemi vetëm duke shkuar për të thirrur kjo SDL funksion të krijojë vizatuesit. Ne jemi duke shkuar për të dhënë atë dritaren që të lidhen me atë renderim. Një negativ do të thotë që ne nuk e kujdesit çfarë grafikë shofer ne jemi duke shkuar për të përdorur. Kështu që duhet të pretty much gjithmonë të jetë një negativ, nëse nuk e di në lidhje me grafika shoferët. Dhe atëherë ne jemi vetëm duke shkuar për të kaluar atë flamuj tona. Pra, nëse kjo kthehet null, atëherë ne jemi duke shkuar për të shkruar gabim si zakonisht, por pastaj ne jemi gjithashtu do për të shkatërruar dritaren për të pastruar këto burime më parë thirrje SDL lë dhe kthimit. Tani, pjesa interesante këtu po ku ne ngarkesës imazhin tonë duke përdorur këtë IMG_load funksion. Kjo është e vetmja funksioni ne jemi duke shkuar për t'u përdorur nga biblioteka SDL imazhit. Është i vetmi që kemi nevojë. Kjo është një funksion që merr string që është rruga e çdo burim imazhit. Dhe kjo mund të jetë një .png, një GIF, bitmap, ndonjë nga këto gjëra. Dhe kjo është arsyeja pse ky funksion është aq e bukur. Ajo mund të trajtojë shumë e shumë çdo format. Ngarkesa atë në kujtesën dhe dyqane atë si një gjë e quajtur një sipërfaqe SDL. Tani një sipërfaqe SDL është thjesht një struct që përfaqëson të dhënat e imazheve në kujtesë. Kështu që ju mund të lexoni më shumë në lidhje me që në dokumentacionin e dy. Dhe nëse kjo gabime, atëherë ne jemi do të bëjë të gjithë gjë ku ne të shtypura gabimin, mbyllni tonë burimet, dhe pastaj mbaro programin. Tani gjëja interesante është, para se të ne mund të tërheqë këtë imazh në dritare, ne kemi nevojë që në fakt bëjnë atë një cilësi. Tani a korrespondon Texture të dhënave të imazhit ngarkuar në kujtesën Hardware grafik si e mori. Pra, një sipërfaqe është në kryesor kujtim, kujtim i rregullt që ne kemi qenë duke përdorur të gjitha semestër, dhe një cilësi është në këtë VRAM të veçantë kujtesës se kontrollet e kartës grafike. Pra, ne e quajmë këtë funksion SDL_CreateTextureFromSurface. Ne jepte vizatuesit tonë dhe sipërfaqe tonë. Dhe pastaj ne jemi në fakt bëhet me sipërfaqe, kështu që ne jemi vetëm duke shkuar për të liruar atë. Ne nuk kemi nevojë më atë. Dhe pastaj kështu që nëse kjo thirrje errored dhe u kthye null, atëherë ne jemi duke shkuar për të bërë të gjithë gabim gjë raportimi përsëri. Në rregull. Këtu, ne të merrni në disa Funksionet aktuale pasqyrim. Pra, duke e quajtur SDL_RenderClear dhe duke kaluar atë kutia e lidhur me dritare tonë thjesht e bën dritare shkoni zi. Pra, ajo heq se junk që pamë në dritare jonë para dhe e bën atë të zezë. Dhe pastaj ne jemi duke shkuar për të thirrur SDL_RenderCopy, t'i jepte vizatuesit tonë, cilësi tonë. Dhe ne do të flasim për atë që këto fusha janë në një grimë. Por kjo do të të marrë të dhënat e Texture dhe kopje atë mbi tonë dritare për të nxjerrë imazhin. Pra, pasi ne kemi bërë këtë kopje të dhënat mbi dritaren tonë, ne duhet të bëjmë këtë funksion shtesë quajtur SDL_RenderPresent. Dhe kjo është interesante sepse kjo merr në një temë të quajtur buffering dyfishtë. Pra buffering dyfishtë është një teknikë që bën grafika tuaja të duken shumë më mirë. Përsëri, ajo parandalon atë ekran marramendës Unë kam qenë duke folur për më herët, ku ju keni dy mbulesë. Ka një tampon prapa në kujtesë dhe një tampon front. Buffer para është fjalë për fjalë çfarë është në ekranin tuaj në këtë moment. Pra, ne bëjmë të gjitha këto barazim variacione, si SDL bëjnë kopje apo SDL_RenderClear në tampon mbrapa. Pra, ata modifikoj gjëra në tampon mbrapa. Këtu ne mund të tërhequr këtë katror të gjelbër për tampon mbrapa. Pra, atëherë kur ne jemi duke bërë duke bërë operacionet tona e bëjnë, të cilat mund të marrë një kohë të gjatë me të vërtetë kohë, ajo që ne jemi duke shkuar për të bërë është kaloni mbulesë. Pra, ajo fjalë për fjalë vetëm merr tampon para dhe tampon prapa dhe çelsin e tyre, kështu që që, menjëherë, në një operacion, në vend të ndoshta qindra apo mijëra, të gjithë e tona dhënë rishtas objektet janë në ekran. Dhe kjo parandalon gjëra si flladit ekran kur ne kemi tërhequr vetëm gjysma e objekteve tona për kuadër. Pra, kjo është arsyeja pse ne kemi nevojë për të thirrur SDL_RenderPresent, si edhe si SDL_RenderCopy. Përsëri, ne jemi vetëm duke shkuar të presë për pesë sekonda. Pastaj ne jemi duke shkuar për pastruar burimet tona. Ne kemi mjaft pak më shumë këtë kohë. Dhe atëherë ne jemi vetëm duke shkuar për të dalë nga programi. Pra, le ta bëjmë atë. Unë jam duke shkuar për të tipit të bërë, dhe pastaj burimet është e barabartë me hello-- kjo është tani 3image.c. Të gjithë të drejtë, se nuk ka hartuar gabime. Dhe ju mund të shihni këtu unë kam tani tërhequr imazhin tim, Përshëndetje, CS50! në dritaren tonë, i cili zhduket pas pesë sekonda. Tani, kjo ende ka probleme, e drejtë? Kjo nuk është një kërkesë e mirë, sepse kur unë të përpiqet për të mbyllur dritaren, asgjë nuk ndodh. Se x ende nuk është e përgjegjshme. Pra, le të marrin një vështrim në fotografinë pasardhësenext, hello4animation. Pra, kjo është skedari që do të prezantoj lëviz dhe lëvizja për imazhin tonë. Pra, ne jemi duke shkuar për të bërë të njëjta gjë si më parë, iniciojë SDL, të krijuar dritare, krijojnë vizatuesit, ngarkesës imazhin në kujtesës, të krijuar cilësi. Ne kemi parë të gjithë se më parë. Tani, kjo është e re. Ne do të kemi një strukturë të quajtur një rect SDL, e cila është vetëm një drejtkëndësh. Nëse shkojmë këtu, ne mund të bëni një kërkim për SDL rect, dhe ju mund të shihni se është një strukturë shumë e thjeshtë. Ajo ka një x, y për një pozita, dhe ajo ka një gjerësi dhe nje lartesi per madhësia e drejtkëndësh. Pra, ajo që ne jemi duke shkuar për të bërë është që ne jemi do të përcaktojë këtë SDL rect dest, për destinacion. Dhe ky është vendi në ekran ku ne jemi duke shkuar për të tërhequr imazhin tonë, të drejtë kështu në qoftë se ne jemi duke shkuar për jetë lëvizur imazhin përreth, atëherë destinacioni ku ne jemi duke shkuar për të nxjerrë imazhin duhet të lëvizin përreth. Pra, ne jemi duke shkuar për të thirrur këtë SDL_QueryTexture funksion. Dhe vini re unë jam duke kaluar adresën i dest.w, e cila është gjerësia, dhe dest.h, e cila është lartësia. Dhe kështu SDL_QueryTexture po shkon për të ruajtur në këto fusha gjerësi dhe lartësia e cilësi tonë. Dhe pastaj ajo që unë jam duke shkuar të bëni është unë jam duke shkuar për të vendosur dest.x të jetë dritare dest.w gjerësia minus, i cili është gjerësia e sprite, ndarë nga 2. Dhe kjo do të vendosur atë në mënyrë se imazhi është përqendruar në mënyrë të përkryer në dritaren tonë, të gjithë të drejtë? Deri tani unë kam një pozicion y. Dhe kjo do të të jetë një variabël që është ndryshuar, sepse ne jemi duke shkuar për jetë lëviz imazhin në drejtimin vertikal. Dhe tani ne kemi diçka quajtur një lak animacion. Pra, si funksionon animacion? E pra, syri i njeriut mund të zbulojë 12 dallueshme imazhet në çdo sekondë, në rregull? Pra, nëse ju flash 12 karta imazh në mua në një të dytë, unë pashë secili prej këtyre imazheve si vetë imazhin e saj të dallueshme individuale. Tani, në qoftë se ju flash më shumë imazhet në mua në një të dytë, atëherë syri im do të fillojë të turbullira ata së bashku dhe unë do ta perceptojnë atë si lëvizje, në vend të një imazhi të veçantë. Kështu, për shembull, filma dhe televizion, ata flash imazhe në ju 24 herë një të dytë. Pra, kjo është 24 korniza për sekondë. Ekranet kompjuterike, nga ana tjetër, shpesh janë në 60 korniza për sekondë. Kjo është shpejtësia e tyre refresh. Kjo është se si shpesh ata refresh fotografia në ekran. Pra, objektivi ynë do të jetë 60 korniza për sekondë për lojrat tona. Pra, le të shohim se në kodin. Pra, për çdo kuadër, ne jemi në fillim duke shkuar për të pastruar dritaren. Ky është modeli i përgjithshëm. Ju gjithmonë të pastruar dritare çdo kornizë, dhe pastaj të bëjë të gjitha e vizatimit tuaj operacionet, dhe pastaj në fund, mos RenderPresent për të treguar gjithçka në kuadër. Dhe pastaj ju do të jeni të kanë një prisni në fund të presë deri të ardhshëm kornizë duhet të fillojë. Pra, nëse unë isha duke bërë një shumë të llogaritje komplekse këtu që mori më shumë se 16 milisekonda, do të ishte e pamundur për mua për të marrë atë Frekuenca vizuale e ekranit prej 60 që Doja, sepse çdo kornizë është duke marrë shumë kohë për të llogaritur. Për më tepër, ne jemi të vërtetë duke bërë lloj i një sasi të papërfillshme të punës këtu, sepse ka vetëm një gjë që ne jemi tërhequr. Kështu që unë vetëm të presim 1/60 e një dytë, e cila është gjatësia e një kornizë në mes të kornizave. Kështu që unë jam lloj i pretenduar bërë E gjithë puna ime merr kohë zero. Por në një lojë të vërtetë, ju do të duhet të zbres sasinë e kohës që u desh për të bërë e gjithë kjo punë nga koha juaj e pushimit. Pra, gjithsesi, çfarë jam unë të vërtetë duke bërë në këtë lak? I qartë dritaren. I vendosur dest.y, e cila është një int tek pozicionin tim aktual y hidhet në një int. Tani, unë dua noton rezolutën për pozicionin tim y në lojë e mia, por pastaj në fakt nxjerrë atë mbi ekran, ajo ka nevojë për ints, sepse kjo është në njësitë e pixel, kështu që kjo është ajo që është hedhur për. Unë jam duke shkuar për të nxjerrë imazhin. Pra, kjo është drejtkëndësh burimi. Dhe kjo është drejtkëndësh destinacion. Kështu që unë kaloi null për drejtkëndësh burim të thonë se unë dua të tërheq tërë cilësi tim. Por në qoftë se keni pasur një shumë të textures në lojë tuaj dhe ata janë të gjithë në një hartë të madhe e cilësi që ishte ngarkuar në SDL si vetëm një cilësi, ju mund të përdorni një drejtkëndësh burim të marr një nga textures të vogla, një nga sprites më të vogla, nga kjo hartë të madhe cilësi. Pra, përsëri, unë jam duke kaluar bëjnë im i cilësi, dhe tani destinacioni. Kjo do të jetë ku në dritare ajo do të tërhiqen. Dhe pastaj, për shkak se unë jam animimin diçka, kam nevojë për lëvizje, Unë jam do të jetë përditësimin Pozicioni sprite në çdo kornizë. Pra, unë kam këtë të quajtur rrotull konstante shpejtuar në njësi të pixel për sekondë. Tani, çdo herë që ne të bëjmë një lëvizje, kornizë është vetëm 1/60 e një të dytë. Kështu që unë jam duke shkuar për të ndarë që nga 60. Dhe pastaj, le të shohim, unë jam zbritur që nga pozita e y. Pse jam unë zbritur? Ne do të merrni për të që në një të dytë. Deri atëherë unë pastruar burimet e mia dhe programin e gjatë. Pra, le të bëjë atë. Pra, le të shkojë në make SRCs = hello4 animation.c, të gjithë të drejtë? Lojë. Nuk ju shkoni. Pra, unë kam atë scrolling up dritare, e cila është shumë i zoti. Por prit, unë u zbritur nga pozicioni y cdo kohe. Çfarë po ndodh atje? E pra, ajo rezulton se në Shkollë, dhe në fakt, në shumicën e grafikë kompjuterike, origjina për sistemin koordinativ është i lartë e majtë të dritares. Pra x pozitiv drejtimi shkon nëpër dritaren tuaj të djathtë. Dhe drejtimi pozitiv y në fakt shkon poshtë. Pra, përsëri, në origjinën e krye të majtë dritares tuaj, drejtim pozitiv y është poshtë, dhe x pozitiv është në të djathtë. Pra, kur unë zbres nga pozicioni y, kjo është duke shkuar për të bërë atë të shkuar në negativ drejtimi y, e cila është deri dritares. Pra, kjo është ajo që po ndodh atje. Ftohtë. Le të shikojmë në dosjen e ardhshëm. Këtu është pjesë e tregojnë ku ne fund marrë atë X në këndin e dritares që është menduar për të mbyllur dritaren te punosh. Pra, çfarë po ndodh? Ne nisja SDL, të krijojë dritaren, krijuar vizatuesit, të ngarkuar imazhin, krijuar cilësi si kemi parë më parë. Ne kemi të njëjtin destinacion drejtkëndësh si më parë, e njëjta thirrje të query cilësi. Por këtë herë, ne jemi atëherë duke shkuar për të ndarë gjerësinë dhe lartësia e destinacionit tonë me 4. Ky vetëm ka efektin e shkallë imazhin tonë të poshtë kur ne të shfaqin atë në dritaren nga katër. Pra, kjo është goxha i zoti. Ne vetëm mund të shkallës vetëm si kjo. Ne jemi duke shkuar për të filluar sprite në qendër të ekranit. Dhe tani ne kemi x dhe y dhe shpejtësi ata të dy do të fillojë në zero. Kjo është dosja e gabuar. Më vjen keq. Pra, kjo është e gjitha e vërtetë. Kjo është e gjitha ende në këtë fotografi. Ne kemi ndarjen nga 4 dhe çdo gjë. Kështu që këtu kemi x dhe y tonë pozicion për qendrën e dritares. Dhe ne t'i jepte një shpejtësi fillestare i këtij shpejtësi konstante, e cila Unë besoj se është 300 pixel për sekondë. Tani, ne kemi këtë int mund të ashtu si edhe të jetë një boolean quajtur ngushtë kërkuar. Dhe në vend që të bëjnë një loop pafund në një orë me zile këtu, ne jemi duke shkuar për të gjallëruar si kohë sa afër nuk është kërkuar. Deri sa nuk kemi procesit ngjarje? E pra, SDL rradhë deri ngjarjet në një radhë literal prapa skenave. Dhe pastaj çdo kornizë, ne mund të dequeue ngjarjet nga ajo radhë duke përdorur kjo SDL_PullEvent thirrje. Dhe përsëri, patjetër të shkoni lexoni në lidhje me këtë në dokumentacionin. Ka shumë më tepër detaje dhe shumë më shumë funksione ju mund të përdorni me këtë. Ne të kalojë kjo adresa e këtë gjë, SDL_Event që ne kemi këtu në rafte. Tani, ajo që është një SDL_event? Sepse SDL, nëse ne shikojmë në të documentation-- le shih, API sipas kategorisë, të dhëna ngjarje, trajtimin ngjarje, ne mund të shikoni në numrin Ngjarjet e ndryshme këtu dhe ne mund të shohim se ka një ton e tërë e tyre. Pra, çfarë është kjo gjë SDL_Event? SDL_Event është një bashkim. Wow, çfarë është një bashkim? Ju keni ndoshta kurrë nuk dëgjuar se para. Dhe kjo është në rregull. Një bashkim është lloj i si një struct, me përjashtim të një struct ka një hapësirë ​​për të gjithë Fushat e saj dhe kujtesës, ndërsa një bashkim ka vetëm hapësirë ​​të mjaftueshme për të përshtaten më të madhe një nga fushat e saj, që do të thotë atë mund të ruajë vetëm një nga fushat e saj në një kohë, cili lloj i ka kuptim për ngjarjet, e drejtë? Ne mund të kemi një tastierë ngjarje apo një ngjarje dritare, por një ngjarje e vetme nuk mund të jetë si një Ngjarja tastierë dhe një ngjarje dritare, kështu ajo do të jetë i trashë që të ketë hapësirë ​​për dy nga ata brenda bashkimit tonë ngjarjes. Pra, nëse ju të kërkuar për krijoni bashkimit tuaj, ajo duket tamam njëjtë si krijimi i një e strukturës, përveç se ne përdorim fjalen e bashkimit vend fjalen struct. Dhe mbani mend, për të gjithë e gjëra brenda bashkimit tuaj, ndryshorja aktual që është bashkimi mund të ketë vetëm një prej këtyre vlerave ne nje kohe. Pra, si mund të them se çfarë lloj ngjarje ne vetëm popped off e kësaj radhë? E pra, ne mund ta provoni për event.type. Dhe nëse kjo është e barabartë të SDL_Quit, ne e dimë kjo është ngjarje që u gjenerua Kur ne goditi atë X në këndin e dritares. Dhe ne mund të vendosni afër kërkuar është e barabartë me 1. Pjesa tjetër është vetëm disa animacion që e keni parë më parë. Pra, le të shkojnë përpara dhe të bëjë kjo dhe të shohim se sa mirë punon. Kështu që unë jam duke shkuar për të tipit make dhe pastaj SRCs = hello5_events.c. Atje shkojmë. Lojërat. Tani, ne mund të shohim se ishte në të vërtetë zvogëluar nga katër. Dhe tani ajo është kërcim rreth. Unë kam disa zbulimin përplasje ndodh me anët e dritares që ne mund të marrë një sy në. Dhe çfarë ndodh kur të shkoj për të mbyllur atë? Ajo mbyllet. Fantastike. Ne kemi marrë atë ngjarje. Dhe ne trajtuar atë. Pra, le të shohim mbrapa në kodin. Pra, si nuk kam marrë atë kërcim rreth si kjo? Mos harroni kam vendosur të dy x dhe y fillimisht me shpejtësi. Dhe shpejtësia është një pozitiv konstante, kështu që është do të merrni atë duke filluar nga duke shkuar poshtë dhe në të djathtë. Tani, çdo kornizë, përveç trajtimit ndonjë ngjarje që mund të ketë ndodhur, Unë jam duke shkuar për të zbuluar nëse sprite tim është duke u përpjekur për të shkuar nga dritarja. Pra, ne mund të bëjmë atë nga vetëm duke kontrolluar x_pos me 0, y_pos 0, dhe pastaj edhe x_pos dhe y_pos me Gjerësia dhe lartësia dritare dritare. Njoftim unë kam zbritur gjerësia e sprite. Dhe kjo është për shkak se në qoftë se unë nuk e bëri zbres gjerësia e sprite, kjo do të shikoni vetëm që origjina e sprite nuk ka shkuar jashtë dritares. Por ne duam të tërë Gjerësia e sprite të jetë gjithmonë brenda dritares dhe tërë lartësia e sprite të jetë gjithmonë brenda dritares. Pra, kjo është ajo që zbritja është për. Një shumë e gjeometrisë këtu mund të jetë e dobishme për të nxjerrë atë jashtë në letër me koordinuar sistem për të parë se çfarë po ndodh. Pra, nëse unë do të përplasen, unë vetëm thjesht rivendosur pozitën në mënyrë që ajo nuk do nga të ekranit. Dhe unë jam duke shkuar për të, në qoftë se ajo kthehet në një prej anësore, Unë do të të mohoj x shpejtësia mënyrë që ajo fillon kërcim në drejtimin tjetër. Dhe në mënyrë të ngjashme, në qoftë se ajo godet krye ose në fund, Unë jam duke shkuar për të vendosur y shpejtësinë barabartë me shpejtesi negativ y, në mënyrë që ajo do të kërcej prapa. Pra, kjo është vetëm se si ne e mori atë këtu. Dhe pozicionet përditësimin ashtu si kemi parë më parë, ndani me 60, sepse ne jemi vetëm trajtimin 1/60 e një të dytë. Dhe pastaj pasqyrim, saktësisht e njëjtë si më parë. Dhe kështu kjo është gjithçka që po ndodhte në këtë dosje. Pra, kjo është se si ne bëjmë ngjarje. Gjëja kryesore për të marrë larg këtu është ky funksion SDL_PullEvent. Dhe ju duhet patjetër të lexoni Dokumentacioni më shumë për SDL_Event bashkimi, sepse ky lloj të dhënave është shumë, shumë e rëndësishme, sepse ne e përdorin atë për të gjitha llojet e ngjarjeve. Për shembull, ne e përdorin atë për tastierën ngjarje, e cila është ajo që kjo skedë është për. Pra, çfarë kemi? Ne kemi të njëjtën gjë si më parë, nisja SDL, të krijojë një dritare, të krijojë një vizatuesit, ngarkesës imazhin në kujtesë, të krijuar cilësi. Përsëri, ne jemi duke shkuar për kanë këtë drejtkëndësh dest, ne jemi duke shkuar për të shkallës imazhin nga katër, e bëjnë atë një pak më të vogël. Tani, ne jemi duke shkuar për të filluar sprite në qendër të ekranit. Por këtë herë, ne jemi duke shkuar për të vendosur x fillestare dhe shpejtësitë y në zero, sepse tastierës është duke shkuar për të kontrolluar ato. Dhe për më tepër, ne jemi duke shkuar për mbajnë gjurmët e këtyre variablave lart, poshtë, majtas, dhe të djathtë. Dhe kjo do të mbajë gjurmët e nëse ne kemi presion butonat e tastierës që korrespondojnë me lart, poshtë, majtas, dhe e drejtë. Tani, kjo është lloj i teket sepse ne mund të përdorim W, A, S, D këtu, ose arrow keys aktuale. Ne do të shohim se në vetëm një të dytë. Pra, ne jemi duke shkuar për të proceduar Ngjarja ashtu si më parë. Ne tërheq ngjarjen. Por tani ne jemi duke shkuar për kaloni në llojin e Ngjarjes. Në qoftë se kjo është SDL_Quit, ne jemi duke shkuar për të vendosur afër kërkohet për një, ashtu si më parë. Që merret me x në qoshe e dritares, në mënyrë që dritarja jonë në fakt mbyllet. Përndryshe, në qoftë se ne kemi marrë një çelës SDL poshtë Ngjarja, që do të thotë ne presion një çelës, atëherë ajo që ne jemi duke shkuar për të bërë është që ne jemi duke shkuar për të kaluar në këtë gjë këtu, cila means-- kështu event.key do të thotë që trajtojnë bashkimin tonë ngjarje, shkoni dhe të merrni kyç Struktura ngjarje në të. Pra, rezulton se ky bashkim është një strukturë kyç ngjarje. Dhe pastaj të shkojnë në kyç Struktura ngjarjeje fushën e tij quajtur keysym dhe pastaj scancode. Dhe përsëri, lexoni patjetër dokumentacioni në lidhje me këtë. Inputet fjalen mjaft interesante. Ju mund të merrni scan kodet ose kode kryesore. Dhe kjo është pak delikate, por dokumentacioni është mjaft i mirë. Pra, nëse ne shohim scan kodin për Shtypi ynë kryesor qenit W ose lart, ne jemi duke shkuar për të ngritur e barabartë me 1. Dhe pastaj ne pushim nga se kaloni. Në qoftë se kjo është një ose të majtë, ne kemi vendosur lënë për 1, et cetera, e të tjera, për poshtë dhe e drejtë. Tani, në këtë kaloni jashtme, në qoftë se ne shohim një çelës lart ngjarje, kjo do të thotë që ne kemi lëshuar një çelës dhe ne jemi më të ngutshme atë. Kështu që unë jam duke shkuar për të thënë lart e barabartë me 0, majtë është e barabartë me 0, poshtë e barabartë me 0, e drejtë është e barabartë me 0, e të tjera. Dhe vini re që kemi në secilën nga këto dy raste të vënë të drejtë tjetër për njëri-tjetrin me asnjë kod të veçantë për rastin e parë, e cila do të thotë se nëse kjo është një S ose poshtë një e drejtë këtu, ajo do të ekzekutojë këtë kod. Pra, kjo është mjaft i dobishëm. Ajo parandalon na që ka të bëjë më shumë kushtet dhe IFS dhe gjëra si kjo. Pra, ne jemi duke shkuar për të përcaktojë shpejtësinë. Ne kemi vendosur shpejtësinë në 0. Pastaj nëse up është i shtypur dhe jo poshtë, atëherë ne vendosur y shpejtësinë me shpejtësi negative. Mbani mend negativ, sepse drejtim negativ y është lart. Dhe drejtimi pozitiv y është poshtë. Nëse poshtë shtypet dhe jo lart, atëherë ne jemi duke shkuar për të vendosur atë në shpejtësi pozitiv, që do të thotë duke shkuar poshtë në ekran. E njëjta gjë me të majtë dhe të djathtë. Dhe pastaj ne jemi duke shkuar për të rinovuar pozicionet ashtu si më parë. Ne jemi duke shkuar për të bërë përplasjen zbulimin me mëdhenj, por ne nuk jemi duke shkuar për të rivendosur Shpejtësia, sepse shpejtësia është vetëm të kontrolluara nga tastierë. Por ne jemi duke shkuar për të rivendosur pozita për ta mbajtur atë në dritare. Dhe ne jemi duke shkuar për të vendosur pozicionet në struct dhe pastaj të bëjë të gjitha bërë sende nga më parë. Pra, le të shohim se çfarë ajo bën. Pra, ti SRCS-- le të shohim, kjo është hello6_keyboard.c. Oh, jo. Pra, kemi marrë disa paralajmërime këtu. Dhe kjo është thjesht duke thënë se ne nuk bëmë kontrolloni për çdo lloj të vetëm të mundshëm e ngjarjes. Kjo është në rregull, sepse ka 236 prej tyre apo më shumë. Kështu që unë jam duke shkuar për të injorojë këto paralajmërime. Është hartuar ende gjobë. Kështu që unë jam duke shkuar për të luajtur lojë. Kjo nuk është duke lëvizur. Por tani, kur unë pure në tastierën e mia, Unë mund të bëjë disa lëvizje WASD këtu, I përdorni arrow çelësat e mia si. Dhe vini re, edhe pse unë jam i ngutshme të drejtë tani, kjo nuk do të dalë nga dritarja, sepse unë rivendosur atë në çdo frame. Pra, kjo është goxha i zoti. Ju mund të imagjinoni të lëvizin përreth Mario me disa arrow keys ose diçka të tillë. Dhe po, X funksionon. Dosja Pra finale ne jemi duke shkuar për të parë, hellow7_mouse. Kjo është në lidhje me marrjen dhëna miut. Pra, në këtë, ne importit header matematikë, sepse ne do të kemi pak e matematikë këtu. Njëjtë të vjetër, e njëjtë të vjetër sende, destinacion, e njëjtë të vjetër, shihet se para. E pra, kjo është interesante. Pra, ne jemi kthyer në vetëm kontrolluar për SDL lë ngjarje. Pse eshte ajo? Kështu që ju mund të merrni të dhëna miut nga ngjarjet. Ashtu si kur miu lëvizur, që ju të merrni një ngjarje për këtë. Kur një butonin e miut shtypet, ju mund të merrni një ngjarje për këtë. Por ka një tjetër, pak më të thjeshtë ndoshta, API për të marrë të dhëna të miut. Dhe kjo është thjesht SDL shtet miut të merrni. Kështu që unë kam një int për x dhe y për pozicionin e kursorit. Unë të kalojë atë të SDL_GetMouseState, e cila përcakton këto. Dhe kjo është qëndrimi në sistemit koordinativ e dritares. Pra, nëse masa është në të majtë të lartë e dritares, që do të 0, 0. Tani, ajo që unë jam duke shkuar për të bërë është që unë jam duke shkuar për të bërë një pak matematikë vektoriale. Vë bast keni menduar ju nuk do të shihni se në CS50, por këtu ajo është. Unë jam duke shkuar për të bërë disa vektor matematikë për të marrë vektorin nga imazhi të kursorit. Dhe kështu që pse nuk kam kjo zbritje këtu? E pra, në qoftë se unë vetëm përdorur Dest .-- kështu Unë kam nevojë për të përkthyer miut x dhe y nga gjysma e gjerësisë dhe lartësia e imazhit, sepse unë dua Qendrën e Imazhi që do të shkojnë në drejtim të miut, jo origjina e imazhit. Pra, kjo është vetëm për t'u siguruar që unë jam duke folur për qendrën e imazhit këtu. Pastaj ne të merrni delta X dhe Y, i cili është diferenca nga objektivi në pozicionin aktual të imazhit. Dhe pastaj ne mund të merrni distancohen këtu, e cila do të jetë Pythagorean Teorema, rrënja katrore e x herë x plus herë y y. Tani për të parandaluar jam nervoz, dhe unë mund të tregojnë ju çfarë kjo e bën në qoftë se unë nuk e bëj këtë, nëse distanca midis kursorit dhe qendra imazhi është më pak se pesë, Unë jam vetëm nuk do të lëvizë imazhin. Përndryshe, ne kemi vendosur shpejtësinë. Dhe ne kemi vendosur atë në mënyrë që shpejtësia do të jetë gjithmonë konstante. Dhe rezultati neto i të gjithë kjo math është se imazhi do të lëvizë në drejtim të kursorit. Tani, del se SDL_GetMouseState, përveç në vendosjen e x dhe y argumente këtu, ajo gjithashtu kthen një int që korrespondon në gjendjen e butonat e miut. Pra, ne nuk mund të lexojmë se drejtpërdrejt, por ne mund të përdorin këto macros, një të vetme operatori bitwise, jo se e frikshme, vetëm një bitwise dhe. Pra, ne themi butona, e cila është rezultat e SDL_GetMouseState sonë, në qoftë se dhe bitwise dhe, kjo makro këtu, SDL_BUTTON_LEFT. Pra, kjo do të thjesht të zgjidhur në bitmap që i korrespondon në butonin e majtë të miut duke u shtypur. Dhe kështu që nëse bitwise dhe ndodh dhe kjo është jo zero, që do të thotë butonin e majtë ishte shtypur, atëherë ne jemi të vërtetë do të të mohoj dy x dhe y shpejtesi, e cila vetëm do të bëjë Runaway imazhit. Pozicionet update. Goditjet zbulimet, parë atë të gjithë më parë, bërë, të gjithë të drejtë. Le ta bëjmë atë. Kështu që ju mori bëni SRCs = hello7_mouse.c. I madh. Nuk ka gabime. Dhe lojë. Kështu që këtu unë kam miun e mia. Dhe imazhi është me të vërtetë përpjekje për të kapur miun tim. Tani, në një lojë që ju bëni, ndoshta kjo është si një përpjekje për të kapur të armikut karakterin tuaj pak ose çfarëdo. Por këtu ne kemi Imazhi ndiqte miun. Dhe kur unë klikoni, miu fillon përpjekje për të kapur imazhin dhe imazhi është duke larg nga miut. Pra, kjo është pretty cool. Dhe vini re përsëri, nuk ka ende zbulimin përplasje këtu. Kështu që është pak i fundit DEMO kam ngritur këtu. Dhe le të marrin një vështrim në një gjë më shumë. Pra, përsëri këtu, kam përmendur këtë jam nervoz. Në rregull. Pra, nëse distanca është më pak se pesë pixel, Unë kam qenë vendosjen x dhe y shpejtësinë në zero. Çfarë ndodh në qoftë se ne të shpëtoj nga kjo? Kështu që unë jam duke shkuar për të vetëm të bëjë këtë. Ju lutemi justifikim këtë stil të tmerrshme, por ne komentoi nga kodin e saktë. Kështu që unë jam duke shkuar për të shpëtuar atë dhe të bëjë të njëjtë komandë nga para për të bërë atë. Në rregull. Dhe tani çfarë ndodh? Të mirë. Ne jemi ende duke ndjekur miu ashtu si më parë, por kur ne të merrni për të miut, ne kemi marrë këtë jam nervoz bruto. Çfarë po ndodh atje? E pra, në vektor tonë matematikë, mos harroni ishim duke marrë distancën midis kursorin dhe qendra e imazhit? E pra, si ai që i afrohet 0, ne fillim duke marrë si këtë lloj të sjelljes çmendur ku imazhi është lloj i si lekundese rreth të kursorit. Dhe kjo është krijuar këtë jam nervoz. Dhe kjo është me të vërtetë e shëmtuar. Dhe ju ndoshta nuk e bëni dua lojërat tuaja duke bërë atë, përveç nëse kjo është një lloj i efekt të veçantë. Pra, kjo është arsyeja pse ne kemi vetëm këtë arbitrare prerë nga pesë pixels, ku ne themi në qoftë se është brenda pesë pixels, ne jemi të mirë. Ne nuk kemi nevojë për të lëvizur imazhin më. Pra, kjo është ajo që po ndodh atje. Pra, kjo është shumë e shumë ajo. Ti tani e di se si për të krijuar një dritare, të ngarkuar një imazh, të nxjerrë një imazh nga dritarja marrë input tastierë, të marrë të dhëna miut, ka një bandë e të tjera të dhëna që ju nuk do të e di se si të merrni në qoftë se ju vetëm të kaloni një Pak minuta kërkuar në dokumentacion. Pra, ju në fakt kanë mjaft disa mjete në dispozicion tani për të shkruar një lojë të drejta të plota. Tani, çdo lojë ka nevojë për disa audio, por dokumentacioni audio është gjithashtu shumë e mirë. Dhe unë jam i gatshëm të bast se nëse ju kuptoni të gjitha gjërat kemi biseduar për sot me imazhet, dhe sipërfaqet, dritaret, dhe çdo gjë, pastaj figuring out audio API nuk është do të jetë edhe aq keq. Kështu që unë pres që të shohim Çfarë keni krijuar me SDL.