Томас ЛИВЕЛИ: У реду.
Zdravo svima.
Ја сам Тхомас Ливели.
Овај семинар ће бити писање 2Д игара у Ц користећи СДЛ.
Тако да знам да сте сви питам, да, ја стварно
Желим да играм игрице и да игре, али оно што је ово СДЛ посао?
Тако СДЛ је Ц библиотека.
То стоји за Једноставно ДирецтМедиа Лаиер.
И то је крст платформа, Гаме Девелопмент библиотека.
Ради на Виндовс, Мац, Линук и иОС и Андроид.
Она управља ствари као што су приступ аудио системе
за рачунар, тастатуре, и миша, џојстика, ако су у прилогу.
На мобилном, може чак учинити тоуцх инпут и све то.
И наравно, да рукује графику, цртање ствари на екрану.
>> Тако да је врло широку примену, иако нисте можда чули за њега раније.
То је уграђен у, на пример, Валве Соурце Енгине,
која покреће игре као што су Портал и Теам Фортресс 2.
То је такође у веома великом броју индие игара које излазе,
тако да сам узбуђен да видим шта све ће бити одлука са њим.
>> На семинару циљеви су ти кренули да се развија са СДЛ.
Идемо да науче како да створи прозор игру.
Ми ћемо створити спрајтова, које су слике у својој игри
који могу кретати.
Идемо да науче како да и анимирати спрајтова,
па преместите их около, да да се мењају током времена.
И ми ћемо да научимо како за снимање тастатура и миш
улаз са рачунара.
Оно што нећемо говорити о данас је 3Д графика,
јер је то врло компликован субјект који немамо времена за.
Нећемо научити како да репродукцију звука на нашим играма.
И нећемо градити за било шта осим Линук.
>> Сада су упозорења да постоје, надам се, до краја семинара,
ћете бити задовољни СДЛ документација,
тако да ћете моћи да иду схватим како играти звук за себе.
Такође гради за Мац или ПЦ треба да раде потпуно исти као буилдинг фор Линук,
али подешавање ће бити мало другачија.
Дакле, требало би да можете да схватим како да раде те ствари
до краја данашњег семинара.
>> Дакле, за подешавање, идемо да користите виртуелну машину.
Ми бисмо користили ЦС50 ИДЕ, јер ми ћемо само да се пишу у Ц.
Али пошто ИДЕ није претраживач, ми Не можете креирати нове прозоре или екран
графика у њој.
Зато нам треба виртуелну машину.
Дакле, можете да пратите упутства овде у мануал.ЦС50.нет/апплианце/15~~побј
да инсталирате званични ЦС50 апарат, што је само Линук Виртуал
машина.
>> И онда кад имаш да је све сет их-- њега
Можда мало потрајати, јер веома велики довнлоад-- идеш
да раде у ВМ судо апт-гет упдате.
И то се заиста дешава за ажурирање сав софтвер
пакети на вашем виртуелној машини.
>> Након тога, идеш да покренете судо апт-гет инсталл, либсдл2-2.0-0,
либсдл2-дбг, либсдл2-дев, и додатно либсдл2-слика-2.0-0,
либсдл2-слика-дбг, и либсдл2-слика-Дев.
Па шта да радим?
То само инсталира дебуг информације, документацију, заглавља,
и бинарне за две библиотеке.
Редовно стари, СДЛ 2.0, а друга библиотека
зове СДЛ слике, која ћемо користити
за учитавање сликовне датотеке у нашу игру.
>> Дакле, када имате које такође да, управо када је пита,
само укуцајте да, притисните Ентер да инсталирате те пакете,
и онда би требало да буде добро да иде.
Тако да се код дистрибуције, ви Могу- Ох драга, то није ажуриран.
Осим ако имају гитхуб аццоунт-- ако имате гитхуб рачун,
можете да урадите ово Гит клон команде на репо
и да ће преузимање Гит Репо са свим кодом у њој,
тако да ћете морати код.
>> Ако немате ГитХуб рачун, оно што треба да урадите је тип
вгитхттпс: //гитхуб.цом/тливели/сдл семинар-- и овде је дифферент--
/арцхиве/мастер.зип.
Дакле, опет, то је потпуно исти УРЛ адреса, осим што ће бити
тливели / СДЛ_семинар / мастер.зип и ви вгит користе да преузмете тога.
И онда само могу унзип да архиву
и онда ћете имати све изворног кода.
Жао ми је због тога.
А онда код ће бити домаћин у у ЦС50 семинара је веб страница у пар
дана.
>> U redu.
Како да почнете писање сопствену игру?
Па, прва ствар ћемо желите да урадите
је погледате СДЛ документацију.
Ево ВМ.
И овде је веб страница.
Ја сам путовао да живим либсдл.орг.
Шта ћу да радим овде је ићи преко на бочну траку, под документације,
и кликните на вики.
То ће ме довести до вики да има већину документације за СДЛ.
Током на бочној траци овде, ми смо да кликнете АПИ по категоријама
јер ће дати УС леп поглед категорички
целе АПИ за СДЛ.
>> Тако, на пример, имамо основна иницијализација
и угасити, све врсте административне ствари за коришћење СДЛ,
и онда имамо одељак за приказивање ствари на екрану.
То је видео.
Улазни догађаји, то је добијање унос са тастатуре,
узимајући унос из миша, и џојстик, ако га имате чак.
Постоји повратне силе за ствари као игра контролора, који
нећемо да разговарамо.
А ево и звук.
А онда је ту гомила другог ствари које СДЛ може да уради за вас.
>> Али данас ћемо да се фокусирамо на иницијализацију овде,
приказивање слике у видеу секција, и руковање улазних догађаја.
Дакле, то су главни секције документације
да треба да бринемо о томе.
Само за забаву, ако пређемо овде и кликните на АПИ по имену,
можемо видети списак сваког једна ствар у СДЛ библиотеке.
Дакле, све ове функције, Набројани, структуре, луди количина ствари,
abecedni redosled.
И јасно, док знаш да радиш,
ово неће бити превише помоћи, због чега радимо АПИ по категоријама.
>> Дакле, хајде да почнемо.
Надам се да сам већ преузети код дистрибуције.
И шта можете да урадите је, зар не овде у ЦС50 апарата,
једноставно отворите терминал.
Idemo.
Дакле, ја сам већ преузета дистрибуција код користећи .зип
метход.
И ја сам га откопчао.
Дакле, овде је у СДЛ семинара господара.
Зато ћу да идем у тај директоријум.
И шта видимо овде је да имамо седам Ц фајлова.
И ово иде у коду идемо да гледамо данас.
Имамо мејкфајл.
И имамо ресурсе директоријум, који једноставно има слику
да ћете се видети ускоро.
>> Дакле, хајде да отворимо ове датотеке коришћењем Г-Едит уредника.
Дакле, желим да отворим све датотеке које почети са Поздрав и завршити са .ц.
Idemo.
Дакле, то је мала прозор, тако да смо Покушаћу да то буде већи.
Не, то оде.
>> U redu.
Дакле, овде је први Филе ћемо да погледамо.
То се зове хелло1_сдл.ц.
И све то ради је иницијализацију СДЛ библиотека, тако да можемо почети да га користите.
Како ти знаш да дође са овим кодом сами?
Па, ако погледамо преко у документацији
и идемо у иницијализацију и затворе поглавље,
то ће нам све рећи о томе како да покрене СДЛ.
Дакле, дефинитивно прочитати ово неки други пут.
То ће вам рећи све о томе шта се овде дешава.
Али, главни суштина је у томе да морамо да позовемо ову функцију СДЛ Ин Ит
и прође га шта врсте ствари желимо библиотека да се покрене.
Дакле, у нашем случају, ми ћемо само да покрене видео за сада,
тако да можемо почети са приказивањем слике.
>> Овде можете да видите да ли кликнемо на СДЛ у томе, ми
можете добити чак и више информација, укључујући повратну вредност.
Тако смо овде да га видим ретурнес нула на успех.
Дакле, у нашем коду, идемо у види ако не врати нула,
а ако не врати нула, тако да није био успешан,
онда ћемо једноставно штампање грешка користећи ову другу функцију,
СДЛ гет грешка, која враћа стринг описујући грешку која се догодила.
Ми ћемо исписати да еррор и онда смо само
да изадјете из програма са кодом грешке.
>> Затим још једна ствар која нам треба да урадите је да, пре него што програмских излаза,
ако успешно иницијализован СДЛ, само треба да га СДЛ одустану зову.
И то ће носити чишћење све унутрашње ресурсе СДЛ за нас.
Дакле, документација поново тамо--, Овде смо у иницијализацију
и затворила поглавље документације.
Можете само кликнути на Функција овде, СДЛ отказ,
можете прочитати све о томе као добро.
И много од ових функција документација страница
имате примере кода, тако да је ово је веома добар извор.
Дефинитивно проведем неко време читајући делове тхис вики
ако ћеш да урадиш ово за пројекат.
>> U redu.
Дакле, то је наш целокупни програм.
Шта можемо да урадимо сада је-- сам ће отворити мејкфајл овде,
па ћу да узмем погледајте како то ради.
И то је веома једноставна Макефиле, слично ономе што сте раније видели.
Једна од главних разлика да, ево, ово
ће убацити резултат трчања Ова команда, која сте већ
инсталиран ако сте инсталирали СДЛ.
И ово је наредба који ће генерисати
неке екстра заставе за компајлер.
>> Поред тога, ми смо га дајем Све уобичајене команде, као и
Ове две команде.
Тако да -лсдл2-имаге ручке повезивање у СДЛ Имаге Либрари.
И -ЛМ заправо управља повезивање у стандардном Ц Матх Либрари.
Дакле, нећемо требати они за све наше Ц фајлова,
али смо их ставили у тако да можемо користе исти Макефиле за све
без модификација.
>> Овамо у изворима, ово је место где бих
ставити датотеке које сте ишли саставити за ваш пројекат.
Али пошто сваки од мог Ц поднесе овде има главну функцију,
да ће се збунити ако их све у.
Зато ћу само рећи, за сада, хелло1_сдл.ц,
што је један смо управо гледали.
Дакле, ако се вратим преко овде, ја могу да правим.
И шта је урадио то је само састављен тај први фајл.
И онда можемо тип ./гаме, јер то је извршна је произведено.
И све што је урадио је штампање иницијализација успешна.
То смо и урадили нешто добро.
Али то је било некако досадан, јер нисмо видели прозор,
ништа није креће.
>> Тако велика, имамо СДЛ инитиализед.
Сада, хајде да пређемо на нешто мало занимљивије.
Дакле, овде имамо хелло2_виндов.ц, и ово ће бити нешто
комплекс Ц програм који иницира СДЛ као и раније,
осим сада и идемо да покрене СДЛ тајмер.
И то ће нас пустити приступити унутрашње тајмер
и користе функције које се односе на време.
>> И онда хајде да погледамо овде доле.
Оно што ми радимо јесте да имамо тај показивач до СДЛ прозора струцт који
ће бити креиран од стране овог позива функцији, СДЛ стварају прозор.
Дакле, ово је потребно много аргумената, па хајде да погледамо документације.
Па опет, ја ћу АПИ по категоријама, ја сам
иде доле на видео овде, а први секција, приказивање управљање прозора.
Дакле, овај одељак има тона ствари у њему,
али ако погледате кроз ове функције, ви ћете
види да је вероватно онај који смо Желим се зове СДЛ створи прозор,
што се дешава да се на самом врху.
>> И то је Документација за ову функцију.
Прозор ће имати наслов, једно к, и позицију на екрану,
да ће имати ширину, висина, а онда ће се предузети неке заставе.
Сада, ми уствари не занима било који од ових застава сада,
али ако желите да урадите нешто као да прозор преко целог екрана,
можете да погледате то.
За сада, ми ћемо само да користе ове посебне вредности,
СДЛ прозор, плус средини за к и И у реда
само да створи прозор у центру нашег екрана.
>> Дакле, то је оно што ради.
А ако се деси да буде прозор нулл, што значи да је грешка,
онда опет ћемо само да принт грешку користећи СДЛ гет грешку.
А онда зато што инитиализед СДЛ сада треба да га затворите.
Тако зовемо СДЛ прекинути пре враћа један за главни.
>> Дакле, имамо овај прозор отвори надам се.
А шта ћемо да урадите је да идемо
да позове СДЛ за 5.000 милисекунди, што је исто као пет секунди.
И када смо завршили са тим, то ће уништити прозор,
очистити СДЛ библиотеке, и изађете из програма.
Дакле, идемо напред и да то шута.
>> Тако да сада уместо промене мејкфајл сваки пут,
Ја једноставно могу да правим, и затим на командној линији,
кажу извори једнако и онда фајл смо изради.
Тако да је хелло2_виндов.ц.
Фантастично.
Нема еррос.
Сада, ако останемо нашу извршну, видимо овај прозор.
Сада постоји неколико Проблеми са прозора.
Можемо то кретати, али има ово позадина ђубре унутра.
Дакле, ми нисмо извући ништа, па је
пуна смећа, које је управо оно што очекујемо.
>> Осим тога, не можемо затворити прозор.
Ја притиском на овај Кс у угао и ништа се не дешава.
Тако ћемо видети како да поправи да се у мало.
Дакле, хајде да поправимо део где је Прозор је пуна смећа на првом месту.
Дакле, ако одемо у хелло3_имаге.ц, што можемо видети да смо додали неколико
више ствари овде.
Додали смо нову заглавље филе да се функције тајмера.
Мислим да смо то урадили у последњих једна, такође, и нисам споменуо.
Али сада јер смо рад са сликама,
морамо укључити СДЛ слика заглавље датотеке као добро.
Дакле, то је иста ствар као и пре, инитиализинг СДЛ овде,
Исто се баве стварањем прозоре.
Видели смо то раније сада.
>> Сада морамо да створимо нешто што се зове визуализации, који некако иде уз
са прозором.
Али то је нека врста апстрактна објекат који је
задужен за радио свих ових цртање операције до прозора.
И заправо одговара са програмом оптерећене
у графичког хардвера у вашем рачунар или телефон или било шта друго.
Тако су заставе желимо да прође то-- а можете погледати у документацији
За више детаља овде- се иде да се СДЛ рендер убрзан, што
значи да ће бити помоћу графичког хардвера
и то не само емулирано у софтверу.
>> И ми ћемо користити СДЛ рендерер ПРЕСЕНТВСИНЦ.
ВСинц је ствар која једноставно чини Ваши графика изгледају боље и спречава
ово се зове екран терор, где је половина
једног оквира и половини следеће фраме гет дравн истовремено
и изгледа грозно.
Али опет, можете да читате о томе на своју руку.
>> Дакле, имамо неке заставе овде.
И тако смо само да позовем ова функција СДЛ створи рендерер.
Ми ћемо му дати прозор да се друже са тим рендеровање.
Негативна значи да није брига шта Грапхицс Дривер ћемо користити.
Тако да би требало прилично увек бити негативна,
ако не знате о управљачким програмима за графику.
И онда ћемо тек тако да га прође наше заставе.
Дакле, ако је то враћа нулл, онда смо łтампања грешку као и обично,
али онда смо и идемо да уништи прозор
да почисти те ресурсе прије позива СДЛ отказ и врате.
>> Сада, занимљив део овде где смо се учита наш имиџ
користите ову функцију ИМГ_лоад.
Ово је једина функција идемо да користи од СДЛ Имаге Либрари.
То је једина нам треба.
То је функција која узима стринг то је пут било слике извора.
И то може бити .пнг, ГИФ, Битмап, било који од ових ствари.
И зато је ова функција је тако лепо.
То може носити прилично било ког формата.
Оптерећења га у меморији и складишти је као што назива СДЛ површину.
>> Сада су СДЛ површина је само струцт која представља сликовних података у меморији.
Дакле, можете прочитати више о да је у документацији два.
А ако то грешке, онда смо урадити целу ствар где
штампамо грешку, затворити ресурси, а затим напустио је програм.
Сада је занимљива ствар је, пре можемо извући ову слику на прозору,
морамо да заправо текстура бити.
Сада текстура одговара да сликовних података натоварених
у меморију графичког хардвера екипе.
>> Дакле, површина је у главни меморије, редовно меморија
да смо користили цео семестар, а текстура је у овом одвојеној ВРАМ
меморија која контроле графичке картице.
Тако зовемо ову функцију СДЛ_ЦреатеТектуреФромСурфаце.
Ми смо му дати нашу рендерер и нашу површину.
И онда смо уствари завршили са површином,
па ми ћемо само да га ослободи.
Ми не треба више.
И онда тако да ако овај позив ерроред и вратио нула,
онда ћемо да радимо целу грешка поново извештавање ствар.
>> U redu.
Овде смо да у неким Стварни рендеринг функције.
Дакле, зове СДЛ_РендерЦлеар и то пролази
визуализации повезана са нашим прозором једноставно чини прозор црнац.
Тако да уклања то ђубре које смо видели у наш прозор пре и чини црно.
И онда идемо звати СДЛ_РендерЦопи,
дајте му наше рендерер, наш текстуру.
И причаћемо о томе шта ова поља су у мало.
Али то ће узети податке текстуре
и копирајте га на наш Прозор за цртање слике.
Дакле, након што смо урадили ову копију подаци на нашој прозора,
морамо да урадимо ову додатну функцију зове СДЛ_РендерПресент.
>> И ово је занимљиво јер ово постаје
у теми званој двоструко баферовање.
Дакле, двоструко баферовање је техника која чини ти графика изгледају много боље.
Опет, она спречава да екран цепање Ја сам говорио о раније, где
имате два амортизера.
Ту је вратио у бафер меморија и предњи амортизер.
Предњи амортизер је буквално шта је на екрану у овом тренутку.
Дакле, ми радимо све ово драв варијације, као СДЛ рендер копију или СДЛ_РендерЦлеар
до задњег бафер.
Дакле, они модификују ствари у задњем пуферу.
Овде можемо да се овај цртеж зелени квадрат до задњег бафер.
>> Дакле, када смо урадили радимо наши рендер операције, које
Можда се заиста дуго време, шта ћемо да радимо
је замените буфферс.
Тако да само треба буквално Предњи амортизер и назад бафер
и пребацује их, тако да, тренутно,
у једној операцији, уместо можда стотине или хиљаде,
Све наше ново доноси објекти су на екрану.
И то спречава ствари као освежење екрана
када смо само сте нацртали пола од наших објеката за рам.
Зато морамо да позовемо СДЛ_РендерПресент, као и
као СДЛ_РендерЦопи.
>> Опет, ми ћемо само да чекају пет секунди.
Онда ћемо очистити наше ресурсе.
Имамо доста висе овај пут.
И онда ћемо тек тако да изадјете из програма.
Па хајде да урадимо то.
Идем да куцате маке, а затим извори једнака хелло-- ово је сада 3имаге.ц.
У реду, то саставио нема грешака.
И можете видети овде сам сада сам извучена моју слику, Здраво, ЦС50!
у нашем прозору, који нестаје после пет секунди.
>> Дакле, ово још увек има проблема, зар не?
Ово није добар апликација, јер када покушам да затворите прозор,
ništa se ne dešava.
То је к увек није одговарајућа.
Дакле, хајде да погледају следећи фајл, хелло4аниматион.
Дакле, ово је фајл који ће увести
кретање и кретање у нашу слику.
Тако ћемо урадити исто као и пре,
иницира СДЛ, креирајте прозор, креирајте рендерер,
учитати слику у меморије, направите текстуру.
Видели смо све то раније.
Дакле, ово је ново.
Ми ћемо имати структуру под називом СДЛ РЕЦТ, која је само правоугаоник.
Ако одемо тамо, можемо урадите потрагу за СДЛ Рецт,
и можете да видите да је то веома једноставна структура.
Она има к, и за положај, и он
има ширину и висину за величина правоугаоника.
>> Па шта ћемо да урадимо је да смо да дефинишу овај СДЛ Рецт дест,
за одредиште.
И ово је место на екрану где
ћемо бити цртеж наш имиџ, зар Дакле,
ако ћемо да будемо померањем слике око,
онда је дестинација у којој ћемо извући слику
треба да се креће.
Тако ћемо звати Функција СДЛ_КуериТектуре.
И приметио сам пролазу адресу од дест.в, којих је ширина,
и дест.х, који је висина.
И тако ће СДЛ_КуериТектуре да сачувате у тим областима ширина
а висина нашег текстуре.
>> И шта онда ћу да урадите је да идем
да подесите дест.к да буде прозор ширине минус дест.в, што је
ширина спрајт, подељено са 2.
И то ће да га подесите тако да је слика центриран
у нашем прозору, у реду?
Тако да сада имам и позицију.
И то ће бити променљива која је
мења, јер ћемо бити померањем слике у и правцу.
А сада имамо нешто назива анимација петље.
>> Како се ради анимација?
Па, људско око може да детектује 12 разликује слике у сваком другом, у реду?
Дакле, ако фласх 12 Имаге картице на мене у секунди, видео сам сваки од тих слика
као свој посебан појединачну слику.
Сада, ако фласх више слике на мене у другом,
онда ће почети ми еие да их замагли заједно
и ја бих га доживљавају као покрету, уместо једног посебног слике.
Тако, на пример, филмове и телевизију, они фласх слике на вас 24 пута
други.
Дакле, то је 24 фрејмова у секунди.
Цомпутер екрани, с друге стране, често на 60 фрејмова у секунди.
То је њихова брзина освежи.
Тако често рефресх слика на екрану.
Дакле, наш циљ ће бити 60 фрејмова у секунди за наше игре.
>> Дакле, хајде да видимо да је у коду.
Дакле, за сваки оквир, прво смо да обришете прозор.
Ово је општи образац.
Увек јасно да тај прозор сваки оквир, а затим
учинити све цртежу операције, а онда на крају,
не РендерПресент да покаже све у оквиру.
А онда ћеш има чекања на крају
да сачека до следећег оквир треба да почне.
>> Дакле, ако сам радила пуно комплекс рачунање овде
да је више од 16 милисекунди, било би немогуће за мене
да се ту брзину од 60 који Желео сам, јер је сваки оквир је
предуго да израчуна.
Осим тога, ми смо стварно ради врста занемарљивог обима посла
овде, јер само ту једна ствар ми цртање.
Тако да сам само чекати 1/60 оф а друго, што је дужина
од рама између њих оквирима.
Тако сам некако претварам ради сав мој посао потребно нула времена.
Али у праву игру, морао би да одузмемо
износ времена је било потребно да урадите све то раде из твог времена одмарања.
>> И тако, шта сам ја заправо ради у овој петљи?
Ја јасно прозор.
Ја поставити дест.и, који је инт на мој стварни положај година баци у инт.
Сада желим флоат резолуцију за моју и позицију у мојој игри,
али онда да стварно драв га на екран,
треба интс, јер је у јединицама пиксела, тако да је оно што је од ливеног је за.
Ја ћу да скренем слику.
Дакле, ово је извор правоугаоник.
И ово је дестинација правоугаоник.
Тако да сам положио нула за извор правоугаоник
да кажем да желим да скренем цело моје текстуру.
Али ако је имао много текстуре у игри
и сви су у једној великој текстуре карте који је напуњен у СДЛ као само један
текстура, можеш користите изворни правоугаоник
да изабере једну од мањих текстуре, један од мањих Спритес,
од тог великог текстура карте.
>> Дакле, опет, ја пролазу мој рендер, мој текстура, а сада дестинација.
Ово ће бити где у прозор ће то бити извући.
А онда, јер ја анимирање несто, морам покрет,
Ја ћу да се ажурирање Сприте став о сваком кадру.
Дакле, имам ову сталну под називом свитак убрзати у јединицама пиксела у секунди.
Сада, сваки пут кад радимо покрет, оквир је само 1/60 секунде.
Зато ћу подијелити да је 60.
А онда, хајде да видимо, ја сам одузимањем да од и положаја.
Зашто ја одузимањем?
Доћи ћемо до тога за тренутак.
Онда сам очистим своје ресурсе и програм је готово.
>> Дакле, хајде да то.
Дакле, идемо у Марка СРЦС = хелло4 аниматион.ц, у реду?
Игра.
Eto ga.
Дакле, имам га сцроллинг Уп Тхе прозор, што је прилично згодно.
Али чекај, ја сам одузимањем од и позицији сваки пут.
Шта се тамо дешава?
Па, испоставило се да је у СДЛ, и У ствари, у већини компјутерске графике,
порекло за координатног система је у горњем левом углу прозора.
>> Тако је позитиван правац иде х преко вашег прозора са десне стране.
И позитиван правац И Заправо иде доле.
Дакле, опет, пореклу у у горњем левом делу вашег прозора,
позитивна година правац је доле, и позитивна к је десно.
Дакле, када сам одузети од И положај, то је
ће да иде на негативно и правац који је горе прозора.
Дакле, то је оно што се тамо дешава.
Кул.
>> Хајде да погледамо следећу датотеку.
Овде је део од показати где смо коначно
Гет Тхат Кс у углу прозора то би требало да затворите прозор
na posao.
Дакле, шта се дешава?
Ми инитиализе СДЛ, стварају прозор, створи рендерер, убаците слику,
створи текстуре Као што смо већ видели.
Имамо исту дестинацију правоугаоник као и раније, исти позив да се упита текстуру.
Али овај пут, онда смо ће поделити ширину
а висина наше одредиште за 4.
То само има ефекат сцалинг наш имиџ доле када
смо га приказати у прозору са четири.
Дакле, то је прилично згодно.
Можемо само да смањи тек тако.
Ми ћемо почети спрајт у центру екрана.
И сада имамо Кс и И брзину и обојица ће почети од нуле.
>> Ово је погрешан фајл.
Žao mi je.
Дакле, то је све истина.
То је све још у овом фајлу.
Имамо поделу за 4 и свега.
Дакле, овде имамо Кс и И положај за центар прозора.
А ми му дати почетну брзину ове константне брзине која
Верујем да је 300 пиксела по секунди.
Сада, имамо ово Инт могли само тако бити Боолеан под називом близу тражио.
И уместо да раде Инфините Лооп на тајмер овде,
ћемо се анимирање као док крају није тражио.
>> Како да обрадимо догађаје?
Па, СДЛ редови до догађаја у буквално ред иза сцене.
И онда сваки оквир, можемо декуеуе догађаје
из тог реда, користећи овај позив СДЛ_ПуллЕвент.
И опет, сигурно да читате о томе у документацији.
Има много више детаља и много више функција можете користити са овим.
Ми то прође адреса ове ствари, СДЛ_Евент
да смо овде на стеку имам.
>> Дакле, шта је СДЛ_Евент?
Јер, СДЛ, ако погледамо у су доцументатион-- хајдемо
види, АПИ по категорији, улаз догађаји, догађај руковање,
можемо да погледамо број од различитих догађаја овде
и можемо видети да је читава тона од њих.
Па шта је ово СДЛ_Евент ствар?
СДЛ_Евент је синдикат.
Вау, шта је синдикат?
Вероватно никад чуо за то раније.
И то је у реду.
>> Синдикат је нешто као струцт, осим струцт
има простора за све њени поља и меморија,
док је синдикат има само довољно простора да стане највећи
један од њених поља, што га значи може само похранити један од његових поља
у време које врсте има смисла за догађаје, зар не?
Можемо имати тастатуру догађај или прозор догађај,
али један догађај не може бити истовремено и тастатура догађај и прозор догађај,
па би било глупо да се простор за како оних у нашем догађаја заједнице.
Дакле, ако сте желели да направите сопствену унију,
тачно изгледа исто као стварање градитеља,
осим што ми користимо кључну реч синдиката уместо струцт кључне речи.
И запамтите, за све од ствари унутар вашег синдиката,
стварна променљива да је синдикат може имати само једну од тих вредности
u vreme.
>> Дакле, како можемо рећи шта врсту догађаја ми пало са овог реда?
Па, можемо да тестирамо за евент.типе.
А ако је то једнако да СДЛ_Куит, знамо
то је догађај који је генерисана када смо
ударио тог Кс у углу прозора.
И можемо поставити близу затражио је једнака 1.
Све остало је само нека анимација који сте раније видели.
Дакле, идемо напред и да ово и видите како то функционише.
Зато ћу да куцате маке а онда СРЦС = хелло5_евентс.ц.
Evo ga.
Игре.
>> Сада, можемо видети да је заиста смањити за четири.
И сад је поскакивала око.
Имам детекцију колизије дешава са стране прозора
да можемо да погледамо.
А шта се дешава када одем да га затворим?
То затвара.
Фантастично.
Ми смо добили тај догађај.
И ми смо га руковати.
>> Дакле, хајде да погледамо уназад у коду.
Па како сам га добити поскакивање около?
Не заборавите да поставим и к и И почетку на брзинама.
А брзина је позитиван константна, тако да је
ће се то почевши од иде доле и десно.
>> Сада, сваки рам, поред руковање догађаја који су се десили, можда
Идем да открије да ли је мој вилењак покушава да изађе кроз прозор.
Дакле, можемо да урадимо да је само проверавам к_пос са 0, и_пос 0, а затим
такође к_пос и и_пос са ширина и висина прозора прозор.
Обратите пажњу на сам одузимају ширина спрајт.
А то је зато што ако нисам одузмите ширина спрајт,
то би само проверите да ли порекло Сприте
није ишао испред прозора.
Али ми желимо целог ширина Сприте
да увек буду унутар прозора и цела висина Сприте
да увек буду унутар прозора.
Дакле, то је оно што је одузимање је за.
Много геометрије овде могу бити корисно да се извуче
на папиру са координата Систем да видим шта се дешава.
>> Дакле, ако ја сударају, само једноставно ресет позицију
тако да се не иде из екрана.
И ја ћу, ако одбија на једном од бочних,
Ја ћу негирати к брзина тако да
почиње одбијајући у другом правцу.
Слично томе, ако погоди горњи или доњи,
Идем да подесите брзину и једнака негативне и брзине,
тако да ће се одбити.
Дакле, то је само како смо то овде.
>> И ажурирање позиције баш као што смо раније видели,
дели са 60, јер смо Само руковање 1/60 секунде.
А онда рендеринг, исто као и раније.
И то је све што се дешавало ове датотеке.
Дакле, то је како радимо догађаја.
Главна ствар да одузме овде ово СДЛ_ПуллЕвент функција.
И дефинитивно треба да прочитате Документација више о СДЛ_Евент
синдикат, јер овај тип података веома, веома важно, јер смо га користити
за све врсте догађаја.
>> На пример, ми га користити за тастатуру догађаји, што је оно што је овај фајл за.
Дакле, шта имамо?
Имамо исту ствар као и раније, инитиализе СДЛ, креирали прозор,
створити рендерер, учитати слику у меморију, креирајте текстуру.
Опет, идемо у имају овај дест правоугаоник,
ћемо величину слике од четири, чине га мало мања.
Сада ћемо почети Сприте у центру екрана.
Али овај пут, идемо да подесите почетни Кс и И брзине на нулу,
јер је тастатура да контролишу оне.
И поред тога, идемо у пратите ових варијабли
горе, доле, лево и десно.
И то ће задржати траг да ли смо
притисну тастере на тастатури да одговарају горе, доле, лево,
и десно.
>> Дакле, ово је врста фенси јер можемо користити В, А, С,
Д овде, или стварни стрелицама.
Видећемо да је у пар секунди.
Дакле, идемо да обрадимо догађај баш као и пре.
Ми повуците догађај.
Али сада ћемо укључите тип догађаја.
Ако је СДЛ_Куит смо ће поставити близу
тражи да један, баш као и пре.
То управља к у угао прозора,
тако да је наш прозор у ствари затвара.
>> У супротном, ако добијете СДЛ кључ доле догађај, што значи да притисне тастер,
онда шта ћемо да урадимо је да смо да укључите ову ствар овде,
која меанс-- тако евент.кеи значи третирати наша манифестација унију,
иди и донеси кључ Структура догађај у њему.
Тако испада да је ово Унија је кључни догађај структура.
А онда идите на тастеру Структура манифестације његово поље
зове кеисим а затим Сцанцоде.
И опет, дефинитивно прочитајте документација о томе.
Кључна реч улази веома интересантно.
Можете добити кодове скенирања или тастер кодове.
И то је мало суптилно, али документација је прилично добра.
>> Дакле, ако видимо скенирање кода за наш притисак на тастер бити В или горе,
ћемо поставити једнак 1.
И онда цемо направити паузу од тог прекидача.
Ако је А или лево, поставили смо оставили на 1 ет итд, итд, за доле и десно.
Сада, у овом спољашњем свитцх, ако видимо кључ до догађај,
То значи да смо пуштени кључ а ми не да га притиском.
Зато ћу да кажем горе једнако 0, лево једнако 0, доле једнако 0, у праву
једнако 0, и тако даље.
>> А погледајте имамо у сваки од њих два случаја пут одмах поред једни другима
без посебном шифром за прво случају, што
значи да ли је и С или доле овде,
да ће да изврши овај код.
Дакле, то је прилично згодно.
То спречава нас да да учине више услови и ИФС и ствари
тако.
>> Тако ћемо одредите брзину.
Поставили смо брзину на 0.
Онда, ако се притисне горе а не доле, онда смо
поставите брзину и на негативне брзину.
Запамтите негативан, јер је негативна ии правац је горе.
А позитивна година правац је доле.
Ако се притисне а не горе, онда смо
ће га поставити на позитивном брзину, што значи иде доле на екрану.
Иста ствар је и са леве и десне стране.
>> А онда ћемо ажурирати позиције као и пре.
Ми ћемо да урадимо судар детекција са границама,
али нећемо да ресетује се брзина, јер је брзина само
контролисан од стране тастатуре.
Али, ми ћемо ресетовати позиције да остане у прозору.
И ми ћемо да подесите позиције у струцт
а онда све рендеринг ствари од раније.
Дакле, хајде да видимо шта ради.
Тако да СРЦС-- да видимо, ово је хелло6_кеибоард.ц.
>> O, ne.
Тако смо добили неке упозорења овде.
И то је, просто речено, нисмо проверите за сваку могућу врсту
догађаја.
То је у реду, јер има 236 њих или тако нешто.
Зато ћу игнорисати те упозорења.
То је увек састављен у реду.
Зато ћу да играм игру.
Не помера се.
Али сада, када сам масх на тастатури, Могу да урадим нешто ВАСД кретање овде,
Ја користим своје тастере са стрелицама као добро.
И приметио, иако сам притиском на десни сада,
не иде кроз прозор, јер сам га ресетовати на сваком раму.
Дакле, то је прилично згодно.
Можете замислити креће Марио са неке стрелице или тако нешто.
И да, Кс ради.
>> Дакле, коначна фајл идемо да погледате, хеллов7_моусе.
Ово је о томе да улаз миша.
Дакле, у овоме смо увоз из математике заглавље,
јер ћемо имати мало математике овде.
Исто старо, исто старе ствари, дестинација, иста стара, видио.
Па, ово је интересантно.
Дакле, вратили смо се само провера за СДЛ отказ догађај.
Zašto je to?
Дакле, можете добити улаз миша са догађајима.
Као када се миш помера, добијате догађај за то.
Када се притисне тастер миша, можете добити догађај за то.
>> Али постоји још један, помало једноставније можда, АПИ за добијање улаз миша.
И то је једноставно СДЛ Гет миш држава.
Дакле, имам инт за Кс и година за положај курсора.
Ја га прећи на СДЛ_ГетМоусеСтате, који поставља ово.
А ово је позиција у координатном систему прозора.
Дакле, ако је маса у горњем левом углу прозора, да би 0, 0.
>> Сада, шта ћу да урадим је да одлазим да урадите мало вектора математике.
Кладим се да сте мислили да не би види да у ЦС50, али ту је.
Ја ћу да урадим нешто вектор математика да се вектор
са слике у курсора.
И зашто морам ово одузимање овде?
Па, ако сам ја користио дест тако .-- Морам да преведе Моусе Кс
и и за половину ширине и висине слике,
јер желим центру слика да иде у правцу миша,
не порекло слике.
>> Дакле, то је само да се уверите да говорим о центру слике овде.
Онда смо добили Делта Кс и И, који је разлика од циља
на стварног положаја слике.
И онда можемо добити дистанцира овде, који
ће бити Питагорина теорема, квадратни корен од к
тимес х плус и пута год.
>> Сада да спречи јиттер, и ја могу показати ви шта то ради ако не урадим ово,
ако растојање између курсора и слика центар је мањи од пет,
Ја само нећу да померите слику.
У супротном, поставили смо брзину.
Ми смо га поставили тако да брзина ће увек бити константна.
И нето резултат свега ово математика је да слике
ће се кретати ка курсора.
>> Сада, испада да СДЛ_ГетМоусеСтате,
Поред постављања Кс и И аргументи овде,
такође враћа инт која одговара са стањем тастера миша.
Тако да не могу то да прочитам директно, али можемо
користите ове макрое, један битовима оператер, а не да се страшно,
само битовима и.
Зато ми кажемо дугмад, што је резултат наше СДЛ_ГетМоусеСтате, ако је то
и битовима и, овај макро Овде, СДЛ_БУТТОН_ЛЕФТ.
>> Дакле, ово ће једноставно решити да битмапи да одговара
на лево дугме миша под притиском.
И тако ако битовима и јавља се и то је
нуле, што значи лево дугме је притиснуто,
онда ћемо заправо да се негира и Кс и И брзине,
који ће само направити слику бег.
Упдате позиције.
Сударе детекције, видио све раније, рендеринг, у реду.
Хајде да га.
Дакле, имаш да срцс = хелло7_моусе.ц.
Veliki.
Нема грешке.
И игра.
>> Дакле, овде имам миша.
А слика је заиста јурим миша.
Сада, у игри сте се, можда ово је као непријатељску Цхасинг
твоја мала лик или било шта друго.
Али овде имамо слика јури миша.
И када кликнем, миш почиње јури слику
па је слика бежећи од миша.
Дакле, то је баш кул.
И обавештење опет, ту је још судара детекција овде.
>> Тако да је коначни мало Демо сам поставио овде.
И хајде да погледамо још једну ствар.
Тако се овде, поменуо сам ову јиттер.
U redu.
Дакле, ако растојање мање од пет пиксела, Ја сам постављање Кс и И брзину на нулу.
Шта се дешава ако се ослободимо тога?
Зато ћу само ово.
Молим вас, опростите овај стравичан стил, али смо коментарисали да правилно кода.
Зато ћу спасити да и урадите иста команда од раније да га направи.
>> U redu.
И сад шта се дешава?
Dobro.
Још увек пратећи миш као и раније,
али када дођемо до миша, имамо ову бруто јиттер.
Шта се тамо дешава?
Па, у нашем вектор математика, запамтите да смо
узимајући удаљеност између цурсор и центар слике?
Па, као да приступи 0, почнемо да се
као ову врсту лудог понашања где је слика некако
као осцилирају око курсора.
И то је стварање овог јиттер.
И то је стварно ружно.
И вероватно не желите да ваши игре то радити,
осим ако је нека врста специјалног ефекта.
>> Зато имамо само овај произвољно
одсечен од пет пиксела, где ми кажемо ако је у року од пет пиксела, добро смо.
Не морамо више да померите слику.
Дакле, то је оно што се тамо дешава.
>> Дакле, то је прилично је много.
Сада знате како да креирате прозор, учитати слику,
нацртајте слику на прозору, да улаз тастатура, миш се улаз,
постоји гомила другог улаз да не би
знате како да добијете ако само провести Неколико минута лоокинг ат документације.
Дакле, ви заправо имају доста Неколико алата на располагању сада
да напише пуноправно игру.
>> Сада, свака утакмица треба мало звук, али аудио документација
је такође прилично добро.
И ја сам спреман да се кладим да ако сте разумели све ствари
причали смо о данас са слике, и површине,
прозори, и онда све схватите аудио АПИ није
ће бити тако лоше.
Тако Радујем се видимо шта да креирате са СДЛ.