THOMAS LIVELY: Bütün hüququ. Hər kəsə salam. Mən Thomas Lively edirəm. Bu seminar olacaq SDL istifadə C 2D oyun yazmaq. Mən sizə bütün istəyirik bilirik Bəli, mən, həqiqətən, xahiş oyun və oyun etmək istəyirəm, lakin bu SDL business nədir? Belə ki, SDL C kitabxanadır. Bu sadə dayanır DirectMedia Layer. Və bu, bir cross platform var oyun inkişaf kitabxana. Bu, Windows, Mac üzərində işləyir Linux, hətta iOS və Android. Bu kimi şeylər emal audio sistemi giriş kompüter, klaviatura, və siçan, joysticks, onlar əlavə edirsinizsə. Mobil, hətta edə bilərsiniz giriş və ki, bütün toxunmaq. Və əlbəttə ki, bu, qrafik emal, ekran şeyi rəsm. Belə ki, çox geniş olsa da, istifadə Siz əvvəl eşitməmişik ola bilər. Bu, misal üçün, daxil olan, Valve mənbə mühərrik, kimi səlahiyyətləri oyunlar Portal və Team Fortress 2. Bu, çox sayda da var çıxmaq indie oyun, Mən sizə nə görmək üçün bir heyecan alıram bütün bu qəbul olunacaq. seminar qol almaq üçün SDL inkişaf olmaq üçün müəyyən. Biz necə öyrənmək olacaq bir oyun pəncərə yaratmaq. Biz sprites yaratmaq olacaq olan oyun şəkillər ki, ətrafında hərəkət edə bilər. Biz necə öyrənmək olacaq və sprites diri, belə onların ətrafında hərəkət etmək Onlara vaxt ərzində dəyişir. Və biz necə olacaq Klaviatura və siçan tutmaq üçün kompüter girdi. Biz söhbət olmaz bu gün 3D qrafika, ki, bir çox mürəkkəb, çünki biz vaxt yoxdur mövzu. Biz öyrənmək deyil necə Bizim oyun audio oynamaq. Və biz tikinti olmayacaq Linux lakin bir şey üçün. İndi caveats ki var, Ümid edirəm ki, ilin sonuna seminar tərəfindən, Siz rahat olacaq SDL sənədləşdirmə, belə ki, anlamaq getmək mümkün olacaq necə özünüz üçün audio oynamaq. Həmçinin işləməlidir Mac və ya PC üçün bina tam Linux üçün bina eyni, lakin quraşdırma olacaq bir az fərqli ola bilər. Belə ki, anlamaq lazımdır bu şeyə həyata necə Bugünkü seminarın sonunda. Qurmaq üçün, belə ki, biz gedirik virtual maşın istifadə etmək. Biz çünki CS50 IDE istifadə ki, biz yalnız C. yazılı olacaq Amma IDE biz bir browser deyil, çünki Yeni Windows və ya ekran yarada bilməz bu qrafika. Beləliklə, biz bir virtual maşın lazımdır. Belə ki, təlimatlara əməl edin burada manual.CS50.net/appliance/15 at rəsmi CS50 cihaz yüklemek üçün, olan sadəcə bir Linux virtual deyil maşın. Və sonra bir dəfə bütün gündəmə müəyyən Çünki bir az müddət bilər Siz olacaq bir çox böyük DOWNLOAD VM sudo apt-get yeniləmə run. Və həqiqətən gedir bütün proqram yeniləmə Sizin virtual maşın paketləri. Bundan sonra, çalıştırmak olacaq sudo, yüklemek libsdl2-2.0-0 apt-get libsdl2-DBG, libsdl2-dev və əlavə libsdl2-image-2.0-0, libsdl2-image-DBG, və libsdl2-image-dev. Belə ki, nə edir? Bu sadəcə debug quraşdırır məlumat, sənədləşdirmə, mövzular, və iki kitabxanalar üçün binaries. SDL 2.0, köhnə Daimi, və digər kitabxana adlı SDL Image olan biz istifadə olacaq Bizim oyun resim faylları yüklemek üçün. Siz də bir dəfə belə ki, xahiş yalnız zaman ki, yalnız yes yazın Enter bu paketləri yüklemek üçün, və sonra siz getmək üçün yaxşı olmalıdır. Belə ki, distribution kodu almaq üçün əziz oh can--, bu updated deyil. Sizin halda GitHub account-- var Bir GitHub hesabınız varsa, Bu git edə bilərsiniz repo üçün klon komanda ki, git download bu bütün kodu ilə repo, ki, kodu olacaq. Bir GitHub yoxsa hesabı, siz nə etmək lazımdır növü wgithttps: //github.com/tlively/sdl seminar-- və burada different-- var /archive/master.zip. Belə ki, yenə dəqiq eyni URL, bu olacaq istisna olmaqla, tlively / SDL_seminar / master.zip və ki, download wgit istifadə edirik. Və sonra yalnız bilərsiniz ki, arxiv açın və sonra lazımdır bütün mənbə kodu. Bu barədə So sorry. Və sonra code də ev sahibliyi edəcək Bir neçə CS50 seminarın web səhifə gün. Oldu. Belə ki, necə biz başlamaq edirsiniz Öz oyunumuzu yazılı? Bəli, ilk şey Biz nə istəyirik olacaq SDL sənədlərin baxmaq edir. Belə ki, burada VM var. Və burada web page var. Mən libsdl.org yaşamaq sürülmək etdik. Mən burada gedirəm artıq getmək sidebar, sənədlərin altında, və wiki basın. Bu wiki mənə gətirəcək SDL üçün sənədlərin ən var. Burada sidebar ərzində biz istəyirik Kateqoriya API basın gedir, çünki vermək niyyətindədir Bizə gözəl bir qəti baxış SDL üçün bütün API. Belə ki, məsələn, biz Əsas başlatma və aşağı bütün növ bağlamaq SDL istifadə üçün inzibati heyəti, sonra biz bölmə üçün ekran şeyi göstərilir. Bu video var. Input hadisələr ki, əldə var klaviatura giriş, siçan daxil almaq, və joystick, hətta var. Şeylər üçün güc rəy var Oyun nəzarətçiləri kimi olan biz haqqında danışmaq fikrində deyilik. Və burada audio var. Və sonra digər bir dəstə var SDL sizin üçün nə edə stuff. Ancaq bu gün biz diqqət olacaq burada başlatma haqqında, video images gösteren ikibölməli, və giriş hadisələr baxılması. Belə ki, bu əsas var sənədlərin bölmələr Siz narahat etmək lazımdır ki,. Yalnız əyləncə üçün, biz artıq getmək əgər burada və adı ilə API basın hər bir siyahısını görə bilərsiniz SDL kitabxana bir şey. Belə ki, bütün bu funksiyaları, siyahıyaalmalarının, strukturları, məhsullarının bir crazy məbləği, əlifba sırası. Və aydın qədər Siz yapýyorsun bilirik, Bu, çox faydalı ola niyyətində deyil Hansı Kateqoriya API niyə edir. Belə ki, başlamaq bildirin. İnşallah siz artıq var paylanması kodu nazil. Və belə ki, nə edə bilər, sağ deyil burada CS50 cihaz, sadəcə bir terminal açmaq. Burada getmək. Mən artıq nazil etdik Zip istifadə distribution kodu üsulu. Və mən unzipped etdik. Belə ki, burada SDL seminar master edir. Mən ki, dizine getmək üçün gedirəm. Və biz burada bax ki, biz yeddi C faylları var. Və bu kodu gedir Bu gün baxaraq olacaq. Biz Makefile var. Və biz bir resursları kataloq var, olan sadəcə bir şəkil var ki, kifayət qədər tez görən olacaq. Belə ki, bu faylları açmaq bildirin G-Edit redaktoru istifadə edərək. Mən bütün faylları açmaq istəyirəm ki, salam ilə başlamaq və c ilə başa. Burada getmək. Belə ki, kiçik bir pəncərə var, belə ki, biz istəyirik böyük ki, etmək üçün cəhd olacaq. Xeyr, bu, getdi. Oldu. Belə ki, burada ilk var Fayl biz baxmaq olacaq. Bu hello1_sdl.c deyirlər. Və bütün bu yoxdur SDL başlamaq deyil kitabxana biz istifadə edə bilərsiniz ki. Gəlmək üçün bilmək olardı bu kodu özünüz ilə? Bəli, biz artıq baxsaq sənədlərin və biz başlatma getmək və bölmə bağlamaq Bu bizə demək olacaq SDL başlamaq üçün necə. Belə ki, mütləq bu, bəzi digər dəfə oxumaq. Bu bütün demək olacaq burada neler haqqında. Lakin məsələnin əsas mahiyyəti ki, Biz ona bu funksiya SDL zəng etmək lazımdır və onu keçmək nə cür şeylər biz kitabxana başlamaq istəyirəm. Bizim halda, belə ki, biz yalnız olacaq İndi video başlamaq üçün, ki, biz şəkillər gösteren başlaya bilərsiniz. Burada, əgər görə bilərsiniz Biz bunu bir SDL basın, biz daha çox məlumat əldə edə bilərsiniz, qaytarılması dəyəri, o cümlədən. Beləliklə, biz burada ki, görəcəksiniz qayıtmış uğur sıfır. Bizim kodu Belə ki, biz olacaq sıfır qayıtmaq deyil görmek, və geri deyil, əgər sıfır, belə ki, uğurlu deyil sonra biz sadəcə çap olacaq bu digər funksiyası istifadə edərək bir səhv, Bir simli qaytarır SDL get səhv, meydana gələn səhv izah. Biz bu çap olacaq səhv və biz yalnız istəyirik proqram çıxmaq gedir bir səhv kodu ilə. Biz lazım sonra başqa bir şey Bunu, proqram çıxışları əvvəl, biz uğurla SDL başlatılmış əgər, biz yalnız SDL çıxmaq zəng etmək lazımdır. Və təmizlənməsi idarə etmək olacaq bizim üçün SDL daxili resursların bütün. Belə ki, sənədləşdirmə, yenə orada burada başlatma var və bölmə bağlamaq sənədlərin. Siz yalnız basın Burada funksiyası, SDL çıxmaq, və siz də bu barədə oxuya bilərsiniz. Və bu funksiya bir çox sənədlər pages Məsələn kodu var, belə ki, bu çox yaxşı kaynaktır. Mütləq bəzi vaxt sərf Bu wiki hissələri oxu Siz nə etmək olacaq əgər bir layihə üçün bu. Oldu. Belə ki, bizim bütün proqram. Biz indi mən is-- nə edə bilər burada Makefile açacaq, mən bir almaq üçün gedirəm ki, necə oldu. Və bu, çox sadə makefile var Siz əvvəl gördüm nə oxşar. Əsas fərqlər biri ki, burada, bu çalışan nəticə daxil gedir Əgər siz artıq var bu komanda, Siz SDL yükledikten əgər quraşdırılıb. Bu bir komanda deyil ki, yaratmaq olacaq compiler üçün bəzi əlavə bayraqları. Bundan əlavə, biz ötürür bütün adi əmrləri, eləcə də Bu iki əmrləri. Belə ki, -lsdl2-image tutacaqları SDL image kitabxana birləşdirən. Və lm həqiqətən birləşdirən emal standart C math kitabxana. Beləliklə, biz lazım niyyətində deyil Bizim C faylları bütün o, biz ki, lakin biz yalnız onları qoymaq Hər şey üçün eyni Makefile istifadə dəyişiklik olmadan. Burada mənbələrdə, Bu harada istədiyiniz deyil Siz gedirdi faylları qoymaq Sizin layihə üçün tərtib etmək. Amma mənim C hər bir ildən burada faylları əsas funksiyası var Bu qarışıq almaq olacaq biz onları qoymaq əgər. Mən yalnız demək gedirəm indi üçün, hello1_sdl.c, olan biz yalnız baxdı biridir. Mən geri artıq getmək əgər Belə ki, Burada mən edə bilərsiniz. Və nə bunu yalnız deyil ilk fayl tərtib. Və sonra biz, ./game yazın Bu istehsal çalıştırılabilir var. Və bunu bütün çap oldu başlatma müvəffəqiyyətli. Beləliklə, biz doğru bir şey etdi. Amma bu cür darıxdırıcı idi biz bir pəncərə görmədim, çünki, heç bir şey ətrafında hərəkət. Belə ki, böyük, biz SDL başlatılmış var. İndi bir şey üçün hərəkət edək bir az daha maraqlı. Belə ki, burada biz hello2_window.c var və Bu bir az daha olacaq Kompleks C proqramı SDL əvvəl kimi initializes, indi başqa biz də olacaq SDL timer başlamaq üçün. Bu bizə bildirin gedir daxili timer daxil və istifadə funksiyaları vaxt bağlı. Və sonra burada baxaq. Biz nə biz bu göstərici var bir SDL pəncərə struct, olan Bu zəng yaratdığı olacaq funksiyası, SDL pəncərə yaradır. İndi bu dəlilləri bir çox edir, belə ki, sənədləşdirmə baxmaq gedək. Belə ki, yenə, mən gedirəm Kateqoriya API, mən ilk burada video enən, və ikibölməli, pəncərə idarə göstərilir. Belə ki, bu bölmə var bu məhsullarının bir ton, ancaq baxmaq əgər Bu funksiyaları, will yəqin ki, biz çox SDL pəncərə yaratmaq adlanır istəyirəm, olan üst sağ olmaq olur. Və bu deyil bu funksiya üçün sənədlər. pəncərə bir adı var olacaq, ekranda bir x və y mövqeyi, Bu eni var olacaq, hündürlüyü, və sonra bəzi bayraqları etmək olacaq. İndi biz, həqiqətən, qayğı yoxdur İndi bu bayraqları hər hansı ancaq bir şey etmək istəyirdi kimi tam ekran pəncərə etmək, ki, bir göz bilər. İndi, biz yalnız olacaq bu xüsusi sərvətlərdən istifadə etmək, SDL pəncərə plus mərkəzi məqsədilə x və y yalnız pəncərə yaratmaq Bizim ekranın mərkəzində. Belə ki, bunu nə var. Və pəncərə olmaq olur null, bir səhv var, yəni, sonra yenidən biz yalnız olacaq SDL get səhv istifadə səhv çap. Və sonra biz başlatılmış çünki SDL, biz indi bağlamaq lazımdır. Beləliklə, biz SDL əvvəl çıxmaq zəng əsas üçün bir qaytarılması. Beləliklə, biz bu pəncərə inşallah açmaq. Və biz nə olacaq gedirik nə etmək 5000 ms üçün SDL zəng etmək üçün, olan beş saniyə kimi eyni. Və biz ki Bitirdiğinizde, Bu pəncərə məhv olacaq, , SDL kitabxana təmizləmək və proqram çıxmaq. Belə ki, irəli getmək və bir shot vermək bildirin. Belə ki, indi əvəzinə dəyişən makefile hər zaman, Mən sadəcə etmək və edə bilərsiniz sonra command line, mənbələri bərabərdir və sonra demək biz tərtib edirik file. Belə ki, hello2_window.c var. Fantastic. No Erros. İndi bizim yürütülebilir run əgər, bu pəncərə görəcəksiniz. İndi bir neçə var pəncərə ilə problemləri. Biz bunu ətrafında hərəkət edə bilər, lakin o, var Bunun içərisində bu background köhnə əşyalar. Beləliklə, biz tərtib deyil bir şey, və bu zibil, yalnız tam olan olduqca çox biz gözləmək nə. Bundan əlavə, biz pəncərə bağlaya bilməz. Mən bu X basaraq alıram künc və heç bir şey baş. Beləliklə, biz düzeltmek üçün necə görürsünüz bir az edir. Belə ki, iştirak düzeltmek bildirin harada pəncərə ilk zibil doludur. Beləliklə, biz hello3_image.c üzərində getmək əgər, nə Biz bir neçə əlavə etdik olduğunu görə bilərsiniz Burada daha çox şeylər. Biz bu yeni mövzu əlavə etdik timer funksiyaları almaq üçün fayl. Düşünürəm ki, biz son etdi tapmaq bir çox və mən qeyd etməyib. Amma indi biz istəyirik, çünki şəkillər ilə iş, biz SDL daxil etmək lazımdır image header file həmçinin. Belə ki, eyni şey kimi deyil əvvəl, burada SDL başlatılıyor, Windows yaradılması ilə eyni şey. Biz indi əvvəl gördüm. İndi biz deyilən bir şey yaratmaq lazımdır sort yanaşı gedir bir Renderer, pəncərə ilə. Amma bu bir növ var mücərrəd object Bütün bu bunu məsul pəncərə əməliyyatları rəsm. Və bu, həqiqətən uyğundur dolu bir proqram qrafik hardware daxil edin kompüter və ya telefon və ya hər hansı. Belə ki, biz istəyirik bayraqları pseudocode keçmək və sənədlərin baxmaq olar burada gedir daha ətraflı üçün SDL, sürət hala ediləcək olan Bu olacaq deməkdir qrafik hardware istifadə və yalnız proqram emulated deyil. Və biz istifadə etmək olacaq SDL Renderer PRESENTVSYNC. VSYNC sadəcə edir ki, bir şey qrafik daha yaxşı və qarşısını alır baxmaq Bu şey deyilən ekran terror, burada yarım növbəti bir çərçivə və yarım çərçivəsində eyni zamanda tərtib almaq və bu dəhşətli görünür. Ancaq yenə də, oxumaq getmək bilər Öz barədə. Beləliklə, biz burada bəzi bayraqları var. Və belə ki, biz yalnız zəng olacaq bu funksiya SDL Renderer yaradır. Biz bu pəncərə vermək olacaq ki Renderer şərik. Mənfi biz nə qayğı yoxdur deməkdir qrafik sürücü istifadə etmək olacaq. Belə ki, olduqca çox olmalıdır həmişə mənfi biri ola, Siz qrafik sürücülər haqqında bilirik halda. Və sonra biz yalnız olacaq bu bizim bayraqları keçmək. Ki null qaytarır əgər, sonra biz istəyirik həmişə olduğu kimi səhv çap olacaq, lakin sonra biz də olacaq pəncərə məhv əvvəlkilərə resursları təmizləmək SDL çıxmaq zəng və qaytarılması. İndi maraqlı hissəsi burada Biz resim yüklemek harada bu funksiya IMG_load istifadə edərək. Bu gedirik yalnız funksiyası SDL image kitabxana istifadə etmək. Bu ehtiyac yalnız biri. Bu simli edir bir funksiyası var ki, hər hansı bir görüntü resurs yoludur. Və bir png ola bilər, bir GIF, bitmap, bu şeylər hər hansı. Bu funksiya belə gözəl ki, var. Bu olduqca çox hər hansı bir format idarə edə bilərsiniz. Yaddaş və mağazalar onu yük onu bir şey bir SDL səthi adlı kimi. İndi SDL yerüstü sadəcə bir struct var ki, yaddaş image data təmsil edir. Belə ki, haqqında daha ətraflı oxuya bilərsiniz sənədlərin iki edir. Bu səhvlər, onda biz istəyirik bütün şey burada edəcəyimiz biz səhv çap yaxın resursları, və sonra proqram çıxmaq. İndi maraqlı bir şey əvvəl, biz pəncərə bu image cəlb edə bilər biz, həqiqətən, bir faktura etmək lazımdır. İndi bir faktura uyğundur dolu image data qrafik hardware yaddaş daxil. Belə ki, bir səth əsas deyil yaddaş, müntəzəm yaddaş biz bütün dövr istifadə etdik ki, və bir faktura bu ayrı VRAM edir Yaddaş qrafik kartı nəzarət edir. Beləliklə, biz bu funksiyası zəng SDL_CreateTextureFromSurface. Biz bunu bizim Renderer və yerüstü verir. Və sonra biz həqiqətən istəyirik səthi ilə aparılır, belə ki, biz yalnız azad olacaq. Biz artıq buna ehtiyac yoxdur. Və sonra bu zəng əgər belə errored və null döndü, sonra biz bütün nə olacaq yenidən şey hesabat səhv. Oldu. Burada bəzi almaq faktiki göstərilməsi funksiyaları. Belə ki, SDL_RenderClear zəng və keçən Bizim pəncərə ilə bağlı Renderer sadəcə pəncərə qara getmək edir. Belə ki, junk biz gördük ki, rədd Bizim pəncərə əvvəl və qara edir. Və sonra biz gedirik SDL_RenderCopy zəng etmək üçün, bu bizim Renderer bizim faktura verir. Və biz haqqında danışmaq lazımdır nə bu sahələrdə bir az var. Amma ki, olacaq faktura məlumat almaq və üzərində surəti bizim pəncərə image cəlb etmək. Biz bu surəti etdik sonra belə Bizim pəncərə üzərində data, biz bu əlavə funksiyası nə etmək lazımdır SDL_RenderPresent çağırıb. Bu maraqlıdır bu olur, çünki ikiqat buffering adlı mövzu daxil. Belə ki, ikiqat buffering bir texnikadır ki, qrafik çox yaxşı baxmaq edir. Yenə, bu ekran qoparmaq qarşısını alır Mən burada əvvəllər söhbət iki buferlər var. Geri bufer var yaddaş və ön bufer. ön bufer sözün nə anda ekranda var. Beləliklə, biz bu varyasyonları cəlb bütün etmək, SDL kimi surəti və ya SDL_RenderClear göstərmək geri bufer. Belə ki, onlar hər şeyi dəyişdirmək geri bufer. Burada biz bu rəsm ola bilər geri bufer yaşıl kvadrat. Belə ki, sonra biz bunu Bitirdiğinizde Bizim göstərməyə əməliyyatı həqiqətən uzun bilər vaxt, biz nə olacaq buferlər keçid edir. Belə ki, sözün yalnız edir ön bufer və geri bufer və beləliklə, onları keçir ki, dərhal, bir əməliyyat yerinə bəlkə yüzlərlə və ya minlərlə, bizim yeni göstərilən bütün obyektlərin ekran var. Bu şeyi qarşısını alır ekran sərinləşdirici kimi biz yalnız tərtib etdik yarım çərçivəsində üçün obyektlərin. Biz zəng etmək lazımdır nə ki, var SDL_RenderPresent, eləcə də SDL_RenderCopy kimi. Yenə biz yalnız olacaq Beş saniyə gözləyin. Sonra biz olacaq resurslarımızı təmizləmək. Biz daha bir neçə bu vaxt var. Və sonra biz yalnız olacaq proqram çıxmaq üçün. Belə ki, nə edək. Mən mənbələri etmək yazın gedir, sonra alıram salam bu artıq 3image.c bərabərdir. Bütün hüquqlar, heç bir səhvlər tərtib. Və burada baxa bilərsiniz İndi var Mənim şəkil tərtib, Salam, CS50! pəncərə, olan beş saniyə sonra itir. İndi bu hələ sağ, problem var? Bu yaxşı bir proqram deyil, Mən pəncərə yaxın cəhd zaman, çünki heç bir şey olmaz. Ki, x hələ cavab deyil. Belə ki, bir nəzər salaq növbəti fayl hello4animation. Belə ki, bu fayl ki, təqdim olacaq Bizim image hərəkət və hərəkət. Belə ki, biz nə olacaq Eyni şey əvvəlki kimi, SDL başlamaq yaratmaq pəncərə, Renderer yaratmaq daxil image yüklemek yaddaş, faktura yaradır. Biz əvvəl ki, bütün gördüm. İndi bu yeni. Biz bir quruluş çağırıb olacaq yalnız bir düzbucaqlı bir SDL rect. Biz burada getmək varsa, biz SDL rect üçün axtarış, və siz bir görmək olar çox sadə strukturu. Bu x, bir y üçün var mövqe və bu, eni və hündürlüyü üçün var düzbucaqlı ölçüsü. Belə ki, biz istəyirik nə biz nə olacaq edir Bu SDL rect Hedef müəyyən gedir, təyinat üçün. Bu yer harada ekranda biz rəsm olacaq Bizim image sağ So biz olacaq, əgər ətrafında image hərəkət, onda təyinat harada biz image cəlb edirik ətrafında hərəkət etmək lazımdır. Beləliklə, biz bu zəng olacaq funksiyası SDL_QueryTexture. Mən Ünvan keçən alıram qeyd dest.w olan, eni olan, və dest.h, hündürlüyü olan. Və belə SDL_QueryTexture gedir width həmin sahələrdə saxlamaq üçün və faktura hündürlüyü. Və sonra mən gedirəm nə Mən gedirəm nə etmək dest.x olmaq üçün pəncərə təyin etmək eni minus dest.w, 2 bölünür sprite eni. Və bu onu qurmaq niyyətindədir image mükəmməl mərkəzi ki, Bizim pəncərə, bütün sağ? Belə ki, indi mən bir y mövqeyi var. Bu gedir bir dəyişən ola biz olacaq, çünki dəyişən y istiqamətdə image hərəkət. İndi biz bir şey var bir animasiya loop çağırıb. Belə ki, necə animasiya işləyir? Bəli, insan gözü 12 fərqli aşkar edə bilərsiniz hər ikinci images, bütün sağ? Siz mənim 12 şəkil flash kartlar Belə ki ikinci, mən bu şəkillər hər gördüm öz fərqli fərdi image kimi. İndi, daha flash əgər ikinci mənə images, sonra mənim göz başlamaq olardı Onlara birlikdə Blur və mən hərəkət kimi qəbul edirəm, əvəzinə bir ayrı image. Belə ki, məsələn, kino və televiziya üçün, onlar 24 dəfə images flash ikinci. Belə ki, saniyədə 24 çərçivələri var. Kompüter ekran, digər tərəfdən, tez-tez saniyədə 60 kadr var. Bu onların Yenile sürəti var. Yəni onlar yenileyin necə tez-tez var ekranda şəkil. Belə ki, bizim hədəf 60 olacaq oyun üçün saniyədə çərçivəsində. Belə ki, kodu ki, görək. Hər bir çərçivə üçün, belə ki, biz ilk edirik pəncərə təmizləmək üçün gedir. Bu ümumi nümunəsidir. Siz həmişə aydın pəncərə hər çərçivəsində və sonra rəsm hər şeyi əməliyyatları və sonra sonunda, RenderPresent göstərmək yoxdur çərçivəsində hər şey. Və sonra olacaq sonunda gözləmə var növbəti qədər gözləyin frame başlamaq lazımdır. Mən bir çox edirdi Belə ki burada kompleks hesablama ki, artıq 16 ms etdi, Bu, mənim üçün qeyri-mümkün olardı 60 ki çərçivəsində dərəcəsi almaq üçün Hər çərçivəsində, çünki mən istədim hesablamaq üçün çox uzun alaraq. Bundan əlavə, biz, həqiqətən edirik iş cüzi məbləğ sort burada yalnız var, çünki biz rəsm edirik bir şey. Mən yalnız bir 1/60 gözləyin ikinci, uzunluğu olan çərçivəsində arasında bir çərçivə. Belə ki, I növ bunu iddia edirəm bütün iş sıfır zaman alır. Amma real oyun, Siz çıxmaq istiyorum vaxt məbləği bunu etdi Sizin qalan zaman bütün bu işlər. Belə ki, hər halda, mən nə edirəm həqiqətən bu loop bunu? Mən pəncərə sil. Mən bir int edir dest.y müəyyən mənim faktiki y mövqeyi int atıldıqları. İndi qərar üzmək istəyirəm mənim oyun mənim y mövqe üçün, lakin sonra həqiqətən ekran üzərinə çəkmək, Bu ədəd var, çünki bu, ints lazımdır piksel, belə ki, tökmə üçün nə. Mən şəkil çəkmək üçün gedirəm. Belə ki, bu mənbə düzbucaqlı edir. Bu təyinat düzbucaqlı edir. Belə ki, mən null keçdi mənbə düzbucaqlı Mən bütün faktura çəkmək istəyirəm demək. Amma əgər bir çox idi Sizin oyun doku Onlar böyük bir faktura xəritədə bütün istəyirik ki, yalnız bir kimi SDL daxil yükləndi faktura, siz ola bilər mənbə düzbucaqlı istifadə kiçik doku bir seçmək üçün, kiçik sprites biri, böyük toxuması xəritəsi edir. Belə ki, yenə, mən göstərmək keçən alıram, mənim faktura, indi təyinat. Bu harada olacaq pəncərə tərtib olacaq. Və sonra, mən canlandırmanın edirəm, çünki bir şey, mən hərəkət lazımdır, Mən yenilənməsi olacaq gedirəm Hər çərçivəsində sprite mövqe. Mən bu daimi adlı gedin var saniyədə piksel ədəd sürətləndirmək. İndi biz bir hərəkət etmək hər zaman, Frame yalnız 1/60 ikinci edir. Beləliklə, mən 60 ki, bölmək üçün gedirəm. Və sonra, mən, görək y mövqe ki, subtracting. Niyə çıxarılaraq edirəm? Biz ikinci almaq lazımdır. Beləliklə, mən resursları təmizləmək və proqram artıq var. Belə ki edək. Belə ki, markası SRC = hello4 daxil gedək animation.c, bütün sağ? Game. Burada getmək. Beləliklə, mən bu qədər scrolling var olduqca səliqəlidir pəncərə. Amma subtracting edilib keçirilməsi y mövqeyi hər zaman. Orada nələr olur? Yaxşı, ki, SDL çıxır və əslində, ən kompüter qrafikası, koordinat sistemi üçün mənşəli pəncərə sol üst edir. Belə ki, müsbət x istiqamətdə gedir sağ üçün pəncərə arasında. Və müsbət y istiqamətdə həqiqətən aşağı gedir. Belə ki, yenə, mənşəyi nin pəncərə sol üst, müsbət y istiqaməti, aşağı və müsbət x sağ üçün edir. Beləliklə, mən çıxmaq zaman y mövqeyi, ki mənfi getmək etmək niyyətindədir pəncərə qədər y istiqamətdə. Belə ki, orada neler var. Cool. Növbəti fayl baxaq. Burada bir hissəsidir burada nəhayət biz pəncərə küncündə ki, X almaq ki, pəncərə bağlamaq üçün nəzərdə işləmək. Belə ki, nə olub? Biz pəncərə yaratmaq, SDL başlamaq , Renderer yaratmaq resim yüklemek, faktura yaratmaq kimi biz əvvəl gördüm. Biz eyni təyinat düzbucaqlı var əvvəlki kimi eyni zəng faktura sorğu. Amma bu dəfə biz sonra istəyirik eni bölmək gedir və 4 təyinat hündürlüyü. Bu yalnız təsiri var Bizim image zaman scaling biz dörd pəncərə göstərilir. Belə ki, olduqca səliqəli var. Biz yalnız yalnız kimi miqyaslı bilər. Biz sprite başlamaq olacaq Ekranın mərkəzində. Və indi biz x və y sürət və var onlar həm də sıfır başlamaq olacaq. Bu səhv fayl. Bağışlayın. Belə ki, bütün doğru. Yəni bu fayl bütün hələ də var. Biz 4 və hər şey ilə bölmək lazımdır. Belə ki, burada biz x və y mövqe var pəncərə mərkəzi. Və biz ilkin sürət vermək bu daimi sürəti, hansı Mən saniyədə 300 piksel inanıram. İndi biz bu int kimi də bilər var yaxın tələb adlı boolean ola bilər. Əvəzinə bir bunu Burada bir timer sonsuz loop, biz canlandırmanın olacaq yaxın kimi uzun tələb deyil. Belə ki, necə biz hadisələr emal edirsiniz? Yaxşı, SDL bir hadisələr sıralarında qədər pərdə arxasında hərfi queue. Və sonra hər çərçivəsində, biz hadisələr dequeue bilər istifadə edərək növbə Bu zəng SDL_PullEvent. Və yenə, mütləq oxumaq getmək sənədlərin bu barədə. Daha çox ətraflı və bir çox var daha çox funksiyaları bu ilə istifadə edə bilərsiniz. Biz ünvanı keçmək bu şey, SDL_Event ki, biz burada yığını var. İndi bir SDL_event nədir? SDL Çünki biz baxsaq documentation-- edək kateqoriya, giriş tərəfindən API görmək hadisələr, hadisə user, Biz sayı baxmaq olar Burada müxtəlif tədbirlər və biz var edə bilərsiniz Onların bütün ton. Belə ki, bu SDL_Event şey nədir? SDL_Event bir birliyidir. Wow, bir birlik var? Siz yəqin ki, heç vaxt var əvvəl ki, eşitdim. Və OK. A ittifaqı cür kimi bir struct başqa struct, bütün bir yer var onun sahələri və yaddaş, birliyi yalnız var halbuki kifayət qədər yer böyük uyğun deməkdir öz yataqlarından biri, yalnız sahələrdən biri bilərsiniz bir zamanda hansı növ sağ, hadisələr üçün əhəmiyyət kəsb edir? Biz klaviatura ola bilər hadisə və ya bir pəncərə hadisə, lakin bir hadisə həm də bir ola bilməz klaviatura hadisə və bir pəncərə hadisə, belə ki, üçün yer var silly olarıq Bizim hadisə birliyin daxilində o, həm də. Belə ki, istəyirdi öz ittifaqı yaratmaq Bu eyni görünür struct yaradılması kimi, ki, istisna olmaqla, biz birlik söz istifadə əvəzinə struct söz. Və bütün xatırlayıram Sizin birliyin daxilində hər şeyi, birlik faktiki dəyişən yalnız dəyərlərdən biri ola bilər bir anda. Belə ki, necə biz hadisənin nə cür deyə bilərsiniz biz yalnız bu queue off atdı? Yaxşı, biz event.type üçün test edə bilərsiniz. Və bərabər olduqda SDL_Quit, biz bilirik Bu hadisə ki, zaman biz istehsal edilmişdir pəncərə küncündə ki, X edib. Və yaxın tələb müəyyən edə biz 1 bərabərdir. Qalan yalnız bir animasiya əvvəl gördüm ki. Belə ki, irəli getmək və edək Bu və bu işləri necə görmək. Belə ki, mən yazın gedirəm və sonra SRC = hello5_events.c. Biz orada getmək. Oyunlar. İndi biz o bilərsiniz Həqiqətən dörd aşağı miqyaslı. Və indi ətrafında dönen oldu. Mən bəzi toqquşma aşkarlanması var pəncərə tərəflər ilə davam biz nəzər bilər. Mən bunu bağlamaq üçün getmək zaman və nə olur? Bu bağlayır. Fantastic. Biz bu hadisəni qəbul edib. Və biz bunu ele. Belə ki, kodu geri baxmaq imkan verir. Belə ki, mən onu necə əldə etdiniz kimi ətrafında dönen? Unutmayın mən də x qurmaq və ilkin sürəti y. Və sürətli bir müsbət daimi, belə ki Bu gedən başlanğıc almaq üçün aşağı və doğru gedir. İndi user əlavə hər çərçivəsində, meydana gəlmiş ola bilər hər hansı bir hadisə, Mən sprite olmadığını aşkar etmək üçün gedirəm pəncərə çıxmaq üçün çalışır. Belə ki, biz yalnız yoxlanılması ilə bunu edə bilərsiniz 0 ilə x_pos, onda y_pos 0, və də x_pos və y_pos ilə pəncərə eni və pəncərə hündürlüyü. Mən çıxılacaq sonra edək sprite eni. Mən əgər, çünki bu sprite eni çıxmaq, yalnız yoxlamaq olardı sprite mənşəyi pəncərə xaricində getmədi. Amma biz bütün istəyirəm sprite eni həmişə pəncərənin daxilində olmaq və sprite bütün hündürlüyü həmişə pəncərənin daxilində olacaq. Belə ki, toplama işlemi üçün nə. Burada həndəsə bir çox edə bilərsiniz onu cəlb etmək faydalı ola koordinat ilə kağız üzərində Sistem gedir nə görmək. Mən toqquşmaq əgər Belə ki, mən yalnız sadəcə mövqe sıfırlamak Bu niyyətində deyil, belə ki, ekran həyata. Sıçramalar əgər mən gedirəm sidewalls biri, Mən inkar gedirəm x sürət ki, bu digər istiqamətdə dönen başlayır. Və eyni, bu xit üst və ya alt, Mən y sürət təyin etmək üçün gedirəm mənfi y sürət bərabər, ki, geri sıçrayış olacaq. Belə ki, biz burada var nə qədər var. Və yenilənməsi vəzifələr yalnız biz əvvəl gördüm kimi biz istəyirik, çünki, 60 bölmək yalnız bir ikinci 1/60 user. Və sonra göstərilməsi, əvvəlki kimi eyni. Və belə ki, hər şey var Bu fayl gedirdi. Biz hadisələr necə ki, var. Əsas odur ki, burada üz etmək Bu SDL_PullEvent funksiyası var. Və siz mütləq oxumaq lazımdır SDL_Event haqqında sənədlər daha birlik, bu veri növü, çünki çox çox əhəmiyyətli, biz bunu istifadə çünki hadisələr bütün növləri üçün. Məsələn, biz klaviatura üçün istifadə hadisələr, hansı bu faylı üçün nə edir. Beləliklə, biz nə var? Biz əvvəlki kimi eyni şey var , SDL başlamaq bir pəncərə yaratmaq resim yüklemek, bir Renderer yaratmaq yaddaş, faktura yaradır. Yenə olacaq bu dest düzbucaqlı var, biz image miqyaslı olacaq dörd, bu bir az kiçik etmək. İndi biz başlamaq niyyətindəyik Ekranın mərkəzində sprite. Amma bu dəfə biz müəyyən olacaq ilkin x və sıfır y sürəti, klaviatura, çünki bu nəzarət olacaq. Və bundan əlavə, biz olacaq bu dəyişənlərin takip up, aşağı, sol və sağ. Və saxlamaq olacaq biz olub track klaviatura düymələri bərk ki, up, aşağı, sola uyğun, və sağ. İndi bu xülya növüdür biz W, A, S istifadə edə bilərsiniz, çünki, Burada D, və ya faktiki arrow düymələri. Biz yalnız bir ikinci görəcəksiniz. Beləliklə, biz emal olacaq əvvəl kimi hadisə. Biz hadisə çəkin. Amma indi biz olacaq Hadisə növü yandırın. Bu SDL_Quit varsa, biz istəyirik yaxın müəyyən olacaq əvvəl kimi bir tələb. Ki, x emal pəncərə künc, Bizim pəncərə həqiqətən bağlayır ki. Əks halda, biz bir SDL açarı almaq əgər aşağı biz əsas bərk deməkdir hadisə, sonra biz nə olacaq, biz istəyirik Burada bu şey keçid gedir, olan belə event.key means-- hadisə birlik müalicə deməkdir, getmək və əsas almaq bu hadisə strukturu. Belə ki, bu çıxır ki, union əsas hadisə strukturu. Və sonra əsas getmək Tədbirin strukturu öz sahəsində adlı Keysym və sonra scancode. Və yenə, mütləq oxumaq Bu barədə sənədlər. Açar söz giriş olduqca maraqlı. Siz scan kodları və ya əsas kodları əldə edə bilərsiniz. Və bu, bir az incə, lakin sənədlərin olduqca yaxşı. Biz scan kodu görsələr belə olan W və ya bizim əsas mətbuat, biz 1 bərabər qurmaq olacaq. Və sonra biz bu keçid çıxmaq. Bu A və ya sol varsa, biz et, 1 tərk müəyyən Cetera Et Cetera, aşağı və sağ üçün. İndi bu xarici keçid həyata, biz hadisəni bir əsas görürsünüzsə, ki, biz əsas azad etdik deməkdir və biz artıq basaraq edirik. Beləliklə, mən 0 bərabərdir qədər demək gedirəm, Sol sağ, aşağı, 0 bərabərdir 0 bərabərdir 0 bərabərdir, Et Cetera. Və biz bu hər var fark iki hallarda bir-birinə doğru növbəti qoymaq ayrıca kodu ilə Birinci halda, hansı Bu olsun o deməkdir ki, S və ya burada bir aşağı, bu kodu icra edəcək. Belə ki, olduqca lazımlı deyil. Bu, bizə daha çox olan qarşısını alır şərtləri və ifs və hər şeyi bunun kimi. Belə ki, biz olacaq sürət müəyyən edir. Biz 0 sürət seçin. Sonra bərk halda və aşağı, sonra biz mənfi sürəti y sürət seçin. Mənfi xatırlayıram çünki mənfi y istiqamətdə edir. Və müsbət y istiqamətdə aşağı edir. Bərk Əgər və up, sonra biz istəyirik müsbət sürəti müəyyən etmək gedir, olan ekran aşağı gedir deməkdir. Sol və sağ ilə eyni şey. Və sonra biz yeniləmə olacaq əvvəl kimi mövqeləri. Biz toqquşma nə olacaq həddi ilə aşkar, lakin biz yenidən fikrində deyilik sürət, sürət yalnız, çünki klaviatura tərəfindən nəzarət. Amma biz yenidən gedir mövqeləri pəncərə saxlamaq üçün. Və biz müəyyən olacaq struct vəzifələr və sonra bütün etmək əvvəl məhsulları göstərilməsi. Belə ki, nə görmək edək. Belə ki, SRCS-- görək etmək, Bu hello6_keyboard.c edir. Ah, yox. Beləliklə, biz burada bəzi xəbərdarlıq var. Və sadəcə etmədik söyləyərək hər bir mümkün növ yoxlamaq Tədbirin. Çünki, OK Onlardan 236 və ya belə var. Beləliklə, mən bu xəbərdarlıqlara məhəl qoymamaq üçün gedirəm. Bu hələ gözəl tərtib edir. Belə ki, oyun oynamaq üçün gedirəm. Bu hərəkət deyil. Amma indi mən klaviatura mash zaman, Mən burada bəzi WASD hərəkət edə bilərsiniz Mən də mənim ok tuşlarını istifadə edin. Mən deyiləm, baxmayaraq ki, qeyd sağ indi basaraq, Bu, pəncərə həyata niyyətində deyil Mən hər çərçivəsində yenidən çünki. Belə ki, olduqca səliqəli var. Siz Mario ətrafında hərəkət təsəvvür edə bilərsiniz bir arrow düymələri və ya kimi bir şey. Və bəli, X çalışır. Gedirik Belə ki, son fayl hellow7_mouse baxmaq. Bu siçan daxil əldə edir. Biz bu bir So riyaziyyat mövzu idxal, biz olacaq, çünki Burada riyaziyyat bir az. Eyni köhnə, eyni köhnə stuff, təyinat, əvvəl görüldü, köhnə eyni. Bəli, bu maraqlıdır. Belə ki, biz yalnız yoxlanılması geri istəyirik SDL üçün tədbir çıxın. Niyə ki? Belə ki, hadisələr siçan daxil əldə edə bilərsiniz. Siçan hərəkət edən zaman olduğu kimi, Siz ki, bir hadisə olsun. Bir siçan düyməsini bərk zaman, siz ki, bir hadisə əldə edə bilərsiniz. Lakin, bir az sadə bir var bəlkə də, siçan daxil almaq üçün API. Və sadəcə SDL get siçan dövlət var. Beləliklə, mən x bir int və kursor mövqe üçün y. Mən SDL_GetMouseState üçün keçir olan bu edir. Və bu mövqe pəncərə koordinat sistemi. Belə ki, kütləvi sol üst əgər pəncərə ki, 0, 0 olardı. İndi mən nə gedirəm mən gedirəm edir vektor riyaziyyat bir az etmək. Mən sizə deyil düşündüm bahis CS50 ki, görəcəksiniz, lakin burada deyil. Mən bəzi vektor gedirəm math vektor almaq üçün kursor image. Və belə ki, niyə mən var Burada bu toplama işlemi? Bəli, mən yalnız Hedef istifadə əgər .-- belə Mən siçan x tərcümə etmək lazımdır və yarım eni y və image hündürlüyü, Mən mərkəzi istəyirəm, çünki image, siçan doğru davam etmək image deyil mənşəyi. Belə ki, mən söhbət alıram əmin etmək yalnız var Burada image mərkəzi haqqında. Sonra biz delta x və y, almaq hədəf fərq image faktiki mövqe. Və sonra biz əldə edə bilərsiniz burada məsafə olan Pythagorean olacaq teoremi, x kvadrat kök dəfə x plus y dəfə y. İndi jitter qarşısını almaq və mən göstərə bilər Mən bu yoxdur, əgər bu nə, əgər kursor və arasında məsafə image mərkəzi, az beş edir Mən yalnız image hərəkət etmək fikrində deyiləm. Əks halda, biz sürət seçin. Və biz belə ki, müəyyən sürət həmişə sabit olacaq. Və bütün xalis nəticə Bu riyaziyyat image edir kursor istiqamətində hərəkət edir. İndi, bu çıxır ki, SDL_GetMouseState, qəbulu əlavə x və y dəlilləri, bu da uyğundur bir int qaytarır siçan düymələri dövlət. Belə ki, oxuya bilməz birbaşa, lakin biz bir bu makro istifadə bitwise operator ki, qorxudan deyil, yalnız bir bitwise və. Beləliklə, biz nəticəsidir ki, düymələri demək Bizim SDL_GetMouseState, ki, əgər bitwise və bu makro və Burada SDL_BUTTON_LEFT. Belə ki, bu, sadəcə həll etmək üçün gedir uyğun bitmap sol siçan düyməsini bərk olunur. Və belə bitwise əgər və baş və bu deməkdir sıfır, sol düyməni basıldı, sonra biz, həqiqətən, inkar olacaq həm x və y sürəti, olan yalnız image qaçaq edəcək. Update mövqeləri. Toqquşma təsbitlər, Göründüyü bütün əvvəl göstərilməsi, bütün hüququ. Nin edək. Belə ki, SRC = hello7_mouse.c etmək var. Great. No səhvlər. Və oyun. Belə ki, burada mənim siçan var. Və şəkil həqiqətən Mənim siçan chasing. İndi bir oyun bəlkə etmək bu bir düşmən chasing kimi Sizin kiçik xarakter və ya nə. Amma burada biz var image siçan chasing. Mən basın siçan image chasing başlayır və resim üz siçan çalışır. Belə ki, olduqca sərin var. Və bildiriş yenə var Burada hələ toqquşma aşkarlanması. Belə ki, son az demo Mən burada qurmaq. Və daha bir şey nəzər salaq. Belə ki, geri burada, mən bu jitter qeyd. Oldu. Məsafə az beş piksel Belə ki, Mən sıfır x və y sürət qəbulu edilib. Ki, xilas ne olur? Mən yalnız bunu gedirəm. Bu horrendous stil üzr edin, lakin biz doğru kodunu bildirib. Belə ki, saxlamaq və gedirəm etmək üçün əvvəl eyni komanda. Oldu. İndi nə olar? Yaxşı. Biz hələ aşağıdakı edirik əvvəl kimi siçan, lakin biz siçan almaq zaman, bu ümumi jitter var. Orada nələr olur? Bəli, bizim vektor riyaziyyat, biz xatırlayıram arasında məsafə alaraq kursor və image mərkəzi? Yaxşı ki, yaxınlaşır kimi 0, biz əldə başlamaq crazy davranış bu növ kimi harada image sort edir Kursor ətrafında sağa kimi. Və bu sarsıntıdan yaradılması oldu. Və həqiqətən çirkin var. Və yəqin ki, yoxdur Sizin oyun bunu istəyirəm, bu halda xüsusi təsiri bir növ var. Biz nə ki, var yalnız bu ixtiyari biz demək, beş piksel kəsdi Bu beş piksel varsa, biz yaxşı deyilik. Biz artıq image hərəkət etmək lazım deyil. Belə ki, orada neler var. Belə ki, olduqca çox var. İndi yaratmaq üçün necə bir pəncərə bir resim yüklemek, pəncərə bir görünüş çəkən almaq klaviatura giriş, siçan daxil almaq, digər bir dəstə var input ki, deyil ki Yalnız bir sərf əgər almaq üçün necə sənədlərin baxaraq neçə dəqiqə. Beləliklə, siz həqiqətən var olduqca bir İndi sizin ixtiyarınızdadır bir neçə alətləri tam hüquqlu oyun yazmaq üçün. İndi hər oyun bəzi audio lazımdır, lakin audio sənədlər da olduqca yaxşı. Mən ki, əgər bahis istəyən Ben Siz hər şeyi anlamaq biz bu gün haqqında danışdı şəkillər, və səthlərin, sonra Windows, və hər şey, həyata figuring audio API deyil gedir ki, pis. Beləliklə, mən səbirsizliklə gözləyirik Siz SDL nə yaradır.