1 00:00:00,000 --> 00:00:05,069 2 00:00:05,069 --> 00:00:06,110 THOMAS жив: Во ред. 3 00:00:06,110 --> 00:00:07,450 Здраво на сите. 4 00:00:07,450 --> 00:00:08,690 Јас сум Томас Жив. 5 00:00:08,690 --> 00:00:15,160 Овој семинар ќе биде пишување 2D игри во C користење SDL. 6 00:00:15,160 --> 00:00:17,970 Па знам дека вие ќе бидете сите прашува, да, јас навистина 7 00:00:17,970 --> 00:00:22,050 сакаат да играат игри и да се направи игри, но она што е ова SDL бизнис? 8 00:00:22,050 --> 00:00:25,320 Па SDL е библиотека C. 9 00:00:25,320 --> 00:00:28,270 Таа се залага за едноставниот DirectMedia слој. 10 00:00:28,270 --> 00:00:31,340 И тоа е крстот платформа, игра библиотека развој. 11 00:00:31,340 --> 00:00:37,160 Таа работи на Windows, Mac, Линукс, па дури и IOS и Андроид. 12 00:00:37,160 --> 00:00:40,380 Таа се справува со вакви работи пристап до системи за аудио 13 00:00:40,380 --> 00:00:44,900 за компјутер, тастатура, и глувчето, џојстици, ако тие се во прилог. 14 00:00:44,900 --> 00:00:48,300 На мобилен, дури може и да го стори допир Влезен и сето тоа. 15 00:00:48,300 --> 00:00:53,030 И, се разбира, таа се справува со графика, цртање работите на екранот. 16 00:00:53,030 --> 00:00:56,470 >> Така што е многу широко се користи, иако што не може да се чуе на тоа порано. 17 00:00:56,470 --> 00:01:00,860 Тоа е вградено во, на пример, Извор моторот вентил е, 18 00:01:00,860 --> 00:01:04,970 кој моќта игри како што се Портал и Тим тврдина 2. 19 00:01:04,970 --> 00:01:08,680 Тоа е, исто така, во многу голем број на инди игри кои доаѓаат надвор, 20 00:01:08,680 --> 00:01:13,545 па јас сум возбуден за да види она што го сите ќе се прави со него. 21 00:01:13,545 --> 00:01:20,000 >> Целите на семинарот се за да добиеш е утврдено да се развива со SDL. 22 00:01:20,000 --> 00:01:22,700 Ние ќе треба да научат како да се создаде прозорец игра. 23 00:01:22,700 --> 00:01:26,130 Ние ќе треба да се создаде sprites, кои се на сликите во вашата игра 24 00:01:26,130 --> 00:01:27,744 кои можат да се движат наоколу. 25 00:01:27,744 --> 00:01:29,910 Ние ќе треба да научат како и да се анимираат sprites, 26 00:01:29,910 --> 00:01:32,910 па да ги движите наоколу, направи им се менуваат со текот на времето. 27 00:01:32,910 --> 00:01:35,580 И ние ќе треба да научат како за снимање на тастатура и глувче 28 00:01:35,580 --> 00:01:38,240 влез од компјутер. 29 00:01:38,240 --> 00:01:41,550 Она што ние нема да се зборува за денес е 3D графика, 30 00:01:41,550 --> 00:01:45,520 бидејќи тоа е многу комплицирана предмет што немаме време за. 31 00:01:45,520 --> 00:01:49,010 Ние нема да ги учат како да се Репродукција на аудио на нашите игри. 32 00:01:49,010 --> 00:01:53,300 И ние не ќе биде градење за ништо освен Линукс. 33 00:01:53,300 --> 00:01:58,330 >> Сега постојат предупредувања дека, се надевам дека до крајот на семинарот, 34 00:01:58,330 --> 00:02:01,660 ќе ви биде удобно со документацијата SDL, 35 00:02:01,660 --> 00:02:05,370 па ќе бидат во можност да одат дознаам како да се игра на аудио за себе. 36 00:02:05,370 --> 00:02:12,150 Исто така, градење за Mac или PC, треба да работат иста како градење за Linux, 37 00:02:12,150 --> 00:02:14,700 но поставувањето ќе да биде малку поинаква. 38 00:02:14,700 --> 00:02:17,700 Па затоа треба да биде во можност да дознаам како да се направи овие работи 39 00:02:17,700 --> 00:02:20,900 до крајот на денешниот семинар. 40 00:02:20,900 --> 00:02:26,980 >> Така и за се постави, ние ќе да се користи виртуелна машина. 41 00:02:26,980 --> 00:02:31,010 Ние ќе го користи на CS50 ИРО, бидејќи ние сме само ќе треба да се пишува во В. 42 00:02:31,010 --> 00:02:35,120 Но, бидејќи на ИРО не е интернет пребарувач, ние не можат да се создадат нови прозорци или приказ 43 00:02:35,120 --> 00:02:36,410 графика во неа. 44 00:02:36,410 --> 00:02:38,450 Па ние треба на виртуелната машина. 45 00:02:38,450 --> 00:02:47,790 За да можете да ги следите инструкциите тука во manual.CS50.net/appliance/15 46 00:02:47,790 --> 00:02:53,290 да го инсталирате официјална CS50 апаратот, која е само Линукс виртуелна 47 00:02:53,290 --> 00:02:55,110 машина. 48 00:02:55,110 --> 00:02:58,090 >> А потоа еднаш имате дека сите во собата up-- тоа 49 00:02:58,090 --> 00:03:02,090 може да потрае малку повеќе време, бидејќи многу голем download-- си оди 50 00:03:02,090 --> 00:03:07,060 да се кандидира во В.М. sudo apt-get ажурирање. 51 00:03:07,060 --> 00:03:09,410 И тоа е навистина се случува за да обновите сите софтвер 52 00:03:09,410 --> 00:03:12,670 пакети на вашата виртуелна машина. 53 00:03:12,670 --> 00:03:20,130 >> После тоа, ви се случува да се кандидира sudo apt-get инсталирате, libsdl2-2.0-0, 54 00:03:20,130 --> 00:03:27,960 libsdl2-dbg, libsdl2-dev, и дополнително libsdl2-слика-2,0-0, 55 00:03:27,960 --> 00:03:32,560 libsdl2-слика-dbg, и libsdl2-слика-dev. 56 00:03:32,560 --> 00:03:33,640 Значи она што не? 57 00:03:33,640 --> 00:03:38,440 Кој само го инсталира за дебагирање информации, документација, хедери, 58 00:03:38,440 --> 00:03:41,260 и бинарни датотеки за две библиотеки. 59 00:03:41,260 --> 00:03:45,090 Редовните стари, SDL 2.0, и друга библиотека 60 00:03:45,090 --> 00:03:50,110 наречен SDL слика, која ние сме ќе биде со користење на 61 00:03:50,110 --> 00:03:54,560 да се вчита на датотеки со слики во нашата игра. 62 00:03:54,560 --> 00:03:57,860 >> Значи откако ќе го имаат тоа, исто така, дека, токму кога се прашува: 63 00:03:57,860 --> 00:04:01,100 само го пишувате да, притиснете Enter се инсталираат тие пакети, 64 00:04:01,100 --> 00:04:04,430 и тогаш треба да бидете добро да отидевме. 65 00:04:04,430 --> 00:04:14,800 Па да се добие правила за дистрибуција, може can-- о драга, тоа не е ажуриран. 66 00:04:14,800 --> 00:04:18,480 Освен ако имате GitHub account-- ако имаш сметка GitHub, 67 00:04:18,480 --> 00:04:24,450 можете да го направите тоа на Git клон команда на репо 68 00:04:24,450 --> 00:04:30,490 и дека ќе го преземе целиот Git репо со сите го кодот во неа, 69 00:04:30,490 --> 00:04:31,700 така што ќе имаат код. 70 00:04:31,700 --> 00:04:36,470 >> Ако не го имаат GitHub сметка, што треба да направите е тип 71 00:04:36,470 --> 00:04:48,867 wgithttps: //github.com/tlively/sdl seminar-- и тука тоа е different-- 72 00:04:48,867 --> 00:04:49,700 /archive/master.zip. 73 00:04:49,700 --> 00:04:55,610 74 00:04:55,610 --> 00:04:59,220 Значи, повторно, дека е иста URL-то, освен тоа се случува да биде 75 00:04:59,220 --> 00:05:09,010 tlively / SDL_seminar / master.zip и што го користите за да ја преземете wgit тоа. 76 00:05:09,010 --> 00:05:12,940 И тогаш ќе може само отпакувате таа архива 77 00:05:12,940 --> 00:05:14,900 и тогаш ќе имаме целиот изворен код. 78 00:05:14,900 --> 00:05:17,580 Толку жал за тоа. 79 00:05:17,580 --> 00:05:23,880 А потоа го кодот исто така, ќе биде домаќин на веб-страница на семинарот CS50 во неколку 80 00:05:23,880 --> 00:05:25,230 дена. 81 00:05:25,230 --> 00:05:26,590 >> Во ред. 82 00:05:26,590 --> 00:05:29,932 Па, како да започнете испишува нашата сопствена игра? 83 00:05:29,932 --> 00:05:31,890 Па, првото нешто ние се случува да сакаат да се направи 84 00:05:31,890 --> 00:05:34,740 е да се погледне на SDL документација. 85 00:05:34,740 --> 00:05:37,020 Значи тука е В.М.. 86 00:05:37,020 --> 00:05:38,720 И тука е веб-страница. 87 00:05:38,720 --> 00:05:40,340 Сум се отвори за да живеат libsdl.org. 88 00:05:40,340 --> 00:05:43,110 89 00:05:43,110 --> 00:05:48,140 Она што јас ќе одам да направите тука е да се премине на страничната лента, според документацијата, 90 00:05:48,140 --> 00:05:51,040 и кликнете на вики. 91 00:05:51,040 --> 00:05:56,870 Ова ќе ме донесе на вики дека има најголем дел од документацијата за SDL. 92 00:05:56,870 --> 00:06:01,360 Во текот на страничната лента тука, ние сме ќе кликнете на API по категорија, 93 00:06:01,360 --> 00:06:04,300 затоа што се случува да се даде ни убав категорични поглед 94 00:06:04,300 --> 00:06:07,770 на целата API за SDL. 95 00:06:07,770 --> 00:06:12,390 >> Така на пример, имаме основните иницијализација 96 00:06:12,390 --> 00:06:18,380 и затвори, сите вид на административни работи за користење на SDL, 97 00:06:18,380 --> 00:06:21,630 а потоа имаме делот за прикажување на работите на екранот. 98 00:06:21,630 --> 00:06:23,000 Тоа е видео. 99 00:06:23,000 --> 00:06:25,790 Влезни настани, и тоа е добивање на влез од тастатура, 100 00:06:25,790 --> 00:06:29,710 добивање на информации од глувчето, и на џојстик, ако го имаат дури. 101 00:06:29,710 --> 00:06:32,901 Има сила повратни информации за работите како игра контролори, кои 102 00:06:32,901 --> 00:06:34,150 ние нема да се зборува. 103 00:06:34,150 --> 00:06:35,630 И тука е аудио. 104 00:06:35,630 --> 00:06:38,940 А тука е и еден куп други SDL работи кои може да направи за вас. 105 00:06:38,940 --> 00:06:43,830 >> Но, денес ние ќе треба да се фокусираат за иницијализација тука, 106 00:06:43,830 --> 00:06:48,332 прикажување на слики во видео дел, и ракувањето со влезни настани. 107 00:06:48,332 --> 00:06:50,290 Значи овие се главните делови од документацијата 108 00:06:50,290 --> 00:06:53,050 дека треба да се грижиш. 109 00:06:53,050 --> 00:06:57,170 Само за забава, и ако одиме во текот тука и кликнете на API, со име, 110 00:06:57,170 --> 00:07:04,350 може да се види листа на секој единствена работа во SDL библиотека. 111 00:07:04,350 --> 00:07:11,330 Така што сите овие функции, enumerations, структури, лудо износ на работи, 112 00:07:11,330 --> 00:07:12,820 азбучен ред. 113 00:07:12,820 --> 00:07:14,580 И јасно, до знаеш што правиш, 114 00:07:14,580 --> 00:07:19,100 ова не се случува да се биде премногу корисен, кој е зошто тоа го правиме на API по категорија. 115 00:07:19,100 --> 00:07:20,810 >> Па ајде да започнете. 116 00:07:20,810 --> 00:07:25,680 Се надевам дека веќе сте симнати правила за дистрибуција. 117 00:07:25,680 --> 00:07:30,070 И така што можете да направите е, нели тука во CS50 апаратот, 118 00:07:30,070 --> 00:07:31,150 едноставно отвори терминал. 119 00:07:31,150 --> 00:07:33,750 120 00:07:33,750 --> 00:07:34,440 Еве ќе одиме. 121 00:07:34,440 --> 00:07:40,740 Па јас сум веќе преземале дистрибуција кодот користејќи .zip 122 00:07:40,740 --> 00:07:41,690 метод. 123 00:07:41,690 --> 00:07:43,140 И јас сум го отпакува. 124 00:07:43,140 --> 00:07:46,120 Па тука е во SDL господар семинарот. 125 00:07:46,120 --> 00:07:49,750 Па јас ќе одам да одам во таа листа. 126 00:07:49,750 --> 00:07:55,310 И она што го гледаме овде е дека имаме седум Ц датотеки. 127 00:07:55,310 --> 00:07:58,070 И ова се случува да го кодот ние ќе треба да се бара во денес. 128 00:07:58,070 --> 00:08:00,040 Имаме makefile. 129 00:08:00,040 --> 00:08:06,950 И ние имаме директориум ресурси, кој едноставно има слика 130 00:08:06,950 --> 00:08:09,070 дека ќе се видат наскоро доволно. 131 00:08:09,070 --> 00:08:16,060 >> Значи, да се отвори овие датотеки користење на уредувачот на Г-Уреди. 132 00:08:16,060 --> 00:08:22,000 Па сакам да ги отворите сите датотеки што започне со здраво и да заврши со .C. 133 00:08:22,000 --> 00:08:23,380 Еве ќе одиме. 134 00:08:23,380 --> 00:08:28,180 Значи тоа е мал прозорец, па ние сме ќе се обидат да се направи што поголема. 135 00:08:28,180 --> 00:08:28,900 Не, тоа си отиде. 136 00:08:28,900 --> 00:08:32,836 137 00:08:32,836 --> 00:08:34,570 >> Во ред. 138 00:08:34,570 --> 00:08:37,959 Па, еве го првиот датотека ние ќе треба да се погледне. 139 00:08:37,959 --> 00:08:39,000 Таа се вика hello1_sdl.c. 140 00:08:39,000 --> 00:08:41,890 141 00:08:41,890 --> 00:08:47,980 И сето тоа го прави е да се иницијализира на SDL библиотека, така што ние може да почнат да го користат. 142 00:08:47,980 --> 00:08:51,550 Како ќе знаете што доаѓаат со овој код себе? 143 00:08:51,550 --> 00:08:53,850 Па, ако се погледне во текот на на документација 144 00:08:53,850 --> 00:08:58,040 и ние одиме во иницијализација и затвори дел, 145 00:08:58,040 --> 00:09:02,230 тоа се случува да ни речат за тоа како да се иницијализира SDL. 146 00:09:02,230 --> 00:09:06,630 Значи дефинитивно се прочита сето тоа друг пат. 147 00:09:06,630 --> 00:09:09,230 Тоа се случува да ви кажам на сите за она што се случува тука. 148 00:09:09,230 --> 00:09:14,360 Но, главната сржта на проблемот е во тоа што ние треба да се јавите на оваа функција SDL во него 149 00:09:14,360 --> 00:09:18,910 и да го споделуваат она што видови на нештата ние сакаме на библиотеката да се иницијализира. 150 00:09:18,910 --> 00:09:23,620 Значи, во нашиот случај, ние сме само ќе да се иницијализира на видео за сега, 151 00:09:23,620 --> 00:09:26,690 за да можеме да започнете прикажување на слики. 152 00:09:26,690 --> 00:09:32,370 >> Тука, можете да видите ако ние кликнете на SDL во него, ние 153 00:09:32,370 --> 00:09:36,160 може да се добие дури и повеќе информации, вклучувајќи вратената вредност. 154 00:09:36,160 --> 00:09:39,050 Така можеме да видиме тука дека тоа returnes нула на успех. 155 00:09:39,050 --> 00:09:43,320 Така што во нашиот код, ние ќе треба да види дали тоа не го врати нула, 156 00:09:43,320 --> 00:09:47,020 а ако тоа не го врати нула, така што не беше успешен, 157 00:09:47,020 --> 00:09:50,650 тогаш ние ќе треба да едноставно печатење грешка користење и друга функција, 158 00:09:50,650 --> 00:09:56,260 SDL добиете грешка, која враќа стринг опишување на грешка која се случи. 159 00:09:56,260 --> 00:09:58,510 Ние ќе треба да се печати дека грешка, а потоа ние сме само 160 00:09:58,510 --> 00:10:02,270 ќе излезете од програмата со грешка во кодот. 161 00:10:02,270 --> 00:10:06,470 >> Потоа уште една работа што ни треба да направите е, пред програма излегува, 162 00:10:06,470 --> 00:10:10,830 ако ние успешно се иницијализира SDL, ние само треба да го откажете SDL јавам. 163 00:10:10,830 --> 00:10:15,750 И што се случува да се справи со чистење сите внатрешни ресурси SDL за нас. 164 00:10:15,750 --> 00:10:21,240 Така документација there-- повторно, тука сме во иницијализација 165 00:10:21,240 --> 00:10:23,640 и затвори секција на документацијата. 166 00:10:23,640 --> 00:10:26,680 Вие само може да кликнете на функцијата тука, SDL престанам, 167 00:10:26,680 --> 00:10:28,700 и можете да ги прочитате сите за тоа како добро. 168 00:10:28,700 --> 00:10:31,400 И многу од нив се функционира документација страници 169 00:10:31,400 --> 00:10:35,630 имаме пример код, така што ова е многу добар ресурс. 170 00:10:35,630 --> 00:10:39,610 Дефинитивно, поминете некое време читање делови на ова вики 171 00:10:39,610 --> 00:10:42,520 ако си оди за да се направи ова за еден проект. 172 00:10:42,520 --> 00:10:43,760 >> Во ред. 173 00:10:43,760 --> 00:10:46,590 Значи тоа е целата наша програма. 174 00:10:46,590 --> 00:10:53,935 Што можеме да направиме сега is-- сум да ги отворат makefile тука, 175 00:10:53,935 --> 00:10:56,150 па јас ќе одам да се земе погледнете како тоа работи. 176 00:10:56,150 --> 00:10:59,500 И тоа е многу едноставен makefile, слично на она што сум видел. 177 00:10:59,500 --> 00:11:04,010 Една од главните разлики е во тоа што, еве, овој 178 00:11:04,010 --> 00:11:07,870 се случува да внесете резултат на работењето на оваа команда, кој веќе сте го 179 00:11:07,870 --> 00:11:10,850 инсталиран ако сте го инсталирале SDL. 180 00:11:10,850 --> 00:11:13,230 И ова е команда кој ќе се генерира 181 00:11:13,230 --> 00:11:16,710 некои екстра знамиња за компајлерот. 182 00:11:16,710 --> 00:11:22,050 >> Во прилог на тоа, ние сме давајќи сите вообичаените команди, како и 183 00:11:22,050 --> 00:11:23,430 овие две заповеди. 184 00:11:23,430 --> 00:11:30,270 Па рачките на -lsdl2-слика поврзување во SDL сликата библиотека. 185 00:11:30,270 --> 00:11:36,200 И -lm всушност се справува со поврзување во стандардниот C математика библиотека. 186 00:11:36,200 --> 00:11:40,630 Па ние не се случува да треба оние за сите наши Ц датотеки, 187 00:11:40,630 --> 00:11:43,900 но ние едноставно ги стави во, така што можеме да ја користат истата makefile за сè 188 00:11:43,900 --> 00:11:44,816 без измени. 189 00:11:44,816 --> 00:11:46,970 190 00:11:46,970 --> 00:11:50,080 >> Овде во извори, ова е местото каде што би 191 00:11:50,080 --> 00:11:53,680 стави на датотеки што ви се случува да ги собере за вашиот проект. 192 00:11:53,680 --> 00:11:57,570 Но, бидејќи секој еден од моите C додадени фајлови: тука има главната функција, 193 00:11:57,570 --> 00:12:00,000 тоа се случува да се збунети ако ние ги стави сите во. 194 00:12:00,000 --> 00:12:06,930 Па јас ќе одам да кажам, сега за сега, hello1_sdl.c, 195 00:12:06,930 --> 00:12:11,150 што е онаа што само ја погледна. 196 00:12:11,150 --> 00:12:18,740 Значи, ако јас се врати во текот тука, јас може да се направи. 197 00:12:18,740 --> 00:12:22,160 И она што го правеше тоа е само Составувач е дека првата датотека. 198 00:12:22,160 --> 00:12:28,780 И потоа можеме да напишете ./game, бидејќи тоа е извршна ја произведува. 199 00:12:28,780 --> 00:12:31,660 И сето тоа го правеше беше за печатење иницијализација успешна. 200 00:12:31,660 --> 00:12:33,300 Па ние го сторивме нешто во право. 201 00:12:33,300 --> 00:12:36,200 Но, тоа беше вид на досадни, бидејќи ние не го види на прозорец, 202 00:12:36,200 --> 00:12:37,900 ништо не се движат наоколу. 203 00:12:37,900 --> 00:12:41,030 >> Толку голема, добивме SDL иницијализира. 204 00:12:41,030 --> 00:12:43,520 Сега, ајде да се движи кон нешто малку поинтересна. 205 00:12:43,520 --> 00:12:54,700 Значи тука имаме hello2_window.c, и ова се случува да биде малку повеќе 206 00:12:54,700 --> 00:13:00,010 комплекс С програма која иницијализира SDL како и порано, 207 00:13:00,010 --> 00:13:04,250 освен сега ние сме, исто така, се случува за да се иницијализира SDL тајмер. 208 00:13:04,250 --> 00:13:07,720 И ова се случува да ги споделите со нас пристапите на внатрешната тајмер 209 00:13:07,720 --> 00:13:10,550 и да користите функции кои се однесуваат на времето. 210 00:13:10,550 --> 00:13:11,920 >> А потоа да ги погледнеме овде долу. 211 00:13:11,920 --> 00:13:16,840 Она што го правиме е имаме оваа покажувачот на некоја SDL прозорец struct, која 212 00:13:16,840 --> 00:13:21,160 ќе бидат креирани од овој повик на функцијата, SDL создаде прозорец. 213 00:13:21,160 --> 00:13:25,380 Сега, ова е потребно многу аргументи, па ајде да одиме да се погледне на документација. 214 00:13:25,380 --> 00:13:27,930 Значи, повторно, јас ќе одам да API-то по категорија, јас сум 215 00:13:27,930 --> 00:13:33,820 Одејќи кон видеото тука, како и првата секција, прикажување на прозорецот за управување. 216 00:13:33,820 --> 00:13:36,470 Па овој член има еден тон работи во него, 217 00:13:36,470 --> 00:13:39,970 но ако се погледне преку овие функции, ќе 218 00:13:39,970 --> 00:13:43,620 види дека веројатно оној ние сакам се нарекува SDL создаде прозорец, 219 00:13:43,620 --> 00:13:46,600 која се случува да бидат во право на врвот. 220 00:13:46,600 --> 00:13:49,080 >> И така ова е документација за оваа функција. 221 00:13:49,080 --> 00:13:53,710 На прозорецот ќе има наслов, на x и y позиција на екранот, 222 00:13:53,710 --> 00:13:56,960 тоа се случува да имаат ширина, висина, а потоа тоа се случува да се земе некои знамиња. 223 00:13:56,960 --> 00:14:01,220 Сега, ние всушност не се грижат за било кој од овие знамиња, токму сега, 224 00:14:01,220 --> 00:14:04,560 но ако сака да направи нешто како да се направи со полно прозорец на екранот, 225 00:14:04,560 --> 00:14:07,920 можете да ги разгледаме во тоа. 226 00:14:07,920 --> 00:14:13,190 За сега, ние сме само ќе да ги користат овие посебни вредности, 227 00:14:13,190 --> 00:14:18,775 SDL прозорец плус центриран за x и y, со цел 228 00:14:18,775 --> 00:14:21,800 само да се создаде прозорец во центарот на вашиот екран. 229 00:14:21,800 --> 00:14:24,370 >> Значи тоа е она што го прави. 230 00:14:24,370 --> 00:14:27,960 И ако се случи да биде прозорец нула, што значи дека има грешка, 231 00:14:27,960 --> 00:14:32,570 потоа повторно ние сме само ќе печати на грешка при користење SDL грешка добие. 232 00:14:32,570 --> 00:14:36,570 А потоа, бидејќи ние се иницијализира SDL, ние сега треба да го затворите. 233 00:14:36,570 --> 00:14:40,900 Па ние го нарекуваме SDL престанам пред враќајќи се еден за главните. 234 00:14:40,900 --> 00:14:42,905 >> Така што мораме да го прозорецот отворен надевам. 235 00:14:42,905 --> 00:14:44,613 И она што се случува да направите е да одиме 236 00:14:44,613 --> 00:14:50,340 за да го повикате SDL за 5000 милисекунди, која е иста како и пет секунди. 237 00:14:50,340 --> 00:14:55,640 И кога ќе завршиш со тоа, тоа се случува да се уништи прозорец, 238 00:14:55,640 --> 00:14:59,470 исчисти на библиотеката SDL, и за излез од програмата. 239 00:14:59,470 --> 00:15:05,240 Значи, да се оди напред и да се откаже од тоа да се сними. 240 00:15:05,240 --> 00:15:08,660 >> Па сега, наместо на промена на makefile во секое време, 241 00:15:08,660 --> 00:15:12,180 Јас едноставно не може да се направи, и тогаш на командната линија, 242 00:15:12,180 --> 00:15:16,090 велат извори еднакви и потоа датотеката сме составувањето. 243 00:15:16,090 --> 00:15:17,090 Така, тоа е hello2_window.c. 244 00:15:17,090 --> 00:15:21,390 245 00:15:21,390 --> 00:15:21,890 Фантастично. 246 00:15:21,890 --> 00:15:22,970 Не erros. 247 00:15:22,970 --> 00:15:26,085 Сега, ако се кандидира нашата извршна, гледаме овој прозорец. 248 00:15:26,085 --> 00:15:27,960 Сега постојат неколку проблеми со прозорци. 249 00:15:27,960 --> 00:15:32,820 Можеме да ја движите наоколу, но тоа има оваа позадина ѓубре во него. 250 00:15:32,820 --> 00:15:34,660 Значи ние не сме подготвени ништо, и така тоа е 251 00:15:34,660 --> 00:15:38,210 само полн со ѓубре, што е доста тоа што го очекуваме. 252 00:15:38,210 --> 00:15:41,010 >> Покрај тоа, ние не можеме да го затворите прозорецот. 253 00:15:41,010 --> 00:15:44,780 Јас сум притискање на ова X во агол и ништо не се случува. 254 00:15:44,780 --> 00:15:47,840 Па ќе видиме како да се поправи дека во малку. 255 00:15:47,840 --> 00:15:51,750 Значи, да се поправи на делот каде прозорецот е полна со ѓубре во прв план. 256 00:15:51,750 --> 00:16:00,850 Значи, ако ние одиме во текот на hello3_image.c, она што може да се види е дека додадовме неколку 257 00:16:00,850 --> 00:16:03,360 повеќе работи тука. 258 00:16:03,360 --> 00:16:08,740 Додадовме оваа нова глава на датотеката за да добијат функции на тајмерот. 259 00:16:08,740 --> 00:16:11,490 Претпоставувам дека тоа го направивме во последните една, исто така, и јас не се споменува. 260 00:16:11,490 --> 00:16:13,550 Но, сега, бидејќи ние сме работа со слики, 261 00:16:13,550 --> 00:16:18,720 ние треба да се вклучи SDL слика аватар фајлови, како и. 262 00:16:18,720 --> 00:16:22,087 Па тоа е исто што и пред, иницијализацијата SDL тука, 263 00:16:22,087 --> 00:16:23,420 Истото се занимаваат со креирање на прозорци. 264 00:16:23,420 --> 00:16:25,380 Видовме дека пред сега. 265 00:16:25,380 --> 00:16:29,870 >> Сега ние треба да се создаде нешто што се нарекува на изведувач, кој вид на оди заедно 266 00:16:29,870 --> 00:16:30,800 со прозорецот. 267 00:16:30,800 --> 00:16:33,860 Но, тоа е еден вид на апстрактен објект кој е 268 00:16:33,860 --> 00:16:37,370 задолжен за правење на сите овие цртање операции на прозорецот. 269 00:16:37,370 --> 00:16:41,580 И тоа, всушност, соодветствува на програма натоварен 270 00:16:41,580 --> 00:16:47,880 во графика хардвер во вашата компјутер или вашиот телефон или whatever. 271 00:16:47,880 --> 00:16:51,005 Па на знамиња што сакаме да помине it-- и можете да погледнете во документацијата 272 00:16:51,005 --> 00:16:56,160 за да добиете повеќе детали here-- се случува што треба да се направат SDL забрзана, што 273 00:16:56,160 --> 00:16:58,550 значи тоа се случува да биде со користење на хардвер за графика 274 00:16:58,550 --> 00:17:01,490 и не само имитирани во софтверот. 275 00:17:01,490 --> 00:17:07,390 >> И ние ќе треба да се користи SDL Renderer PRESENTVSYNC. 276 00:17:07,390 --> 00:17:12,280 VSYNC е нешто што едноставно го прави вашата графичка изгледаат подобро и го спречува 277 00:17:12,280 --> 00:17:14,970 тоа нешто наречено екран терор, каде што половина 278 00:17:14,970 --> 00:17:17,720 на една рамка и половина на следната рамка се подготвени во исто време 279 00:17:17,720 --> 00:17:20,056 и тоа изгледа страшно. 280 00:17:20,056 --> 00:17:23,130 Но, повторно, можете да одат прочитате во врска со тоа на своја. 281 00:17:23,130 --> 00:17:24,319 >> Па ние имаме некои знамиња тука. 282 00:17:24,319 --> 00:17:27,810 И така ние сме само ќе да се јавите оваа функција SDL создаде изведувач. 283 00:17:27,810 --> 00:17:31,340 Ние ќе треба да го даде на прозорецот да се дружат со кој изведувач. 284 00:17:31,340 --> 00:17:34,520 Негативен значи дека ние не она што се грижат графички драјвер ние ќе треба да се користи. 285 00:17:34,520 --> 00:17:36,603 Така што треба доста секогаш да биде негативен, 286 00:17:36,603 --> 00:17:39,010 освен ако знаете за графика драјвери. 287 00:17:39,010 --> 00:17:41,650 А потоа ние сме само ќе за да го пренесеме нашето знаме. 288 00:17:41,650 --> 00:17:47,240 Значи, ако тоа враќа NULL, тогаш ние сме печатењето на грешка, како и обично, 289 00:17:47,240 --> 00:17:49,550 но тогаш ние сме, исто така, се случува да се уништи прозорец 290 00:17:49,550 --> 00:17:54,970 да се исчисти пред тие ресурси повикувајќи SDL престанам и да се вратат. 291 00:17:54,970 --> 00:17:58,110 >> Во овој момент, интересен дел овде е местото каде што се вчита нашата слика 292 00:17:58,110 --> 00:18:00,870 користење на оваа функција IMG_load. 293 00:18:00,870 --> 00:18:04,050 Ова е единствената функција ние си оди да го користите од SDL сликата библиотека. 294 00:18:04,050 --> 00:18:05,480 Тоа е само еден што ни треба. 295 00:18:05,480 --> 00:18:12,950 Тоа е што се јавува во низа тоа е патот на било која слика ресурс. 296 00:18:12,950 --> 00:18:18,024 И тоа може да биде .png, на GIF, bitmap, ниту една од овие работи. 297 00:18:18,024 --> 00:18:19,690 А тоа е зошто оваа функција е толку убаво. 298 00:18:19,690 --> 00:18:22,560 Тоа може да се справи доста било кој формат. 299 00:18:22,560 --> 00:18:27,240 Го товари во меморијата и продавници како нешто што се нарекува еден SDL површина. 300 00:18:27,240 --> 00:18:34,660 >> Сега е SDL површината е само struct кој претставува слика на податоци во меморијата. 301 00:18:34,660 --> 00:18:38,054 За да можете да прочитате повеќе за дека во документацијата две. 302 00:18:38,054 --> 00:18:40,720 И ако ова грешки, тогаш ние сме случува да се направи целата работа каде 303 00:18:40,720 --> 00:18:44,480 ние печати грешка, ги затвориме нашите ресурси, а потоа се повлече од програмата. 304 00:18:44,480 --> 00:18:48,970 Сега интересна работа е, пред ние може да нацрта оваа слика до прозорецот, 305 00:18:48,970 --> 00:18:51,390 ние треба да се, всушност, го текстура направи. 306 00:18:51,390 --> 00:18:54,460 Сега текстура одговара на сликата податоци натоварен 307 00:18:54,460 --> 00:18:57,820 во меморијата на хардвер е графичката е. 308 00:18:57,820 --> 00:19:00,720 >> Па површина е во главната меморија, редовни меморија 309 00:19:00,720 --> 00:19:05,550 дека ние сме биле со користење на сите семестар, и текстура е во овој посебен VRAM 310 00:19:05,550 --> 00:19:09,410 меморија дека контролите на графички картички. 311 00:19:09,410 --> 00:19:13,170 Па ние го нарекуваме оваа функција SDL_CreateTextureFromSurface. 312 00:19:13,170 --> 00:19:17,104 Ние го даде нашиот изведувач и нашите површина. 313 00:19:17,104 --> 00:19:19,020 А потоа ние сме всушност направено со помош на површината, 314 00:19:19,020 --> 00:19:20,311 па ние сме само ќе ја бесплатно. 315 00:19:20,311 --> 00:19:22,210 Ние не им е потребно повеќе. 316 00:19:22,210 --> 00:19:26,650 И тогаш па ако овој повик errored и се врати нула, 317 00:19:26,650 --> 00:19:29,630 тогаш ние ќе треба да се направи целата известување нешто повторно грешка. 318 00:19:29,630 --> 00:19:30,920 >> Во ред. 319 00:19:30,920 --> 00:19:34,810 Еве, ќе се добие во некои вистинските функции рендерирање. 320 00:19:34,810 --> 00:19:37,730 Па повикувајќи SDL_RenderClear и донесување 321 00:19:37,730 --> 00:19:42,550 на изведувач поврзани со нашиот прозорец едноставно го прозорецот одат црна. 322 00:19:42,550 --> 00:19:47,650 Па тоа ги отстранува тоа ѓубре што сме го виделе нашите прозорецот пред да и го прави црно. 323 00:19:47,650 --> 00:19:50,750 И тогаш ние ќе за да го повикате SDL_RenderCopy, 324 00:19:50,750 --> 00:19:53,010 го даде нашиот Renderer, нашите текстура. 325 00:19:53,010 --> 00:19:55,800 И ние ќе се зборува за она што овие области се во малку. 326 00:19:55,800 --> 00:19:57,830 Но, што се случува да земе податоци текстурата 327 00:19:57,830 --> 00:20:03,100 и ископирајте излез нашите прозорец за да се подготви сликата. 328 00:20:03,100 --> 00:20:07,020 Значи по ова сме го правеле копија на податоци врз нашиот прозорец, 329 00:20:07,020 --> 00:20:11,180 ние треба да направите оваа дополнителна функција наречен SDL_RenderPresent. 330 00:20:11,180 --> 00:20:15,360 >> И ова е интересно затоа што тоа добива 331 00:20:15,360 --> 00:20:18,770 во темата наречена двојно визуелниот. 332 00:20:18,770 --> 00:20:24,380 Па двојно визуелниот е техника со која го прави вашиот графики изгледа многу подобро. 333 00:20:24,380 --> 00:20:28,240 Повторно, го спречува тој екран кинење Зборував претходно, каде 334 00:20:28,240 --> 00:20:29,590 имате два амортизери. 335 00:20:29,590 --> 00:20:32,260 Има еден назад во тампон меморија и пред пуфер. 336 00:20:32,260 --> 00:20:36,410 Предната тампон е буквално она што е на вашиот екран во моментот. 337 00:20:36,410 --> 00:20:42,070 Па правиме сите овие привлече варијации, како SDL направат копија или SDL_RenderClear 338 00:20:42,070 --> 00:20:43,080 на задната тампон. 339 00:20:43,080 --> 00:20:44,800 Па тие менувате работите во задниот тампон. 340 00:20:44,800 --> 00:20:48,970 Тука би можеле да бидеме цртање ова зелен квадрат до задниот тампон. 341 00:20:48,970 --> 00:20:52,300 >> Па потоа кога ќе завршиш прави нашите прават операции, кои 342 00:20:52,300 --> 00:20:55,700 може да потрае навистина долго време, она што ние ќе треба да се направи 343 00:20:55,700 --> 00:20:57,860 се префрлиш на амортизери. 344 00:20:57,860 --> 00:21:00,720 Така што буквално само зема пред тампон и назад тампон 345 00:21:00,720 --> 00:21:02,990 и да им се префрлува, па дека, моментално, 346 00:21:02,990 --> 00:21:06,630 во една операција, наместо можеби стотици или илјадници, 347 00:21:06,630 --> 00:21:10,910 сите на нашето ново изречена објекти се на екранот. 348 00:21:10,910 --> 00:21:13,160 И овој го спречува работи како освежување на екранот 349 00:21:13,160 --> 00:21:16,710 кога ние сме подготвени само половина на нашите објекти за рамката. 350 00:21:16,710 --> 00:21:21,280 Па тоа е причината зошто ние треба да се јавите SDL_RenderPresent, како и 351 00:21:21,280 --> 00:21:23,320 како SDL_RenderCopy. 352 00:21:23,320 --> 00:21:25,749 >> Повторно, ние сме само ќе да се чека за пет секунди. 353 00:21:25,749 --> 00:21:27,540 Тогаш ние ќе треба да исчисти нашите ресурси. 354 00:21:27,540 --> 00:21:29,540 Имаме сосема малку повеќе тоа време. 355 00:21:29,540 --> 00:21:31,750 А потоа ние сме само ќе за излез од програмата. 356 00:21:31,750 --> 00:21:35,350 Па ајде да го направите тоа. 357 00:21:35,350 --> 00:21:41,880 Одам да напишеш шминка, а потоа и извори еднаква hello-- сега 3image.c е оваа. 358 00:21:41,880 --> 00:21:49,632 359 00:21:49,632 --> 00:21:52,240 Сите во право, дека составил нема грешки. 360 00:21:52,240 --> 00:21:57,210 И можете да видите тука сум сега извлечен мојот имиџ, Здраво, CS50! 361 00:21:57,210 --> 00:22:00,560 за нашите прозорец, кој исчезнува по пет секунди. 362 00:22:00,560 --> 00:22:02,090 >> Сега, ова се уште има проблеми, нели? 363 00:22:02,090 --> 00:22:05,750 Ова не е добра апликација, затоа што кога ќе се обидат да го затворите прозорецот, 364 00:22:05,750 --> 00:22:06,500 ништо не се случува. 365 00:22:06,500 --> 00:22:09,540 Дека x се уште не е одговорен. 366 00:22:09,540 --> 00:22:17,420 Па ајде да ги разгледаме во Следниот датотека, hello4animation. 367 00:22:17,420 --> 00:22:21,850 Значи ова е датотека што се случува да се воведе 368 00:22:21,850 --> 00:22:25,124 движење и движењето на нашиот имиџ. 369 00:22:25,124 --> 00:22:27,040 Па ние ќе треба да се направи на истото како и досега, 370 00:22:27,040 --> 00:22:30,190 иницира SDL, да креираат, прозорец, создаде Renderer, 371 00:22:30,190 --> 00:22:33,030 вчита сликата во меморија, се создаде текстура. 372 00:22:33,030 --> 00:22:35,090 Што сум го видел сето тоа порано. 373 00:22:35,090 --> 00:22:36,770 Сега, ова не е ново. 374 00:22:36,770 --> 00:22:42,305 Ние ќе треба да имаат структура наречена една SDL rect, што е само правоаголник. 375 00:22:42,305 --> 00:22:49,950 Ако одиме во текот тука, можеме да направите пребарување за SDL rect, 376 00:22:49,950 --> 00:22:54,040 и можете да видите дека тоа е многу едноставна структура. 377 00:22:54,040 --> 00:22:56,760 Таа има X, Y за позицијата, и тоа 378 00:22:56,760 --> 00:23:02,080 има ширина и висина за големината на правоаголникот. 379 00:23:02,080 --> 00:23:07,785 >> Значи она што ние ќе треба да направите е да сме ќе се дефинира овој SDL rect дест, 380 00:23:07,785 --> 00:23:09,480 за дестинација. 381 00:23:09,480 --> 00:23:14,130 И ова е местото на екранот каде 382 00:23:14,130 --> 00:23:16,005 ние ќе треба да се цртање нашиот имиџ, право, па 383 00:23:16,005 --> 00:23:17,880 ако ние се случува да се биде поместување на сликата наоколу, 384 00:23:17,880 --> 00:23:20,300 тогаш дестинација каде ние ќе треба да се подготви сликата 385 00:23:20,300 --> 00:23:22,620 треба да се движат наоколу. 386 00:23:22,620 --> 00:23:24,910 Па ние ќе треба да се јавите на оваа SDL_QueryTexture функција. 387 00:23:24,910 --> 00:23:27,550 388 00:23:27,550 --> 00:23:33,500 И ќе забележите дека јас сум поминува адреса на dest.w, што е ширина, 389 00:23:33,500 --> 00:23:36,950 и dest.h, кој е на висина. 390 00:23:36,950 --> 00:23:40,425 И така ќе SDL_QueryTexture за чување во тие области ширината 391 00:23:40,425 --> 00:23:41,675 а висината на нашите текстура. 392 00:23:41,675 --> 00:23:44,680 393 00:23:44,680 --> 00:23:47,030 >> А потоа она што јас ќе одам да направите е, ќе одам 394 00:23:47,030 --> 00:23:55,580 да се постави dest.x да биде прозорец ширина минус dest.w, што е 395 00:23:55,580 --> 00:23:59,000 ширината на фигура, поделено со 2. 396 00:23:59,000 --> 00:24:03,860 И ова се случува да го постави така дека сликата е совршено центриран 397 00:24:03,860 --> 00:24:06,780 во нашиот прозорец, во ред? 398 00:24:06,780 --> 00:24:08,652 Па сега имам позиција y. 399 00:24:08,652 --> 00:24:10,360 И ова се случува да да биде променлива која е 400 00:24:10,360 --> 00:24:16,390 се менува, затоа што ние ќе треба да биде поместување на сликата во правец на y. 401 00:24:16,390 --> 00:24:19,050 И сега имаме нешто наречен анимација јамка. 402 00:24:19,050 --> 00:24:21,180 >> Па како не анимација работа? 403 00:24:21,180 --> 00:24:27,630 Па, човечкото око може да се открие 12 различни слики во секунда, во ред? 404 00:24:27,630 --> 00:24:33,060 Значи, ако ви флеш 12 слика картички во мене во вториот, видов на секоја од овие слики 405 00:24:33,060 --> 00:24:35,950 како свои различни индивидуални сликата. 406 00:24:35,950 --> 00:24:39,690 Сега, ако сте трепкаат слики во мене во една секунда, 407 00:24:39,690 --> 00:24:42,140 тогаш моето око ќе почне да ги замаглат заедно 408 00:24:42,140 --> 00:24:46,920 и јас би го доживуваат како движење, наместо на еден посебен имиџ. 409 00:24:46,920 --> 00:24:51,930 Така, на пример, филмови и телевизиски, тие флеш слики на тебе 24 пати 410 00:24:51,930 --> 00:24:52,570 една секунда. 411 00:24:52,570 --> 00:24:55,110 Па тоа е од 24 фрејмови во секунда. 412 00:24:55,110 --> 00:25:00,136 Компјутерски екрани, од друга страна, често се на 60 фрејмови во секунда. 413 00:25:00,136 --> 00:25:01,260 Тоа е нивната брзина на освежување. 414 00:25:01,260 --> 00:25:04,650 Тоа е колку често тие се освежи на сликата на екранот. 415 00:25:04,650 --> 00:25:08,960 Така и нашата цел ќе биде 60 слики во секунда за нашите игри. 416 00:25:08,960 --> 00:25:11,770 417 00:25:11,770 --> 00:25:13,710 >> Ќе видиме дека во кодот. 418 00:25:13,710 --> 00:25:19,064 Па за секоја рамка, ние сме првата случува да го исчистите прозорецот. 419 00:25:19,064 --> 00:25:20,230 Ова е општа шема. 420 00:25:20,230 --> 00:25:22,450 Можете секогаш да се расчисти прозорец на секоја рамка, а потоа 421 00:25:22,450 --> 00:25:25,210 направите сите од вашиот цртеж промет, а потоа на крајот, 422 00:25:25,210 --> 00:25:29,610 се RenderPresent да се покаже се што е во рамка. 423 00:25:29,610 --> 00:25:33,910 А потоа ви се случува да имаат се чека на крајот 424 00:25:33,910 --> 00:25:36,340 да почека до следниот треба да започне рамка. 425 00:25:36,340 --> 00:25:38,650 >> Значи, ако јас го правев многу комплексна пресметка тука 426 00:25:38,650 --> 00:25:43,100 кој траеше повеќе од 16 милисекунди, тоа ќе биде невозможно за мене 427 00:25:43,100 --> 00:25:46,890 да се добие таа рамка стапка од 60, кој Сакав, бидејќи секоја рамка е 428 00:25:46,890 --> 00:25:48,750 земајќи премногу долго за да се пресмета. 429 00:25:48,750 --> 00:25:52,340 Покрај тоа, ние сме навистина се прави вид на незначителна сума на работа 430 00:25:52,340 --> 00:25:54,820 тука, затоа што има само едно нешто сме цртање. 431 00:25:54,820 --> 00:25:59,390 Па јас само се чека 1/60 од второ, што е должина 432 00:25:59,390 --> 00:26:01,520 на рамка помеѓу рамки. 433 00:26:01,520 --> 00:26:05,610 Па јас сум вид на преправајќи се прави сите мојата работа ги зема нула време. 434 00:26:05,610 --> 00:26:09,050 Но во вистинска игра, ќе треба да се одземат 435 00:26:09,050 --> 00:26:13,760 износот на времето потребно да се направи сето ова работа од вашето време за одмор. 436 00:26:13,760 --> 00:26:16,970 >> Значи во секој случај, она што сум всушност прави во овој циклус? 437 00:26:16,970 --> 00:26:19,070 Јас го исчистите прозорецот. 438 00:26:19,070 --> 00:26:27,470 Јас во собата на dest.y, која е int да Крај на мојата позиција y фрлен во int. 439 00:26:27,470 --> 00:26:32,070 Сега, сакам да плови резолуција за моите у позиција во мојата игра, 440 00:26:32,070 --> 00:26:34,150 но потоа да се, всушност, го привлече кон екранот 441 00:26:34,150 --> 00:26:39,070 тоа треба ints, затоа што тоа е во единиците на пиксели, па тоа е она за кастингот е за. 442 00:26:39,070 --> 00:26:41,745 Одам да се подготви сликата. 443 00:26:41,745 --> 00:26:45,180 Значи ова е правоаголник изворот. 444 00:26:45,180 --> 00:26:47,060 И ова е правоаголник дестинацијата. 445 00:26:47,060 --> 00:26:50,310 Па јас помина за ништовни правоаголник изворот 446 00:26:50,310 --> 00:26:53,426 да се каже сакам да привлече целиот мој текстура. 447 00:26:53,426 --> 00:26:55,300 Но, ако сте имале многу текстури во вашата игра 448 00:26:55,300 --> 00:26:59,120 и сите тие се во една голема текстура на сајтот кој бил натоварен во SDL како само еден 449 00:26:59,120 --> 00:27:02,850 текстура, може да ги користите правоаголник извор 450 00:27:02,850 --> 00:27:06,750 да се избере еден од помалите текстури, една од помалите sprites, 451 00:27:06,750 --> 00:27:09,450 надвор од тоа големо текстура на сајтот. 452 00:27:09,450 --> 00:27:14,740 >> Значи, повторно, јас ќе поминува ми ја даде, мојата текстура, а сега на дестинација. 453 00:27:14,740 --> 00:27:18,320 Ова се случува да биде каде што во прозорец тоа се случува да се извлечат. 454 00:27:18,320 --> 00:27:21,390 А потоа, бидејќи јас сум за анимирање нешто, ми треба движење, 455 00:27:21,390 --> 00:27:25,150 Одам да се ажурира самовила позиција на секоја рамка. 456 00:27:25,150 --> 00:27:30,190 Па имам оваа постојана наречен скролување забрза во единиците на пиксели во секунда. 457 00:27:30,190 --> 00:27:34,320 Сега, секој пат кога ние се направи некое движење, рамката е само 1/60 од секунда. 458 00:27:34,320 --> 00:27:36,740 Па јас ќе одам да се подели дека до 60. 459 00:27:36,740 --> 00:27:42,350 И тогаш, ајде да видиме, јас сум одземање дека од y позиција. 460 00:27:42,350 --> 00:27:44,470 Зошто сум одземање? 461 00:27:44,470 --> 00:27:46,169 Ние ќе дојдеме до тоа во една секунда. 462 00:27:46,169 --> 00:27:48,460 Па тогаш исчисти мојата ресурси а на програмата е готово. 463 00:27:48,460 --> 00:27:49,830 >> Значи, да се направи тоа. 464 00:27:49,830 --> 00:27:52,450 465 00:27:52,450 --> 00:28:03,570 Па ајде да одиме во шминка SRCS = hello4 animation.c, во ред? 466 00:28:03,570 --> 00:28:05,720 Игра. 467 00:28:05,720 --> 00:28:06,770 Ете ти. 468 00:28:06,770 --> 00:28:12,690 Па морам тоа да одите горе на прозорец, кој е прилично уредни. 469 00:28:12,690 --> 00:28:17,110 Но се одржи на, јас бев одземање од позиција у секое време. 470 00:28:17,110 --> 00:28:18,910 Што се случува таму? 471 00:28:18,910 --> 00:28:24,010 Па, излегува дека во SDL, и всушност, во повеќето компјутерска графика, 472 00:28:24,010 --> 00:28:28,890 потеклото на координатен систем е горниот лев агол на прозорецот. 473 00:28:28,890 --> 00:28:34,960 >> Така насока на позитивните х оди низ вашиот прозорец кон десно. 474 00:28:34,960 --> 00:28:38,110 И позитивните y насока всушност, оди надолу. 475 00:28:38,110 --> 00:28:40,470 Значи, повторно, за потеклото на горниот лев агол на вашиот прозорец, 476 00:28:40,470 --> 00:28:46,190 позитивните y насока е долу, и позитивен x е десно. 477 00:28:46,190 --> 00:28:48,770 Па кога ќе се одземе од позиција на y, тоа е 478 00:28:48,770 --> 00:28:52,640 случува да се направи тоа оди на негативни y насока, што е до прозорецот. 479 00:28:52,640 --> 00:28:55,500 Значи тоа е она што се случува таму. 480 00:28:55,500 --> 00:28:56,510 Кул. 481 00:28:56,510 --> 00:28:59,240 >> Ајде да погледнеме во следната датотека. 482 00:28:59,240 --> 00:29:05,700 Тука е дел од покаже каде ние конечно 483 00:29:05,700 --> 00:29:08,920 се добие дека X во агол на прозорецот што би требало да го затворите прозорецот 484 00:29:08,920 --> 00:29:10,660 да работи. 485 00:29:10,660 --> 00:29:12,800 Значи она што се случува? 486 00:29:12,800 --> 00:29:17,520 Ние го иницијализирам SDL, се создаде на прозорецот, создаде Renderer, вчита сликата, 487 00:29:17,520 --> 00:29:19,770 создаде текстура како што не сум видел. 488 00:29:19,770 --> 00:29:26,850 Имаме исти правоаголник дестинација како и порано, истиот повик да се пребарува текстура. 489 00:29:26,850 --> 00:29:29,780 Но, овој пат, ние сме тогаш ќе се подели на ширина 490 00:29:29,780 --> 00:29:33,110 а висината на нашата дестинација за 4. 491 00:29:33,110 --> 00:29:36,430 Ова има само ефектот на скалирање надолу кога нашата слика 492 00:29:36,430 --> 00:29:39,884 ние го прикаже во прозорецот со четири. 493 00:29:39,884 --> 00:29:40,800 Значи тоа е прилично уредни. 494 00:29:40,800 --> 00:29:42,770 Ние само може да се намалат само како тоа. 495 00:29:42,770 --> 00:29:45,970 Ние ќе треба да почнат на самовила во центарот на екранот. 496 00:29:45,970 --> 00:29:49,410 И сега имаме x и y брзина и Тие се двете случува да се почне од нула. 497 00:29:49,410 --> 00:29:53,740 498 00:29:53,740 --> 00:29:55,880 >> Ова е погрешен фајл. 499 00:29:55,880 --> 00:29:56,380 Жал ми е. 500 00:29:56,380 --> 00:29:57,960 Значи, тоа е точно. 501 00:29:57,960 --> 00:30:00,170 Тоа е се уште во оваа датотека. 502 00:30:00,170 --> 00:30:03,210 Имаме подели со 4 и сè. 503 00:30:03,210 --> 00:30:07,830 Значи тука имаме x и y позиција за центарот на прозорецот. 504 00:30:07,830 --> 00:30:12,480 И ние го даде почетен брзина на оваа постојана брзина, која 505 00:30:12,480 --> 00:30:15,180 Верувам дека е 300 пиксели во секунда. 506 00:30:15,180 --> 00:30:19,850 Сега, имаме оваа int можеше само како добро да биде децимален наречен блиску баравте. 507 00:30:19,850 --> 00:30:23,970 И наместо за правење на бесконечна јамка на мерач на време тука, 508 00:30:23,970 --> 00:30:29,180 ние ќе треба да се раздвижи како додека во близина не се бара. 509 00:30:29,180 --> 00:30:30,960 >> Така како ние да се процесира настани? 510 00:30:30,960 --> 00:30:35,600 Па, SDL редици на настаните во еден буквална редот зад сцената. 511 00:30:35,600 --> 00:30:38,860 А потоа секоја рамка, можеме да dequeue настани 512 00:30:38,860 --> 00:30:43,900 од таа задача користење овој повик SDL_PullEvent. 513 00:30:43,900 --> 00:30:46,730 И повторно, дефинитивно одат прочитате за ова во документацијата. 514 00:30:46,730 --> 00:30:50,450 Има многу повеќе детали и многу повеќе функции може да се користи со овој. 515 00:30:50,450 --> 00:30:54,750 Ние го положат адреса на оваа работа, SDL_Event 516 00:30:54,750 --> 00:30:56,990 дека имаме тука на магацинот. 517 00:30:56,990 --> 00:30:58,840 >> Сега, она што е SDL_event? 518 00:30:58,840 --> 00:31:02,356 Бидејќи SDL, ако се погледне во на documentation-- ајде 519 00:31:02,356 --> 00:31:07,580 види, API по категорија, влез настани, настан ракување, 520 00:31:07,580 --> 00:31:15,150 ние може да се погледне бројот на различни настани тука 521 00:31:15,150 --> 00:31:18,600 и може да се види, има целина тон од нив. 522 00:31:18,600 --> 00:31:22,150 Значи, што е тоа нешто SDL_Event? 523 00:31:22,150 --> 00:31:28,190 524 00:31:28,190 --> 00:31:31,107 SDL_Event е унија. 525 00:31:31,107 --> 00:31:31,940 Леле, што е синдикат? 526 00:31:31,940 --> 00:31:33,910 Сте веројатно никогаш слушнале за тоа порано. 527 00:31:33,910 --> 00:31:35,610 И тоа е во ред. 528 00:31:35,610 --> 00:31:39,420 >> Сојуз е вид на како на struct, освен struct 529 00:31:39,420 --> 00:31:41,960 има простор за сите своите полиња и меморијата, 530 00:31:41,960 --> 00:31:45,060 со оглед на Унијата има само доволно простор за да ги собере на најголемиот 531 00:31:45,060 --> 00:31:49,660 еден од нејзините полиња, што тоа значи може само да ја запази еден од нејзините полиња 532 00:31:49,660 --> 00:31:52,830 во еден момент, кој вид на има смисла за настани, нели? 533 00:31:52,830 --> 00:31:55,810 Ние може да има тастатура настан или настан прозорецот, 534 00:31:55,810 --> 00:31:59,750 но еден настан не може да биде и тастатура настан и настанот прозорецот, 535 00:31:59,750 --> 00:32:05,450 па тоа би било глупо да се има место и за и на оние во нашиот случај унија. 536 00:32:05,450 --> 00:32:07,770 Значи, ако си сакал да создаде свој сојуз, 537 00:32:07,770 --> 00:32:10,020 тоа изгледа сосема исти што се создавање на struct, 538 00:32:10,020 --> 00:32:14,140 освен дека ние ги користиме на клучни зборови на унијата наместо на struct клучен збор. 539 00:32:14,140 --> 00:32:17,490 И се сеќавам, за сите работите во вашата заедница, 540 00:32:17,490 --> 00:32:22,020 вистинските променлива која е единство може да има само една од тие вредности 541 00:32:22,020 --> 00:32:24,780 во време. 542 00:32:24,780 --> 00:32:29,940 >> Па како можеме да кажам каков вид на настан ние едноставно се појави надвор од оваа задача? 543 00:32:29,940 --> 00:32:33,370 Па, ние може да го тестира за event.type. 544 00:32:33,370 --> 00:32:35,792 И ако тоа е еднаква да SDL_Quit, знаеме 545 00:32:35,792 --> 00:32:37,500 тоа е случај е генерирана кога ние 546 00:32:37,500 --> 00:32:39,510 погоди што X во агол од прозорецот. 547 00:32:39,510 --> 00:32:44,270 И може да се постави во близина побара еднаков на 1. 548 00:32:44,270 --> 00:32:47,230 Останатото е само некои анимации дека не сум видел. 549 00:32:47,230 --> 00:32:52,802 Значи, да се оди напред и да се направи ова и да видиме колку добро таа работи. 550 00:32:52,802 --> 00:32:55,135 Па јас ќе одам да се тип прават и тогаш SRCS = hello5_events.c. 551 00:32:55,135 --> 00:33:03,760 552 00:33:03,760 --> 00:33:04,770 Таму ќе одиме. 553 00:33:04,770 --> 00:33:05,780 Игри. 554 00:33:05,780 --> 00:33:08,920 >> Сега, може да се види дека тоа е навистина намалени за четири. 555 00:33:08,920 --> 00:33:10,360 И сега тоа е бие наоколу. 556 00:33:10,360 --> 00:33:14,630 Имам некои судир откривање случува со страни на прозорецот 557 00:33:14,630 --> 00:33:16,840 дека можеме да ги погледнеме. 558 00:33:16,840 --> 00:33:21,190 И што се случува кога ќе одам да го затворите? 559 00:33:21,190 --> 00:33:22,120 Се затвора. 560 00:33:22,120 --> 00:33:22,740 Фантастично. 561 00:33:22,740 --> 00:33:24,290 Добивме тој настан. 562 00:33:24,290 --> 00:33:26,630 А ние се погрижил за него. 563 00:33:26,630 --> 00:33:30,730 >> Значи, да се погледне назад на кодот. 564 00:33:30,730 --> 00:33:33,020 Па како не можам да ја добијам бие наоколу, како тоа? 565 00:33:33,020 --> 00:33:37,200 Се сеќавам јас во собата и Х и y почетокот на брзини. 566 00:33:37,200 --> 00:33:39,260 И брзината е позитивен постојана, па тоа е 567 00:33:39,260 --> 00:33:42,680 ќе се го почнувате оди надолу и на десно. 568 00:33:42,680 --> 00:33:45,680 569 00:33:45,680 --> 00:33:50,310 >> Сега, секоја рамка, во прилог на ракување сите настани што се случиле, 570 00:33:50,310 --> 00:33:57,520 Одам да се открие дали мојата самовила се обидува да одат надвор од прозорецот. 571 00:33:57,520 --> 00:34:03,610 За да можеме да го направите тоа со само проверка x_pos со 0, y_pos 0, а потоа 572 00:34:03,610 --> 00:34:07,370 исто така x_pos и y_pos со прозорец ширина и висина прозорец. 573 00:34:07,370 --> 00:34:11,010 Известување Сум одзема ширината на фигура. 574 00:34:11,010 --> 00:34:14,090 И ова е затоа што ако јас не одземе ширината на самовила, 575 00:34:14,090 --> 00:34:17,760 тоа ќе се провери само дека потеклото на самовила 576 00:34:17,760 --> 00:34:19,690 не одат надвор од прозорецот. 577 00:34:19,690 --> 00:34:21,480 Но, ние сакаме целата ширина на самовила 578 00:34:21,480 --> 00:34:24,030 да се биде секогаш во внатрешноста на прозорецот и целата висина на самовила 579 00:34:24,030 --> 00:34:25,321 да се биде секогаш во внатрешноста на прозорецот. 580 00:34:25,321 --> 00:34:27,429 Значи тоа е она што е за одземање. 581 00:34:27,429 --> 00:34:30,080 Многу геометрија тука може биде корисно да се извлече 582 00:34:30,080 --> 00:34:33,929 на хартија со координатниот систем за да види што се случува. 583 00:34:33,929 --> 00:34:38,090 >> Значи, ако јас се судираат, јас само едноставно ресетирате позиција 584 00:34:38,090 --> 00:34:41,400 така што тоа не се случува надвор од екранот. 585 00:34:41,400 --> 00:34:47,179 А јас ќе одам да се, ако тоа одбиени на еден од страничните ѕидови, 586 00:34:47,179 --> 00:34:51,469 Одам да се негира x брзина, така што тоа 587 00:34:51,469 --> 00:34:53,210 започнува бие во друга насока. 588 00:34:53,210 --> 00:34:56,210 И слично на тоа, ако тоа хитови на врвот или на дното, 589 00:34:56,210 --> 00:34:59,820 Одам да го поставите брзината на y еднаква на негативните y брзина, 590 00:34:59,820 --> 00:35:01,690 така што тоа ќе се врати. 591 00:35:01,690 --> 00:35:03,860 Па тоа е само како направивме тоа овде. 592 00:35:03,860 --> 00:35:07,560 >> И позициите на ажурирање исто како што сум видел, 593 00:35:07,560 --> 00:35:12,510 подели со 60, бидејќи ние сме само ракување 1/60 од секунда. 594 00:35:12,510 --> 00:35:15,750 А потоа и рендерирање, иста како порано. 595 00:35:15,750 --> 00:35:19,810 И така тоа е сè што што се случуваше оваа датотека. 596 00:35:19,810 --> 00:35:22,490 Значи тоа е како тоа го правиме настани. 597 00:35:22,490 --> 00:35:29,260 Главната работа е да се земе тука е ова SDL_PullEvent функција. 598 00:35:29,260 --> 00:35:33,020 И дефинитивно треба да го прочитате документацијата повеќе за SDL_Event 599 00:35:33,020 --> 00:35:38,630 Унијата, бидејќи овој тип на податоци е многу, многу важно, бидејќи ние го користиме 600 00:35:38,630 --> 00:35:40,690 за сите видови на настани. 601 00:35:40,690 --> 00:35:46,539 >> На пример, ние го користиме за тастатура настани, што е она што оваа датотека е за. 602 00:35:46,539 --> 00:35:47,330 Значи она што го имаме? 603 00:35:47,330 --> 00:35:50,180 Имаме истото како и досега, иницијализира SDL, се создаде прозорец, 604 00:35:50,180 --> 00:35:55,260 создаде Renderer, вчита сликата во меморијата, се создаде текстура. 605 00:35:55,260 --> 00:36:00,530 Повторно, ние ќе треба да имаат оваа правоаголник дест, 606 00:36:00,530 --> 00:36:04,890 ние ќе треба да скала на сликата од страна на четири, таа да стане малку помали. 607 00:36:04,890 --> 00:36:08,000 Сега, ние ќе се обидеме да го стартувате самовила во центарот на екранот. 608 00:36:08,000 --> 00:36:12,090 Но овој пат, ние ќе треба да се постави на почетна x и y брзини до нула, 609 00:36:12,090 --> 00:36:15,140 затоа што на тастатурата е случува да ги контролираат оние. 610 00:36:15,140 --> 00:36:18,900 И освен тоа, ние ќе треба да ги пратите на овие променливи 611 00:36:18,900 --> 00:36:20,450 горе, долу, лево, и десно. 612 00:36:20,450 --> 00:36:23,090 И што се случува да се задржи пратите на тоа дали ние сме 613 00:36:23,090 --> 00:36:27,370 притиснат копчињата на тастатурата што одговараат на горе, долу, лево, 614 00:36:27,370 --> 00:36:28,460 и право. 615 00:36:28,460 --> 00:36:32,440 >> Сега, ова е вид на фенси затоа што може да се користи W, A, S, 616 00:36:32,440 --> 00:36:35,480 Д тука, или вистински копчињата со стрелки. 617 00:36:35,480 --> 00:36:38,590 Ќе видиме дека во само една секунда. 618 00:36:38,590 --> 00:36:41,140 Па ние ќе треба да се процесира случај исто како порано. 619 00:36:41,140 --> 00:36:42,530 Ние се повлече од настанот. 620 00:36:42,530 --> 00:36:45,840 Но, сега ние ќе треба да вклучете го типот на настанот. 621 00:36:45,840 --> 00:36:47,710 Ако тоа е SDL_Quit, ние сме случува да се постави во близина 622 00:36:47,710 --> 00:36:49,990 побарал на еден, како и порано. 623 00:36:49,990 --> 00:36:52,315 Што се справува со х во аголот на прозорецот, 624 00:36:52,315 --> 00:36:55,050 така што нашите прозорецот, всушност, се затвора. 625 00:36:55,050 --> 00:37:00,110 >> Во спротивно, ако добиете SDL клучните надолу Настанот, што значи дека ние Притиснавте копче, 626 00:37:00,110 --> 00:37:04,470 тогаш она што ние ќе треба да направите е да сме случува да го вклучите ова нешто овде, 627 00:37:04,470 --> 00:37:11,370 која means-- така event.key значи третираме нашите настан унија, 628 00:37:11,370 --> 00:37:15,490 оди и да го добиете клучот Настанот структура во неа. 629 00:37:15,490 --> 00:37:18,810 Значи излегува дека овој Унијата е клучен структура настан. 630 00:37:18,810 --> 00:37:22,820 А потоа одат на клучните структура настанот својата област 631 00:37:22,820 --> 00:37:26,140 наречен keysym а потоа scancode. 632 00:37:26,140 --> 00:37:29,480 И повторно, дефинитивно се прочита документација за ова. 633 00:37:29,480 --> 00:37:31,220 Влезови клучни зборови доста интересно. 634 00:37:31,220 --> 00:37:34,020 Може да се добијат кодови скенирање или клуч кодови. 635 00:37:34,020 --> 00:37:38,590 И тоа е малку суптилни, но документација е сосема добар. 636 00:37:38,590 --> 00:37:43,380 >> Значи, ако ние се види кодот за скенирање нашите клучни притиснете биде W или нагоре, 637 00:37:43,380 --> 00:37:45,450 ние ќе треба да се постави е еднаква на 1. 638 00:37:45,450 --> 00:37:47,240 А потоа ние се пробие на прекинувачот. 639 00:37:47,240 --> 00:37:52,980 Ако тоа е или лево, ние во собата лево кон 1, ет така натаму, и така натаму, за долу и десно. 640 00:37:52,980 --> 00:37:57,080 Сега, во овој надворешен прекинувач, ако видиме клучен до случај, 641 00:37:57,080 --> 00:38:00,730 тоа значи дека ние сме ослободени клучен и ние сме веќе не негово притискање. 642 00:38:00,730 --> 00:38:05,380 Па јас ќе одам да се каже до еднакво на 0, лево еднакво на 0, што е еднакво на 0, право 643 00:38:05,380 --> 00:38:08,260 еднакво на 0, и така натаму. 644 00:38:08,260 --> 00:38:12,070 >> И известување имаме во секоја од овие два случаи се стави веднаш до едни со други 645 00:38:12,070 --> 00:38:14,490 без посебен код за првиот случај, што 646 00:38:14,490 --> 00:38:18,180 значи дека без разлика дали е Ѕ или надолу токму тука, 647 00:38:18,180 --> 00:38:20,520 тоа се случува да се изврши овој код. 648 00:38:20,520 --> 00:38:22,090 Значи тоа е прилично корисна. 649 00:38:22,090 --> 00:38:24,830 Го спречува нас да мора да стори повеќе услови и што IFS и работите 650 00:38:24,830 --> 00:38:26,980 ете така. 651 00:38:26,980 --> 00:38:29,420 >> Па ние ќе треба да се утврди брзината. 652 00:38:29,420 --> 00:38:31,020 Ние во собата на брзината на 0. 653 00:38:31,020 --> 00:38:33,910 А потоа, ако е притиснат до а не надолу, тогаш ние 654 00:38:33,910 --> 00:38:37,450 поставите брзината y до негативни брзина. 655 00:38:37,450 --> 00:38:42,930 Се сеќавам негативен, бидејќи негативните y насока е горе. 656 00:38:42,930 --> 00:38:45,540 И позитивните y насока е долу. 657 00:38:45,540 --> 00:38:47,510 Ако се притисне надолу а не нагоре, тогаш ние сме 658 00:38:47,510 --> 00:38:53,860 ќе го постави на позитивни брзина, што значи дека ќе се спушти на екранот. 659 00:38:53,860 --> 00:38:55,460 Истото со лево и десно. 660 00:38:55,460 --> 00:38:58,200 >> И тогаш ние ќе треба да се ажурира позициите исто како порано. 661 00:38:58,200 --> 00:39:00,740 Ние ќе треба да се направи судир детекција со граници, 662 00:39:00,740 --> 00:39:04,290 но ние нема да го ресетирате брзина, затоа што брзината е само 663 00:39:04,290 --> 00:39:06,780 контролирана од страна на тастатурата. 664 00:39:06,780 --> 00:39:11,230 Но, ние ќе се обидеме да го ресетирате позиции за да се одржи во прозорецот. 665 00:39:11,230 --> 00:39:14,400 И ние ќе треба да се постави на позиции во struct 666 00:39:14,400 --> 00:39:17,400 а потоа направи сите рендерирање работи од порано. 667 00:39:17,400 --> 00:39:20,750 Да видиме што тоа го прави. 668 00:39:20,750 --> 00:39:25,460 Така бидете SRCS-- видиме, ова е hello6_keyboard.c. 669 00:39:25,460 --> 00:39:38,140 670 00:39:38,140 --> 00:39:38,820 >> О не. 671 00:39:38,820 --> 00:39:40,150 Па добивме некои предупредувања тука. 672 00:39:40,150 --> 00:39:43,840 И тоа е само велиме дека ние не проверете за секој можен вид 673 00:39:43,840 --> 00:39:45,610 на настанот. 674 00:39:45,610 --> 00:39:49,470 Тоа е во ред, бидејќи има 236 од нив или така. 675 00:39:49,470 --> 00:39:51,760 Па јас ќе одам да ги игнорира овие предупредувања. 676 00:39:51,760 --> 00:39:53,530 Тоа е уште компајлирана во ред. 677 00:39:53,530 --> 00:39:56,100 Па јас ќе одам да се игра играта. 678 00:39:56,100 --> 00:39:57,590 Тоа не е да се помрдне. 679 00:39:57,590 --> 00:40:04,150 Но, сега, кога ќе се пасира, на мојата тастатура, Јас може да се направи некои WASD движење тука, 680 00:40:04,150 --> 00:40:06,870 Јас го користам мојот стрелките на тастатурата, како и. 681 00:40:06,870 --> 00:40:10,070 И известување, иако сум притискање на десното токму сега, 682 00:40:10,070 --> 00:40:13,804 тоа не се случува надвор од прозорецот, затоа што јас го ресетирате на секоја слика. 683 00:40:13,804 --> 00:40:14,720 Значи тоа е прилично уредни. 684 00:40:14,720 --> 00:40:19,420 Можете да замислите движат околу Марио со некои копчињата со стрелки или нешто слично. 685 00:40:19,420 --> 00:40:22,880 И да, на X функционира. 686 00:40:22,880 --> 00:40:26,900 >> Па конечниот датотека ние си оди да се погледне, hellow7_mouse. 687 00:40:26,900 --> 00:40:29,600 Ова е за добивање на влезните глувчето. 688 00:40:29,600 --> 00:40:34,790 Така што во овој еден, ние увоз на заглавјето на математика, 689 00:40:34,790 --> 00:40:38,100 затоа што ние ќе треба да имаат малку математика тука. 690 00:40:38,100 --> 00:40:45,260 Истиот, стар, истиот, стар работи, дестинација, истиот, стар, се гледа дека пред. 691 00:40:45,260 --> 00:40:46,910 Па, ова е интересно. 692 00:40:46,910 --> 00:40:51,730 Па ние сме назад кон само проверка за SDL откажат настанот. 693 00:40:51,730 --> 00:40:52,460 Зошто е тоа? 694 00:40:52,460 --> 00:40:55,110 Така можете да добиете влезни глувчето од настани. 695 00:40:55,110 --> 00:40:57,670 Како кога глувчето ќе се пресели, ќе го добиете еден настан за тоа. 696 00:40:57,670 --> 00:41:00,520 Кога ќе се притисне копче на глувчето, можете да добиете еден настан за тоа. 697 00:41:00,520 --> 00:41:05,760 >> Но, има уште еден, малку поедноставно можеби, API за добивање влезен глувчето. 698 00:41:05,760 --> 00:41:09,500 И тоа е едноставно SDL државата стапите глувчето. 699 00:41:09,500 --> 00:41:14,370 Па имам на int за x и y за позицијата на покажувачот. 700 00:41:14,370 --> 00:41:18,910 Јас го давате SDL_GetMouseState, кој ги поставува овие. 701 00:41:18,910 --> 00:41:22,200 И ова е позиција во координатен систем на прозорецот. 702 00:41:22,200 --> 00:41:25,520 Значи, ако на маса е во горниот лев на прозорецот, тоа би 0, 0. 703 00:41:25,520 --> 00:41:28,040 704 00:41:28,040 --> 00:41:33,380 >> Сега, она што јас ќе одам да направите е, ќе одам да се направи малку на вектор математика. 705 00:41:33,380 --> 00:41:36,910 Се обложувам дека мислев дека нема да се види дека во CS50, но тука е. 706 00:41:36,910 --> 00:41:40,720 Одам да се направи некои вектор математика за да се добие вектор 707 00:41:40,720 --> 00:41:43,840 од сликата за да го курсорот. 708 00:41:43,840 --> 00:41:53,280 И така Зошто имам ова одземање тука? 709 00:41:53,280 --> 00:42:01,350 Па, ако јас само се користи дест .-- така Јас треба да се преведе на глувчето X 710 00:42:01,350 --> 00:42:05,166 и y за половина од ширината и висината на сликата, 711 00:42:05,166 --> 00:42:08,040 бидејќи сакам центарот на Сликата која се случува кон глувчето, 712 00:42:08,040 --> 00:42:10,160 не потеклото на сликата. 713 00:42:10,160 --> 00:42:15,650 >> Па тоа е само да бидете сигурни дека јас зборувам за центарот на сликата тука. 714 00:42:15,650 --> 00:42:19,510 Потоа да добиеме делта x и y, која е разликата од целта 715 00:42:19,510 --> 00:42:23,430 на вистинската позиција на сликата. 716 00:42:23,430 --> 00:42:25,690 И тогаш може да се добие дистанцира тука, што 717 00:42:25,690 --> 00:42:29,140 ќе биде Питагоровата теорема, квадратен корен од x 718 00:42:29,140 --> 00:42:32,720 пати х плус y y пати. 719 00:42:32,720 --> 00:42:38,400 >> Сега за да се спречи нервнича, и јас може да се покаже вас она што го прави ова, ако јас не го направите ова, 720 00:42:38,400 --> 00:42:45,830 ако растојанието помеѓу курсорот и центарот на сликата е помалку од пет, 721 00:42:45,830 --> 00:42:48,730 Јас само не одам за да се движат на сликата. 722 00:42:48,730 --> 00:42:52,900 Инаку, ние во собата на брзина. 723 00:42:52,900 --> 00:42:55,960 И ние го постави така што брзина секогаш ќе биде постојана. 724 00:42:55,960 --> 00:42:58,770 А вистинскиот резултат на сите оваа математика е дека на сликата 725 00:42:58,770 --> 00:43:01,660 се случува да се движат кон курсорот. 726 00:43:01,660 --> 00:43:08,470 >> Сега излегува дека SDL_GetMouseState, 727 00:43:08,470 --> 00:43:14,490 во прилог на поставување на x и y аргументи тука, 728 00:43:14,490 --> 00:43:21,340 Таа, исто така се враќа на int што одговара на состојбата на копчињата на глувчето. 729 00:43:21,340 --> 00:43:24,600 Па не можеме да се прочита дека директно, но можеме да 730 00:43:24,600 --> 00:43:29,090 ги користат овие макроа, еден bitwise оператор, а не дека е страшно, 731 00:43:29,090 --> 00:43:30,650 само bitwise и. 732 00:43:30,650 --> 00:43:38,320 Па велиме копчиња, што е резултат од нашите SDL_GetMouseState, ако тоа 733 00:43:38,320 --> 00:43:43,990 и bitwise и, ова макро тука, SDL_BUTTON_LEFT. 734 00:43:43,990 --> 00:43:47,680 >> Значи ова се случува едноставно да се реши на битмапа што одговара 735 00:43:47,680 --> 00:43:51,090 лево копче на глувчето да се притисне. 736 00:43:51,090 --> 00:43:55,470 И така, ако bitwise и се случува и тоа е 737 00:43:55,470 --> 00:43:59,340 не нула, што значи лево копче е притиснато, 738 00:43:59,340 --> 00:44:04,320 тогаш ние всушност сакаме да го негира и на x и y брзини, 739 00:44:04,320 --> 00:44:06,700 кои само ќе го направи бегство сликата. 740 00:44:06,700 --> 00:44:07,980 Информации за позицијата. 741 00:44:07,980 --> 00:44:10,920 Детекции судири, што се гледа тоа сите пред, рендерирање, сите во право. 742 00:44:10,920 --> 00:44:11,510 Ајде да се направи тоа. 743 00:44:11,510 --> 00:44:14,200 744 00:44:14,200 --> 00:44:16,050 Па ќе морате да SRCS = hello7_mouse.c. 745 00:44:16,050 --> 00:44:21,720 746 00:44:21,720 --> 00:44:22,220 Одлично. 747 00:44:22,220 --> 00:44:23,490 Нема грешки. 748 00:44:23,490 --> 00:44:24,900 И игра. 749 00:44:24,900 --> 00:44:26,440 >> Па еве имам глувчето. 750 00:44:26,440 --> 00:44:29,000 И сликата навистина си поигруваше со мојот глушец. 751 00:44:29,000 --> 00:44:33,140 Во овој момент, во игра се направи, можеби ова е како непријател брка 752 00:44:33,140 --> 00:44:35,240 Вашиот малку карактер или whatever. 753 00:44:35,240 --> 00:44:37,440 Но, тука имаме слика брка глушецот. 754 00:44:37,440 --> 00:44:41,000 И кога ќе кликнете на глувчето започнува брка сликата 755 00:44:41,000 --> 00:44:42,860 и сликата е бегање од глувчето. 756 00:44:42,860 --> 00:44:43,810 Значи тоа е прилично кул. 757 00:44:43,810 --> 00:44:47,770 И известувањето повторно, има уште судир откривање тука. 758 00:44:47,770 --> 00:44:53,930 >> Така што е последниот малку демо сум го постави тука. 759 00:44:53,930 --> 00:44:58,870 И ајде да ги разгледаме во уште една работа. 760 00:44:58,870 --> 00:45:02,970 Па повторно тука, јас спомнав овој треперење. 761 00:45:02,970 --> 00:45:05,000 Во ред. 762 00:45:05,000 --> 00:45:12,890 Значи, ако растојанието помало од пет точки, Бев поставување x и y брзина на нула. 763 00:45:12,890 --> 00:45:15,960 Што се случува кога ние се ослободи од тоа? 764 00:45:15,960 --> 00:45:19,070 Па јас ќе одам да се само да го направите тоа. 765 00:45:19,070 --> 00:45:23,820 766 00:45:23,820 --> 00:45:30,150 Ве молиме изговор овие грозни стил, но ние коментира надвор точниот код. 767 00:45:30,150 --> 00:45:38,080 Па јас ќе одам да се спаси што и го стори истата команда од пред да го направите. 768 00:45:38,080 --> 00:45:38,785 >> Во ред. 769 00:45:38,785 --> 00:45:39,660 И сега што се случува? 770 00:45:39,660 --> 00:45:43,260 771 00:45:43,260 --> 00:45:43,760 Добро. 772 00:45:43,760 --> 00:45:45,801 Ние сме се уште по глувчето како и порано, 773 00:45:45,801 --> 00:45:49,310 но кога ќе се дојде до помош на глувчето, ние го добивме ова бруто треперење. 774 00:45:49,310 --> 00:45:50,320 Што се случува таму? 775 00:45:50,320 --> 00:45:52,600 Па, во нашата вектор математика, се сеќавам бевме 776 00:45:52,600 --> 00:45:57,540 преземање на растојанието помеѓу курсорот и центарот на сликата? 777 00:45:57,540 --> 00:46:00,710 Па, како што се приближува 0, ние започне да добива 778 00:46:00,710 --> 00:46:06,280 како овој вид на луд однесување каде што на сликата е вид на 779 00:46:06,280 --> 00:46:08,910 како осцилирачки околу покажувачот. 780 00:46:08,910 --> 00:46:12,000 А тоа е создавање на овој треперење. 781 00:46:12,000 --> 00:46:13,020 И тоа е навистина грди. 782 00:46:13,020 --> 00:46:15,103 И веројатно нема да сакате вашиот игри го прават тоа, 783 00:46:15,103 --> 00:46:17,350 освен ако тоа е некој вид на посебен ефект. 784 00:46:17,350 --> 00:46:21,960 >> Па тоа е причината зошто имаме само оваа произволна 785 00:46:21,960 --> 00:46:27,150 отсечен од пет точки, каде што велат ако тоа е во рок од пет точки, ние сме добри. 786 00:46:27,150 --> 00:46:29,560 Ние не треба да се движи сликата повеќе. 787 00:46:29,560 --> 00:46:32,260 Значи тоа е она што се случува таму. 788 00:46:32,260 --> 00:46:37,390 789 00:46:37,390 --> 00:46:40,870 >> Па тоа е доста тоа. 790 00:46:40,870 --> 00:46:44,390 Вие сега знаете како да се создаде прозорец, ставете некоја слика, 791 00:46:44,390 --> 00:46:49,330 нацрта слика до прозорецот, се тастатура за внес, се внесување на глувчето, 792 00:46:49,330 --> 00:46:52,190 има еден куп други внесување дека нема да 793 00:46:52,190 --> 00:46:56,070 знаете како да се добие ако само поминете неколку минути да гледа во документацијата. 794 00:46:56,070 --> 00:46:59,670 Така да всушност имаат доста неколку алатки на располагање сега 795 00:46:59,670 --> 00:47:01,650 да се напише полноправна игра. 796 00:47:01,650 --> 00:47:05,030 >> Сега, секој натпревар треба некои аудио, но аудио документација 797 00:47:05,030 --> 00:47:06,460 Исто така е прилично добар. 798 00:47:06,460 --> 00:47:09,200 И јас сум подготвен да се обложи дека ако да се разбере сите од работите 799 00:47:09,200 --> 00:47:14,560 ние разговаравме за денес со сликите, и површини, 800 00:47:14,560 --> 00:47:18,370 Windows, и сè, тогаш пронајдат аудио API не е 801 00:47:18,370 --> 00:47:21,170 нема да биде толку лош. 802 00:47:21,170 --> 00:47:27,420 Па јас со нетрпение очекуваме да се видиме што ќе се создаде со SDL. 803 00:47:27,420 --> 00:47:31,595