Томас ажыўленых: Добра. Прывітанне, усім. Я Томас Лайвли. Гэты семінар будзе пісаць 2D гульні ў C, выкарыстоўваючы SDL. Так што я ведаю, што ты ўсё прасіць, так, я сапраўды хачу гуляць у гульні і рабіць гульні, але тое, што гэты бізнэс SDL? Так SDL бібліятэка С. Ён стаіць па той простай DirectMedia ўзроўню. І гэта крос-платформавы, гульня бібліятэка распрацоўкі. Яна працуе на Windows, Mac, Linux, нават IOS і Android. Ён апрацоўвае такія рэчы, як доступ да аўдыё-сістэм для кампутара, клавіятуры, і мышы, джойсцікі, калі яны прымацаваныя. На мабільны тэлефон, ён можа нават зрабіць сэнсарны ўвод, і ўсё, што. І, вядома, ён апрацоўвае графіку, малюнак рэчы на ​​экране. Так што гэта вельмі шырока выкарыстоўваецца, хоць Вы, магчыма, не чулі пра яго раней. Ён пабудаваны ў, напрыклад, Крыніца рухавік ад Valve, які сілкуе такія гульні, як Партал і Team Fortress 2. Гэта таксама ў вельмі вялікай колькасці індзі гульняў, якія выходзяць, так што я рады бачыць, што вы усё будзе рабіць з гэтым. Мэты семінара, каб вы ўсталяваць, каб быць развіваецца SDL. Мы збіраемся даведацца, як стварыць акно гульні. Мы збіраемся стварыць спрайты, якія з'яўляюцца выявы ў вашай гульні якія могуць перасоўвацца. Мы збіраемся даведацца, як каб і аніміраваныя спрайт, так перамяшчаць іх, зрабіць іх з цягам часу мяняцца. І мы збіраемся, каб даведацца, як захапіць клавіятуру і мыш паступаюць з кампутара. Тое, што мы не будзем казаць аб сёння 3D-графіка, таму што гэта вельмі складаны прадмет, які мы не маем часу для. Мы не даведаемся, як гуляць аўдыё на нашых гульнях. І мы не будзем будаваць для чаго, акрамя Linux. Цяпер засцярогі ёсць, што Будзем спадзявацца, што да канца года адбыўся семінар, Вы будзеце камфортна дакументацыя SDL, так што вы зможаце пайсці высветліць як гуляць аўдыё для сябе. Таксама будынак для Mac ці PC павінен працаваць сапраўды гэтак жа, як будаўніцтва для Linux, але ўстаноўка збіраецца будзе трохі адрознівацца. Такім чынам, вы павінны быць у стане зразумець як зрабіць гэтыя рэчы да канца сённяшняга семінара. Такім чынам, для ўстаноўкі, мы збіраемся выкарыстоўваць віртуальную машыну. Мы хацелі б выкарыстоўваць CS50 IDE, таму што мы толькі збіраемся, каб пісаць на C. Але так як IDE ня браўзэр, мы не могуць ствараць новыя вокны або дысплей графіка ў ёй. Такім чынам, мы павінны віртуальную машыну. Такім чынам, вы можаце прытрымлівацца інструкцыям тут manual.CS50.net/appliance/15~~pobj ўсталяваць афіцыйнае CS50 прыбор, што толькі віртуальны Linux машына. А потым, як толькі ў вас ёсць што ўсё гэта ўсталяваць up-- можа заняць некаторы час, таму што вельмі вялікі download-- вы збіраецеся працаваць у У.М. SUDO абнаўлення APT-GET. І што на самай справе адбываецца абнавіць усе праграмнае забеспячэнне, пакеты на вашай віртуальнай машыне. Пасля гэтага, вы збіраецеся запусціць Судо APT-атрымаць ўстаноўку, libsdl2-2.0-0, libsdl2-DBG, libsdl2-DEV, а дадаткова libsdl2-малюнкі 2.0-0, libsdl2-малюнкі DBG, і libsdl2-малюнкі DEV. Так што гэта робіць? Гэта ўсяго толькі ўсталёўвае адладкі інфармацыі, дакументацыі, загалоўкі, і бінарныя файлы для двух бібліятэк. Рэгулярны стары, SDL 2.0, і яшчэ бібліятэка называецца SDL малюнкі, якія мы збіраемся выкарыстаць загружаць файлы малюнкаў у нашай гульні. Таму, як толькі ў вас ёсць, што таксама што, як раз калі ён просіць, Вы проста набярыце так, націсніце Увод ўсталяваць гэтыя пакеты, а затым вы павінны быць добра ісці. Такім чынам, каб атрымаць код размеркавання, вы can-- божа, гэта не абнаўляецца. Калі ў вас ёсць account-- GitHub калі ў вас ёсць рахунак GitHub, Вы можаце зрабіць гэта Git клон каманда РЭПО і што будзе спампаваць Git РЭПО з усімі кода ў ім, так што вы будзеце мець код. Калі вы не маеце GitHub кошт, тое, што вы павінны зрабіць, гэта ўвесці wgithttps: //github.com/tlively/sdl seminar-- і тут гэта different-- /archive/master.zip. Такім чынам, яшчэ раз, гэта сапраўды такі ж Спасылка, за выключэннем таго, што адбываецца, каб быць tlively / SDL_seminar / master.zip і Вы карыстаецеся wgit на запампоўку гэтага. І тады вы можаце проста распакаваць гэты архіў і тады вы будзеце мець ўвесь зыходны код. Так шкада, што так. А потым код таксама будзе размешчаны на вэб-старонкі ў CS50 семінара ў пары дзён. Добра. Так як мы пачнем пісаць нашу ўласную гульню? Ну, першае, што мы збіраемся хочаце зрабіць гэта паглядзець на SDL дакументацыі. Дык вось У.М .. А вось вэб-старонка. Я выйшаў, каб жыць libsdl.org. Тое, што я збіраюся зрабіць тут перайсці да бакавой панэлі, пад дакументацыі, і націсніце на вікі. Гэта прынясе мне ў вікі, што мае большасць дакументацыі для SDL. За на бакавы панэлі тут, мы збіраецца націсніце API па катэгорыях, таму што збіраецца даць нам прыемна катэгарычная выгляд усяго API для SDL. Так, напрыклад, у нас ёсць асноўны ініцыялізацыі і зачынілі, усё тое Адміністрацыйны матэрыял для выкарыстання SDL, а то ў нас у раздзеле для адлюстравання рэчы на ​​экране. Гэта відэа. Ўваходныя падзеі, гэта становіцца ўвесці з клавіятуры, атрымліваць ўвод ад мышы, і джойсцік, калі ў вас ёсць нават. Там жа зваротнай сілай рэчаў як гульнявыя кантролеры, якія мы не збіраемся казаць. А вось гук. А тут яшчэ куча іншых рэчы, якія SDL можа зрабіць для вас. Але сёння мы збіраемся засяродзіцца на ініцыялізацыі тут, адлюстравання малюнкаў у відэа раздзел, і апрацоўку падзей ўводу. Дык вось галоўныя раздзелы дакументацыі што вы павінны турбавацца аб. Проста для задавальнення, калі перайсці тут і націсніце на API па імені, мы можам убачыць спіс усіх асобная рэч у SDL бібліятэцы. Такім чынам, усе гэтыя функцыі, пералічэння, структуры, звар'яцелае колькасць матэрыялу, алфавітны парадак. Ня І ясна, што да таго часу, Вы ведаеце, што вы робіце, гэта не будзе занадта карысным, які з'яўляецца, чаму мы робім API па катэгорыях. Такім чынам, давайце пачнем. Спадзяюся, вы ўжо загрузілі код размеркавання. І так, што вы можаце зрабіць, гэта, права тут, у CS50 прыбора, проста адкрыйце тэрмінал. Тут мы ідзем. Так што я ўжо запампаваў Код размеркавання з дапамогай .zip спосаб. І я расшпіліў яго. Дык вось у SDL майстры семінара. Так што я збіраюся ісці ў гэтым каталогу. І тое, што мы бачым тут што ў нас ёсць сем C файлы. І гэта будзе код мы збіраемся быць гледзячы на ​​сённяшні дзень. У нас ёсць Makefile. І ў нас ёсць каталог рэсурсаў, які проста мае малюнак што вы будзеце бачыць досыць хутка. Так давайце адкрыем гэтыя файлы з дапамогай G-Edit рэдактара. Таму я хачу, каб адкрыць усе файлы, якія Пачнем з прывітанне і сканчаюцца на .c. Тут мы ідзем. Так што гэта малюсенькае акно, такім чынам, мы збіраюся паспрабаваць зрабіць што больш. Не, ён сышоў. Добра. Дык вось самае першае Файл мы збіраемся глядзець. Гэта называецца hello1_sdl.c. І ўсё гэта робіць ініцыялізацыю SDL Бібліятэка, так што мы можам пачаць выкарыстоўваць яго. Як бы Вы ведаеце, каб прыйсці з гэтым кодам самі? Ну, калі мы паглядзім больш у дакументацыі і мы ідзем у ініцыялізацыі і зачынілі раздзел, ён збіраецца расказаць нам пра тое, як ініцыялізаваць SDL. Так, безумоўна, чытаць гэта ў іншы раз. Гэта адбываецца, каб сказаць вам усё пра тое, што тут адбываецца. Але галоўнае цяжкасць у тым, што мы павінны выклікаць гэтую функцыю SDL У Гэтым і перадаць яго, якія рэчы мы хочам, каб бібліятэка для ініцыялізацыі. Такім чынам, у нашым выпадку, мы проста ініцыялізаваць відэа зараз, так што мы можам пачаць паказ малюнкаў. Тут, вы можаце ўбачыць, калі клікаем на SDL ў ім, мы можа атрымаць яшчэ больш інфармацыі, у тым ліку вяртаецца значэння. Такім чынам, мы бачым, што гэта returnes нуля на поспех. Такім чынам, у нашым кодзе, мы збіраемся ўбачыць, калі яна не вернецца да нуля, і калі ён не вяртае нуля, так што гэта не было паспяховым, тады мы ідзем да друку проста памылка пры выкарыстанні гэтага іншую функцыю, SDL памылак Get, які вяртае радок апісваючы памылка, якая ўзнікае. Мы збіраемся, каб раздрукаваць што памылкі, а затым мы проста збіраецца выйсці з праграмы з кодам памылкі. Тады іншая справа, што мы павінны зрабіць гэта да выхаду з праграмы, калі мы паспяхова ініцыялізаваны SDL, нам проста трэба назваць яго SDL выйсці. І, што збіраецца звяртацца ачысткі усе ўнутраныя рэсурсы SDL для нас. Такім чынам, дакументацыя there-- зноў, тут мы знаходзімся ў ініцыялізацыі і зачынілі раздзел дакументацыі. Вы можаце проста націсніце на Функцыя тут, SDL кінуць, і вы можаце прачытаць усё пра тое, што, як добра. І многія з гэтых функцый старонкі дакументацыі ёсць прыклад кода, так што гэта вельмі добры рэсурс. Вызначана выдаткаваць некаторы час чытаць частцы гэтай вікі калі вы збіраецеся зрабіць гэта для праекта. Добра. Дык вось уся наша праграма. Што мы можам зрабіць цяпер, я is-- збіраецца адкрыць Makefile тут, так што я збіраюся ўзяць паглядзець на, як гэта працуе. І гэта вельмі просты Makefile, падобна на тое, што вы бачылі раней. Адным з асноўных адрозненняў з'яўляецца тое, што тут, у гэтым будзе ўставіць вынік бегу Гэтая каманда, вы ўжо усталяваны, калі вы ўсталявалі SDL. І гэта каманда які будзе генераваць некаторыя дадатковыя сцягі для кампілятара. Акрамя таго, мы даем яго усе звычайныя каманды, а таксама гэтыя дзве каманды. Так што -lsdl2-малюнкі ручкі звязваючы ў бібліятэцы SDL малюнка. І на самай справе -lm апрацоўвае звязванне у стандартнай матэматычнай бібліятэкі C. Такім чынам, мы не спатрэбіцца тых, для ўсіх нашых файлаў на Сі, але мы проста пакласці іх у так што мы можам выкарыстоўваць тую ж Makefile для ўсяго без змен. Сюды ў крыніцах, гэта дзе вы б змясціць файлы, якія вы збіраецеся кампіляваць для вашага праекта. Але так як кожны з маёй C файлы сюды мае асноўную функцыю, гэта будзе заблытацца калі пакласці іх у. Так што я збіраюся проста сказаць, зараз, hello1_sdl.c, які з'яўляецца адным мы проста глядзелі. Так што, калі я вяртаюся ў працягу тут, я магу сапраўды робяць. І што ён зрабіў гэта проста складзены, што першы файл. І тады мы можам ўвесці ./game, таму што гэта выкананы файл ён вырабіў. І ўсё гэта зрабіў для друку ініцыялізацыя паспяхова. Такім чынам, мы зрабілі нешта правільнае. Але гэта было сумна, таму што мы не бачым акно, нічога не рухалася вакол. Так выдатна, мы атрымалі SDL ініцыялізуюцца. Цяпер, давайце пяройдзем да нечага трохі больш цікавым. Так вось у нас ёсць hello2_window.c, і гэта будзе крыху больш комплекс С праграма, ініцыялізуе SDL, як і раней, толькі зараз мы таксама збіраемся для ініцыялізацыі SDL таймер. І гэта будзе, каб паведаміць нам доступ да ўнутранай таймер і выкарыстоўваць функцыі, якія адносяцца да часу. А потым паглядзім сюды. Тое, што мы робім, мы павінны гэты паказальнік да SDL акно структуры, якая будзе стварацца гэты заклік функцыі, SDL стварыць акно. Цяпер, гэта займае шмат аргументаў, так што давайце глядзець на дакументацыю. Такім чынам, яшчэ раз, я збіраюся API па катэгорыях, я зніжаецца ў відэа тут, і першы раздзел, паказваючы кіраванне вокнамі. Такім чынам, гэта секцыя мае тона рэчаў у ім, але калі вы глядзіце праз гэтыя функцыі, вы будзеце бачыць, што верагодна, адзін мы патрэбен, называецца SDL стварыць акно, які, здараецца, на самым версе. І таму гэта дакументацыя для гэтай функцыі. Акно будзе мець загаловак, Х і Y пазіцыі на экране, гэта будзе мець шырыню, вышыню, а затым ён збіраецца прыняць некаторыя сцягі. Цяпер мы на самай справе не хвалюе любы з гэтых сцягоў зараз але калі вы хочаце зрабіць што-то як зрабіць акно ва ўвесь экран, Вы маглі б зірнуць на гэта. У цяперашні час, мы толькі збіраемся выкарыстоўваць гэтыя спецыяльныя значэння, SDL акно плюс цэнтру для х і ў ў парадку проста стварыць акно у цэнтры нашага экрана. Дык вось, што гэта робіць. А калі акно здараецца NULL, азначаючы, што гэта памылка, Затым мы зноў збіраемся проста раздрукаваць, выкарыстоўваючы SDL памылку памылку атрымаеце. А потым, таму што мы ініцыялізацыі SDL, нам трэба, каб закрыць яго. Так мы называем SDL, перш чым кінуць Вяртаючы адну для асноўнай. Такім чынам, мы маем акно адкрыць, спадзяюся. І што мы збіраемся зрабіць, мы збіраемся патэлефанаваць SDL для 5000 мілісекунд, што тое ж самае, як пяць секунд. І калі мы зрабілі з гэтым, ён збіраецца знішчыць акно, прыбіраць бібліятэка SDL, і выйсці з праграмы. Так што давайце ісці наперад і даць, што стрэл. Так што цяпер замест змены Makefile, кожны раз, Я магу проста зрабіць, і Затым у камандным радку, кажуць крыніцы роўная, а затым файл мы кампіляцыі. Так што гэта hello2_window.c. Фантастычны. Няма erros. Цяпер, калі мы запусцім наш выкананы файл, мы бачым гэта акно. Зараз ёсць некалькі Праблемы з акном. Мы можам перамясціць яго вакол, але яна мае На гэтым фоне непажаданай ўнутры яго. Такім чынам, мы не цягне што-небудзь, і так гэта толькі поўны смецце, які гэта даволі шмат, што мы чакаем. Акрамя таго, мы не можам зачыніць акно. Я націску гэтай X ст кут і нічога, што адбываецца. Такім чынам, мы ўбачым, як выправіць што ў трохі. Так што давайце выправіць частка, дзе Акно поўная смецця ў першую чаргу. Так што, калі мы ідзем да hello3_image.c, тое, што мы бачым у тым, што мы дадалі некалькі больш рэчаў тут. Мы дадалі гэты новы загаловак падаць, каб атрымаць функцыі таймера. Я думаю, што мы зрабілі гэта ў апошні Адзін з іх, таксама, і я не згадваць. Але цяпер, таму што мы працы з малюнкамі, мы павінны ўключаць SDL Файл загалоўка малюнка, а таксама. Так што гэта тое ж самае, перш, ініцыялізацыя SDL тут, Тое ж самае справу з стварэннем вокны. Мы бачылі, што да гэтага часу. Цяпер нам трэба стварыць нешта пад назвай рендерер, які накшталт ідзе разам з акном. Але гэта свайго роду абстрактны аб'ект, што гэта які адказвае рабіць усе гэтыя малюнак аперацый да акна. І гэта на самай справе адпавядае на праграмы, загружанай ў графічным абсталяванні ў вашай кампутар або тэлефон, ці што заўгодна. Такім чынам, сцягі, якія мы хочам перадаць it-- і вы можаце глядзець на дакументацыю каб атрымаць больш падрабязную інфармацыю here-- збіраецеся каб быць SDL вынесці паскараецца, што азначае, што ён будзе з дапамогай графічнага абсталявання і не толькі эмуляваць ў праграмным забеспячэнні. І мы збіраемся выкарыстоўваць SDL рэндэрынгу PRESENTVSYNC. VSYNC гэта рэч, якая проста робіць Вашы графікі выглядаюць лепш і прадухіляе гэта тое, што называецца экранам тэрор, дзе палова аднаго кадра і палова наступнага рамка ўцягнуцца ў той жа час і гэта выглядае жудасна. Але, зноў жа, вы можаце ісці чытаць аб тым, што па сваім меркаванні. Такім чынам, мы маем некаторыя сцягі тут. І так мы толькі збіраемся называць гэтая функцыя SDL стварыць візуалізацыі. Мы збіраемся даць яму акно звязаць з гэтай візуалізацыі. Адмоўны адным азначае, што мы не хвалюе, што Графічны драйвер мы збіраемся выкарыстаць. Так што трэба вельмі шмат заўсёды адмоўны, калі вы не ведаеце пра графічных драйвераў. І тады мы толькі збіраемся перадаць ёй нашы сцягі. Так што, калі вяртаецца NULL, то мы да друку памылку, як звычайна, але тады мы таксама збіраемся знішчыць акно прыбіраць гэтыя рэсурсы, перш чым называючы SDL кінуць і вярнуцца. Цяпер, цікавая частка тут тое, дзе мы загружаем наш імідж Выкарыстоўваючы гэтую функцыю IMG_load. Гэта адзіная функцыя мы збіраемся выкарыстоўваць з бібліятэкі SDL малюнка. Гэта адзіны, хто нам патрэбны. Гэта функцыя, якая прымае радок гэта шлях любога рэсурсу малюнка. І гэта можа быць .png, А GIF, растравыя, любы з гэтых рэчаў. І вось чаму гэтая функцыя так добра. Ён можа апрацоўваць амаль любы фармат. Грузы яго ў памяць і захоўвае яго як рэч называецца SDL паверхню. Цяпер SDL паверхню толькі структура якая ўяўляе дадзеныя выявы ў памяці. Такім чынам, вы можаце прачытаць больш пра што ў дакументацыі два. І калі гэта памылкі, то мы збіраюся зрабіць усё гэта дзе мы друкуем памылку, зачыніць рэсурсы, а затым выйсці з праграмы. Цяпер самае цікавае, да мы можам зрабіць гэты вобраз да акна, мы павінны на самай справе зрабіць гэта тэкстура. Цяпер тэкстура адпавядае да дадзеных малюнка, загружаных ў памяць апаратнай графічнай з аддзела. Такім чынам, паверхню ў асноўны памяці, рэгулярнае памяці што мы выкарыстоўвалі ўсе семестр, і тэкстура ў гэтай асобнай відэапамяці памяці, элементы кіравання графічнай карты. Так мы называем гэтую функцыю SDL_CreateTextureFromSurface. Мы даем яму нашу візуалізацыі і наш паверхню. І тады мы на самай справе зроблена з паверхняй, так мы толькі збіраемся, каб вызваліць яго. Мы не патрэбны. А потым, так што калі гэты заклік памылкамі і вярнуўся пустым, то мы збіраемся зрабіць ўвесь Памылка справаздачнасці самае. Добра. Тут мы атрымліваем у некаторыя фактычныя функцыі рэндэрынгу. Так называючы SDL_RenderClear і перадачы яго рэндэру, звязаныя з нашым акном проста робіць акно цямнее. Так ён здымае, што смецце, які мы бачылі ў наша акно, перш чым яна і робіць чорны. А потым мы збіраемся патэлефанаваць SDL_RenderCopy, даць яму наш візуалізацыі, нашу тэкстуру. І мы будзем казаць аб тым, што гэтыя палі знаходзяцца ў трохі. Але што адбываецца, каб прыняць дадзеныя тэкстуры і скапіяваць яго на наш Акно для адмалёўкі малюнка. Так пасля таго як мы зрабілі гэтую копію дадзеных на нашым акне, мы павінны зрабіць гэта дадатковая функцыя называецца SDL_RenderPresent. І гэта цікава таму што гэта становіцца у тэме пад назвай двайны буферызацыі. Так двайны буферызацыі з'яўляецца метад, які робіць вашыя графікі выглядаюць нашмат лепш. Зноў жа, гэта прадухіляе разрыў экрана Я казаў раней, дзе ў вас ёсць два буфера. Там гэта зноў буфера ў памяць і пярэдні буфер. Пярэдняя буфер літаральна што на экране ў дадзены момант. Такім чынам, мы робім усё гэта намаляваць варыяцыі, як SDL аказаць копію або SDL_RenderClear у другасны буфер. Так яны змяняюць рэчы У задняга буфера. Тут мы маглі б маляваць гэты зялёны квадрат, каб буфера. Такім чынам, калі мы зрабілі рабіць нашы робяць аперацыі, якія можа заняць вельмі доўга Час, што мы збіраемся зрабіць гэта пераключыць буферы. Так што літаральна бярэ пярэдні буфер і назад буфер і перамыкае іх, так што, імгненна, за адну аперацыю замест можа быць, сотні ці тысячы, усе нашы зноў аказваецца аб'екты на экране. І гэта замінае рэчы як абнаўляць экран калі мы толькі палова звяртаецца нашых аб'ектаў у кадры. Дык вось чаму мы павінны выклікаць SDL_RenderPresent, а таксама а SDL_RenderCopy. Зноў жа, мы толькі збіраемся чакаць на працягу пяці секунд. Тады мы ідзем да ачысціць нашы рэсурсы. У нас ёсць даволі некалькі больш у гэты раз. І тады мы толькі збіраемся для выхаду з праграмы. Так давайце зробім гэта. Я збіраюся ўвесці марку, а затым крыніцы роўная hello-- гэта цяпер 3image.c. Добра, не складзены без памылак. І вы можаце паглядзець тут Я цяпер выцягваецца маё малюнак, Прывітанне, CS50! у нашым акне, якое знікае праз пяць секунд. Цяпер, гэта ўсё яшчэ ёсць праблемы, ці не так? Гэта не добрае дадатак, таму што, калі я спрабую зачыніць акно, нічога не адбываецца. Гэта х па-ранейшаму не адказвае. Такім чынам, давайце зірнем на наступны файл, hello4animation. Так што гэта файл што збіраецца ўвесці перасоўванне і рух да нашага малюнку. Так што мы збіраемся зрабіць Тое ж самае, як і раней, ініцыяваць SDL, стварыць вокны, стварыць візуалізацыі, загрузіць малюнак у памяці, стварыць тэкстуру. Мы бачылі ўсё гэта раней. Цяпер, вось гэта новае. Мы збіраемся, каб мець структуру, званую SDL прастакутнік, які з'яўляецца проста прастакутнік. Калі мы ідзем сюды, мы можам зрабіць пошук для SDL прамавугольніка, і вы можаце бачыць, што гэта Вельмі простая структура. Ён мае х, а ў для становішча, і мае шырыню і вышыню для памер прамавугольніка. Такім чынам, што мы збіраемся зрабіць, гэта мы будзе вызначаць гэты SDL прамавугольніка адрасата, для прызначэння. І гэта месца, на экране, дзе мы збіраемся быць малюнак наш лад, прама так калі мы збіраемся быць перамяшчэння выявы вакол, то прызначэння, дзе мы збіраемся прыцягнуць малюнак павінны быць у руху. Такім чынам, мы збіраемся назваць гэта Функцыя SDL_QueryTexture. І заўважце, я перадаю адрас з dest.w, што шырыня, і dest.h, што вышыня. І так будзе SDL_QueryTexture захоўваць у гэтых галінах шырыня а вышыня нашай тэкстуры. І тады тое, што я збіраюся зрабіць, я збіраюся ўсталяваць dest.x быць акно шырыня мінус dest.w, што шырыня спрайт, дзеліцца на 2. І гэта будзе наладзіць яго так, што вобраз ідэальна па цэнтры у нашым акне, усё ў парадку? Так што цяпер у мяне ёсць пазіцыя ў. І гэта будзе быць зменнай, якая змяняецца, таму што мы збіраемся, каб быць перамяшчэння выявы ў накірунку ў. І зараз у нас ёсць што-то называецца цыкл анімацыі. Так як жа анімацыя працуе? Ну, чалавечае вока можа выявіць 12 розных выявы ў кожную секунду, добра? Так што, калі вы міргаць 12 малюнкаў карт на мяне у секунду, я бачыў кожны з гэтых вобразаў а сваім уласным асобнага малюнка. Цяпер, калі вы міргаць больш малюнка ў мяне ў секунду, то мой вачэй пачне каб размыць іх разам і я б ўспрымаць яго як рух, замест аднаго асобнага малюнка. Так, напрыклад, кіно і тэлебачання, яны міргаюць выявы ў вас 24 разы другі. Дык вось 24 кадраў у секунду. Экраны кампутара, з другога боку, часта пры 60 кадрах у секунду. Гэта іх хуткасць абнаўлення. Вось як часта яны абнавіць малюнак на экране. Такім чынам, наша мэта будзе 60 кадраў у секунду для нашых гульняў. Такім чынам, давайце паглядзім, што ў кодзе. Такім чынам, для кожнага кадра, мы ў першую чаргу збіраецца ачысціць акно. Гэта агульная карціна. Вы заўсёды ачысціць Акно кожны кадр, а затым рабіць усё на чарцяжы аперацыі, а затым у рэшце рэшт, у RenderPresent, каб паказаць усё ў кадры. І тады вы будзеце ёсць чаканне ў канцы не чакаць да наступнага рама павінна пачацца. Так што, калі я раблю шмат Комплекс вылічэнне тут што спатрэбілася больш за 16 мілісекунд, было б немагчыма для мяне каб атрымаць, што частата кадраў 60, што Я хацеў, таму што кожны кадр занадта доўга, каб вылічыць. Акрамя таго, мы сапраўды робім Сартаваць нікчэмнага колькасці працы тут, таму што ёсць толькі Адзінае, што мы малюем. Так што я проста пачакаць 1/60 па-другое, што даўжыня рамы паміж кадрамі. Так што я накшталт прыкідваючыся рабіць ўся мая праца займае нулявы час. Але ў рэальнай гульні, вы павінны адняць колькасць часу, якое спатрэбілася, каб зрабіць ўся гэтая праца з Вашага часу адпачынку. Так ці інакш, што я на самай справе робіць у гэтым цыкле? Ачысціць акно. Я усталяваў dest.y, які з'яўляецца INT, каб мая фактычная пазіцыя ў кінуты ў міжнар. Цяпер я хачу, плаваць дазвол для маёй пазіцыі у ў маёй гульні, але тады на самай справе намаляваць яго на экране, ён павінен Інтс, таму што гэта ў адзінках пікселяў, дык гэта тое, што прывядзенне ст. Я збіраюся намаляваць малюнак. Так што гэта зыходны прастакутнік. І гэта прастакутнік прызначэння. Так я прайшоў нуль для крыніца прастакутнік сказаць, што я хачу звярнуць усю сваю тэкстуру. Але калі ў вас шмат тэкстуры ў вашай гульні і ўсе яны ў адзін вялікі карты тэкстуры якім ён тады быў SDL у толькі адзін тэкстуры, вы маглі б выкарыстоўваць зыходны прастакутнік выбраць адзін з невялікіх тэкстур, адзін з невялікіх спрайтов, з гэтага вялікі карце тэкстуры. Такім чынам, яшчэ раз, я перадаю мой рэндэру, мой тэкстура, і ў цяперашні час прызначэння. Гэта будзе дзе ў Акно гэта будзе звернута. А потым, таму што я малюю то, мне трэба рух, Я збіраюся быць абнаўленню Становішча спрайт ў кожным кадры. Так што ў мяне гэта пастаяннае назвай скрутак хуткасці ў блокі пікселяў у секунду. Цяпер, кожны раз, калі мы робім рух, кадр толькі 1/60 секунды. Так што я збіраюся падзяліць, што на 60. А потым, давайце паглядзім, я аднімання, што з пазіцыі у. Чаму я аднімання? Мы вернемся да гэтага ў секунду. Тады я ачысціць свае рэсурсы і праграма скончыцца. Так давайце зробім гэта. Так што давайце ісці ў макіяж SRCS = hello4 animation.c, усё ў парадку? Гульня. Там вы ідзяце. Так ён у мяне пракруткі уверх па акно, якое з'яўляецца даволі ахайна. Але трымайцеся, я быў аднімання ад становішча ў кожны раз. Што там адбываецца? Ну, атрымліваецца, што ў SDL, і На самай справе, у большасці камп'ютэрнай графікі, паходжанне для сістэмы каардынатаў з'яўляецца верхняй левай частцы акна. Такім чынам, станоўчае накірунак ідзе х па вашаму акне справа. І станоўчы у напрамак на самай справе ідзе ўніз. Такім чынам, яшчэ раз, у паходжанні ў верхні левы вокны, станоўчае напрамак у ўніз, і станоўчы х направа. Таму, калі я адняць з пазіцыя ў, гэта збіраецца зрабіць гэта перайсці на негатыве у кірунак, якое складае акне. Дык вось тое, што там адбываецца. Прахладны. Давайце паглядзім на наступны файл. Вось частка з паказаць, дзе мы, нарэшце, атрымаць гэтую X ст куце акна што, як мяркуецца, каб закрыць акно на працу. Дык што ж адбываецца? Мы ініцыялізуючы SDL, стварыць акно, стварыць візуалізацыі, загрузіце малюнак, стварыць тэкстуру як мы бачылі раней. У нас жа прастакутнік прызначэння як і раней, той жа выклік, каб запытаць тэкстуру. Але ў гэты раз, мы тады падзелім шырыню і вышыня нашага прызначэння па 4. Гэта мае толькі эфект маштабавання наш лад ўніз, калі мы паказваем яго ў акне на чатыры. Так што гэта даволі ахайна. Мы можам проста маштабаваць проста так. Мы збіраемся пачаць спрайт у цэнтры экрана. І цяпер у нас ёсць х і хуткасць у і яны абодва збіраюцца пачаць з нуля. Гэта няправільны файл. Мне вельмі шкада. Так што ўсё гэта праўда. Гэта ўсё яшчэ ў гэтым файле. У нас ёсць дзяленне на 4, і ўсё. Так вось у нас ёсць х і ў пазіцыі для цэнтра вокны. І мы даем яму пачатковую хуткасць гэтай пастаяннай хуткасцю, якая Я лічу, гэта 300 пікселяў у секунду. Цяпер у нас ёсць гэта INT можа так жа добра, быць лагічны называецца побач прасіў. І замест таго, Вядзенне бясконцы цыкл па таймеры тут, мы збіраемся анімавалі, як Пакуль блізка не прасіў. Так як мы апрацоўваем падзеі? Ну, SDL чарзе да падзей у літаральнае чэргі за кулісамі. І тады кожны кадр, мы можам з чаргі падзей ад гэтай чарзе, выкарыстоўваючы гэты выклік SDL_PullEvent. І зноў, вызначана ісці чытаць пра гэта ў дакументацыі. Там вельмі шмат больш дэталяў і шмат больш функцый вы можаце выкарыстоўваць у гэтым. Мы перадаем ёй адрас гэтай рэчы, SDL_Event што мы маем тут у стэку. Цяпер, што з'яўляецца SDL_event? Таму што SDL, калі мы паглядзім у у documentation-- давайце см, API па катэгорыях, уваход Падзеі, апрацоўка падзей, мы можам паглядзець на колькасць розных падзей тут і мы бачым, што ёсць ў цэлым т з іх. Так што гэта SDL_Event рэч? SDL_Event з'яўляецца аб'яднаннем. Нічога сабе, што такое аб'яднанне? Вы верагодна ніколі не чуў, што раней. І гэта нармальна. Саюз накшталт як на структуру, за выключэннем структуры мае месца для ўсіх яго поля і памяці, у той час як саюз толькі мае досыць месцы, каб адпавядаць самым буйным адзін з яго палёў, што азначае яго можа захоўваць толькі адзін з яго палёў у той час, які выгляд мае сэнс для падзей, праўда? Мы можам мець клавіятуру падзея або мерапрыемства акно, але адна падзея не можа быць і Мерапрыемства клавіятура і акно падзей, так што было б па-дурному мець прастору для і тых, хто ўнутры нашага саюза падзей. Так што, калі вы хочаце, каб стварыць свой уласны саюз, гэта выглядае сапраўды гэтак жа, як стварэнне на структуру, акрамя таго, што мы выкарыстоўваем ключавое слова саюза замест слова структуры. І памятайце, для ўсіх з рэчы ўнутры вашага саюза, фактычная велічыня, аб'яднанне можа мець толькі адзін з гэтых значэнняў адначасова. Так як мы можам сказаць, што гэта за падзеі мы проста выштурхваецца з гэтай чарзе? Ну, мы можам праверыць Event.type. І калі гэта роўна каб SDL_Quit, мы ведаем, гэта падзея, якая быў створаны, калі мы ўдарыў, што X у куце акна. І мы можам ўсталяваць побач прасіў роўная 1. У астатнім гэта проста некаторыя анімацыі што вы бачылі раней. Так што давайце ісці наперад і зрабіць гэта і ўбачыць, наколькі добра яна працуе. Так што я збіраюся ўвесці марку і Затым SRCS = hello5_events.c. Там мы ідзем. Гульні. Цяпер мы можам бачыць, што гэта было сапраўды скарацілі ў чатыры разы. І зараз гэта падскокваючы. У мяне ёсць выяўленне сутыкнення адбываецца з бакавых бакоў акна што мы можам зірнуць на. І тое, што адбываецца, калі я іду, каб закрыць яго? Ён закрывае. Фантастычны. Мы атрымалі гэтую падзею. І мы справіліся. Такім чынам, давайце паглядзім таму на код. Такім чынам, як жа я яго падскокваючы, як, што? Памятаеце, я ўсталяваць абодва х і у першапачаткова хуткасцяў. А хуткасць з'яўляецца станоўчым пастаянная, так што збіраўся зрабіць гэта, пачынаючы з ідзе ўніз і направа. Цяпер, кожны кадр, у дадатак да апрацоўкі любыя падзеі, якія маглі адбыцца, Я збіраюся выявіць Ці мой спрайт спрабуе выйсці з акна. Такім чынам, мы можам зрабіць гэта, проста праверка x_pos з 0, y_pos 0, а затым таксама x_pos і y_pos з шырыня і вышыня акна акно. Звярніце ўвагу, я адымаецца шырыня спрайт. І гэта таму, што, калі я не зрабіў адняць шырыню спрайт, гэта толькі праверыць, што паходжанне спрайт не выходзіць за межы акна. Але мы хочам, суцэльныя шырыня спрайт каб заўсёды быць у акне і ўся вышыня спрайт каб заўсёды быць у акне. Дык вось тое, што адніманне для. Шмат геаметрыі тут можна карысна звярнуць яго на паперы з каардынатай Сістэма паглядзець, што адбываецца. Так што, калі я сутыкаюцца, я проста проста скінуць пазіцыю так, што яна не будзе з экрана. І я збіраюся, калі ён адскоквае на адной з бакавых сценак, Я збіраюся адмаўляць х хуткасць, так што пачынаецца падскокваючы ў іншым накірунку. І сапраўды гэтак жа, калі яна трапляе верхняй або ніжняй, Я збіраюся ўсталяваць хуткасць у роўна адмоўнай хуткасці у, так што яно вернецца. Так што гэта проста, як мы атрымалі гэта тут. І абнаўленне пазіцыі гэтак жа, як мы бачылі раней, падзяліць на 60, таму што мы толькі апрацоўка 1/60 секунды. А потым рэндэрынгу, сапраўды гэтак жа, як і раней. І так, што ўсе, што адбываецца на гэтым файле. Дык вось, як мы робім падзеі. Галоўнае, каб забраць тут гэтая функцыя SDL_PullEvent. І вы павінны, безумоўна, чытаць Дакументацыя больш пра SDL_Event аб'яднанне, таму што гэты тып дадзеных з'яўляецца вельмі, вельмі важна, таму што мы выкарыстоўваем яго для ўсіх відаў мерапрыемстваў. Напрыклад, мы выкарыстоўваем яго для клавіятуры Падзеі, якія гэта тое, што гэты файл для. Такім чынам, што ж мы маем? У нас ёсць тое ж самае, як і раней, ініцыялізацыі SDL, стварыць акно, стварыць візуалізацыі, загрузіць малюнак ў памяць, стварыць тэкстуру. Зноў жа, мы збіраемся ёсць гэты Dest прастакутнік, мы збіраемся маштабаваць малюнак на чатыры, зрабіць яго крыху менш. Зараз, мы збіраемся, каб пачаць спрайт ў цэнтры экрана. Але ў гэты раз, мы збіраемся ўсталяваць Пачатковыя х і ў хуткасці да нуля, таму што клавіятура будзе кантраляваць іх. І, акрамя таго, мы збіраемся адсочваць гэтых зменных уверх, уніз, налева і направа. І што будзе трымаць трэк Ці мы маю націску кнопак клавіятуры, што адпавядаюць уверх, уніз, налева, і правільна. Цяпер, гэта свайго роду фантазіі таму што мы можам выкарыстоўваць W, A, S, D тут, або клавіш са стрэлкамі фактычныя. Мы ўбачым, што ўсяго за секунду. Такім чынам, мы збіраемся, каб апрацаваць падзея, як і раней. Цягнем падзея. Але зараз мы збіраемся перайсці ад тыпу падзеі. Калі гэта SDL_Quit, мы збіраецца ўсталяваць побач просьба аднаго, як раней. Гэта апрацоўвае х у кут акна, так што наша акно сапраўды зачыняецца. У адваротным выпадку, калі мы атрымаем SDL клавішу націснутай падзея, якая азначае, што мы націснулі клавішу, тое, што мы збіраемся зрабіць, гэта мы збіраецца перайсці на гэтую рэч тут, які азначае: так event.key азначае ставіцца наш саюз падзей, пайсці і атрымаць ключ Структура падзея ў ім. Так што атрымліваецца, што гэта Саюз з'яўляецца ключавой структурай падзея. А потым перайсці да ключа Структура мерапрыемства яго поле называецца сімвал клавішы, а затым скан. І зноў, вызначана чытаў дакументацыя аб гэтым. Ключавое слова ўваходы даволі цікава. Вы можаце атрымаць коды сканавання або ключавыя коды. І гэта крыху тонкія, але дакументацыя даволі добра. Так што, калі мы бачым, што код для сканавання наша націсніце клавішу быць Вт або ўверх, мы збіраемся стварыць, роўнае 1. І тады мы вырвацца з гэтай перамыкача. Калі гэта ці налева, мы ўсталёўваем злева 1, ET далей, і гэтак далей, для ўніз і направа. Цяпер, у гэтай знешняй перамыкач, калі мы бачым ключ да падзеі, гэта азначае, што мы выпусцілі ключ ня, і мы больш не націскаючы яе. Так што я збіраюся сказаць, да раўняецца 0, левы роўны 0, 0 ўніз роўны, права роўны 0, і гэтак далей. І звярніце ўвагу, у нас ёсць у кожным з іх два выпадкі выправіць побач адзін з адным без асобнага кода у першым выпадку, які азначае, што няхай гэта будзе Пры S або прама тут, ён збіраецца выканаць гэты код. Так што гэта даволі зручна. Гэта засцерагае нас ад неабходнасці рабіць больш ўмовы і IFS і рэчы падобнае. Такім чынам, мы збіраемся, каб вызначэння хуткасці. Мы ўсталёўваем хуткасць у 0. Тады пры націску на і не працуе, то мы ўсталяваць у хуткасць для адмоўнага хуткасці. Запомніць адмоўным, таму што адмоўнае напрамак у ўверх. І станоўчы у напрамак ўніз. Калі націснутая і не ўверх, тады мы збіраецца ўсталяваць яго на станоўчай хуткасці, што азначае ісці ўніз па экране. Тое ж самае з левай і правай. А потым мы збіраемся абнавіць пазіцыі гэтак жа, як раней. Мы збіраемся зрабіць сутыкнення Выяўленне з ацэнкамі, але мы не збіраемся, каб скінуць Хуткасць, паколькі хуткасць за ўсё кіруецца клавіятурай. Але мы збіраемся скінуць пазіцыі, каб трымаць яго ў акне. І мы збіраемся, каб усталяваць пазіцыі ў структуры а затым зрабіць усё аказанне рэчы ад да. Такім чынам, давайце паглядзім, што ён робіць. Так што SRCS-- давайце паглядзім, гэта hello6_keyboard.c. О, няма. Такім чынам, мы атрымалі некаторыя папярэджання тут. І гэта проста кажа мы не праверыць для кожнага магчымага віду падзеі. Гэта нармальна, таму што ёсць 236 з іх, або так. Так што я збіраюся ігнараваць гэтыя папярэджання. Ён па-ранейшаму складзены добра. Так што я збіраюся гуляць у гэтую гульню. Гэта не рухаецца. Але цяпер, калі я пюрэ на маёй клавіятуры, Я магу зрабіць нейкі рух WASD тут, Я таксама выкарыстоўваць мае клавіш са стрэлкамі. І заўважце, нават калі я націску правай прама цяпер, гэта не выходзячы з акна, таму што я скінуць яго на кожным кадры. Так што гэта даволі ахайна. Вы можаце сабе ўявіць, рухаючыся вакол Марыё з некаторыя клавішы са стрэлкамі ці нешта падобнае. І так, Х робіць працу. Так канчатковы файл мы збіраемся глядзець, hellow7_mouse. Гэта аб атрыманні ўвод мышы. Такім чынам, у гэтым, мы імпартаваць матэматычную загаловак, таму што мы збіраемся, каб мець трохі матэматыкі тут. Усё тая ж старая, тыя ж старыя рэчы, прызначэння, тое ж самае старое, бачыў, што раней. Ну, гэта цікава. Так мы вярнуліся толькі праверка для SDL кінуць падзея. Чаму гэта? Такім чынам, вы можаце атрымаць ўвод мышы з падзеямі. Напрыклад, калі мыш перамяшчаецца, Вы атрымліваеце падзея для гэтага. Пры націску кнопкі мышы, Вы можаце атрымаць падзея для гэтага. Але ёсць яшчэ адзін, некалькі прасцей магчыма, API для атрымання ўвод мышы. І гэта проста SDL стан Get мышы. Так у мяне ёсць Int для х і у для пазіцыі курсора. Я перадаць яго SDL_GetMouseState, якая ўстанаўлівае іх. І гэта становішча ў сістэму каардынатаў вокны. Такім чынам, калі маса ў левым верхнім куце вокны, што б 0, 0. Цяпер, што я збіраюся зрабіць, гэта я збіраюся каб зрабіць трохі вектарнай матэматыкі. Б'юся аб заклад, вы думалі, не будзе Відаць, што ў CS50, але тут гэта. Я збіраюся зрабіць некаторыя вектар матэматыка, каб атрымаць вектар ад малюнка на курсор. І так чаму я павінен гэта адніманне тут? Ну, калі я проста выкарыстаў Dest .-- так Мне трэба, каб перавесці мышы х і ў на палову шырыні і вышыня малюнка, таму што я хачу цэнтры малюнак, якое будзе ісці да мышы, ня паходжанне ладу. Так што гэта проста, каб пераканацца, што я кажу аб цэнтры карцінкі тут. Тады мы атрымаем трохкутнік х і у, што розніца ад мэты з фактычным становішчам малюнка. І тады мы можам атрымаць адлегласць тут, што будзе Піфагора Тэарэма, корань квадратны з х раз х плюс у раз у. Зараз, каб прадухіліць дрыгаценне, і я магу паказаць Вы што гэта робіць, калі я не раблю гэтага, калі адлегласць паміж курсорам і цэнтр малюнка менш, чым пяць, Я проста не збіраюся, каб перамясціць малюнак. У адваротным выпадку, мы ўсталёўваем хуткасць. І мы ўсталюйце яго так, што хуткасць заўсёды будзе пастаяннай. І канчатковы вынік усяго гэта матэматыка, што малююнкі будзе рухацца ў кірунку курсора. Цяпер, атрымліваецца, што SDL_GetMouseState, у дадатак да усталяваўшы х і ў аргументы тут, ён таксама вяртае Int, што адпавядае ў стане кнопак мышы. Такім чынам, мы не чытаем, што непасрэдна, але мы можам выкарыстоўваць гэтыя макрасы, адзін пабітавае аператар, не страшна, толькі пабітавае і. Таму мы кажам, кнопкі, якая з'яўляецца вынікам нашай SDL_GetMouseState, калі і пабітавае і гэты макрас тут, SDL_BUTTON_LEFT. Так што гэта будзе проста вырашыць у растравым малюнку, што адпавядае у левай кнопкай мышы націснутая. І таму, калі пабітавае і адбываецца, і гэта ня роўны нулю, што азначае, пакінулі была націснутая кнопка, то мы на самай справе адбываецца, каб звесці на няма і х і ў хуткасці, які будзе проста зрабіць малюнак ўцёкі. Абнаўленне пазіцыі. Сутыкнення выяўленняў, бачыў яго усе перш, рэндэрынгу, усё ў парадку. Давайце зробім гэта. Такім чынам, вы атрымалі зрабіць SRCS = hello7_mouse.c. Выдатна. Няма памылак. І гульня. Дык вось у мяне ёсць мыш. І вобраз сапраўды чаканка мыш. Цяпер, у гульні вы робіце, можа быць, гэта як варожага чаканка ваш маленькі знак ці што заўгодна. Але тут у нас ёсць чаканка малюнка мышшу. І калі я націсніце, мыш пачынаецца чаканка малюнак і малюнак уцякаючы ад мышы. Так што гэта даволі халаднавата. І заўважце зноў, ёсць яшчэ выяўленне сутыкнення тут. Так што гэта фінал трохі дэма я стварыў тут. І давайце зірнем на яшчэ адну рэч. Такім чынам, вернемся сюды, я згадаў гэты дрыгаценне. Добра. Так што, калі адлегласць менш, чым пяць пікселяў, Я сядзеў х і ў хуткасць да нуля. Што адбудзецца, калі мы пазбавіцца ад гэтага? Так што я збіраюся зрабіць гэта проста. Калі ласка, прабачце гэтую жахлівую стыль, але мы закаментаваць правільны код. Так што я збіраюся выратаваць і зрабіць Тая ж каманда з перш чым зрабіць гэта. Добра. А цяпер што адбываецца? Добра. Мы па-ранейшаму прытрымліваючыся мышы, як і раней, але калі мы дабіраемся да мышы, мы атрымалі гэта грубае дрыгаценне. Што там адбываецца? Ну, у нашым вектары матэматыка, памятаю, мы былі прымаючы адлегласць паміж курсор і цэнтр малюнка? Ну, як тое, што падыходзіць 0, мы пачынаем атрымліваць як такога роду паводзіны вар'ята дзе выява з'яўляецца свайго роду як вагаецца вакол курсора. І гэта стварае гэты дрыгаценне. І гэта сапраўды непрыгожа. І вы, верагодна, не хочаце, каб вашыя гульні робіць, што калі гэта не нейкі адмысловы эфект. Дык вось чаму ў нас ёсць толькі ў гэтым адвольнае адрэзаць пяці пікселяў, дзе мы гаворым, калі гэта на працягу пяці пікселяў, мы добра. Нам не трэба, каб перанесьці малюнак больш. Дык вось тое, што там адбываецца. Так што гэта даволі шмат яго. Цяпер вы ведаеце, як стварыць акно, загрузіць малюнак, намаляваць малюнак у акне, атрымаць увод з клавіятуры, мышы атрымаць ўвод, ёсць куча іншых ўваход, што вы не ведаеце, як атрымаць, калі вы проста правесці Некалькі хвілін, гледзячы на ​​дакументацыі. Такім чынам, вы на самой справе маюць даволі некалькі інструментаў у вашым распараджэнні цяпер напісаць паўнавартасную гульню. Цяпер, кожная гульня неабходны аўдыё, але гук дакументацыя таксама даволі добра. І я гатовы паспрачацца, што калі Вы разумееце, усе рэчы, мы гаварылі пра сёння з малюнкі і паверхні, вокны, і ўсё тое, высветліць аўдыё API ня будзе, што дрэнна. Так што я з нецярпеннем чакаю сустрэчы што вы ствараеце з SDL.