1 00:00:00,000 --> 00:00:05,069 2 00:00:05,069 --> 00:00:06,110 THOMAS Lively: Pekala. 3 00:00:06,110 --> 00:00:07,450 Herkese selam. 4 00:00:07,450 --> 00:00:08,690 Ben Thomas Lively değilim. 5 00:00:08,690 --> 00:00:15,160 Bu seminer olacak SDL kullanarak C 2D oyunlar yazmaya. 6 00:00:15,160 --> 00:00:17,970 Yani hepiniz biliyorum evet, ben gerçekten soruyorum 7 00:00:17,970 --> 00:00:22,050 oyun oynamak ve oyun yapmak istiyorum, ancak bu SDL iş nedir? 8 00:00:22,050 --> 00:00:25,320 Yani SDL bir C kütüphanesidir. 9 00:00:25,320 --> 00:00:28,270 Bu basit açılımı DirectMedia Layer. 10 00:00:28,270 --> 00:00:31,340 Ve bu, bir çapraz platform var oyun geliştirme kütüphanesi. 11 00:00:31,340 --> 00:00:37,160 Bu, Windows, Mac üzerinde çalışır Linux, hatta iOS ve Android. 12 00:00:37,160 --> 00:00:40,380 Bu gibi şeyler kolları ses sistemlerine erişim 13 00:00:40,380 --> 00:00:44,900 bilgisayar, klavye ve için fare, joystick, bağlandıkları eğer. 14 00:00:44,900 --> 00:00:48,300 Cep, hatta yapabilir girdi ve bütün dokunun. 15 00:00:48,300 --> 00:00:53,030 Ve tabii ki, bu grafik işleme, Ekranın şeyler çizim. 16 00:00:53,030 --> 00:00:56,470 >> Bu yüzden çok yaygın olsa da, kullanılan Eğer daha önce duymuş olabilirsiniz. 17 00:00:56,470 --> 00:01:00,860 Bu, örneğin, içine inşa edilmiştir, Valve'nin kaynak motoru, 18 00:01:00,860 --> 00:01:04,970 gibi hangi güçler oyunları Portal ve Team Fortress 2. 19 00:01:04,970 --> 00:01:08,680 Bu çok sayıda da var: çıkıp indie oyunların, 20 00:01:08,680 --> 00:01:13,545 bu yüzden seni ne olduğunu görmek için heyecanlıyım Tüm onunla yapacak. 21 00:01:13,545 --> 00:01:20,000 >> Seminer hedefleri sen almak için vardır SDL ile gelişmekte olduğu için yola çıktı. 22 00:01:20,000 --> 00:01:22,700 Biz öğrenmek için gidiyoruz Bir oyun penceresi oluşturmak için. 23 00:01:22,700 --> 00:01:26,130 Biz, sprite oluşturmak için gidiyoruz hangi oyunda görüntülerdir 24 00:01:26,130 --> 00:01:27,744 etrafında hareket edebilirsiniz. 25 00:01:27,744 --> 00:01:29,910 Biz öğrenmek için gidiyoruz ve sprite animasyon, 26 00:01:29,910 --> 00:01:32,910 böylece onları hareket yapmak Onları zaman içinde değişebilir. 27 00:01:32,910 --> 00:01:35,580 Ve biz öğrenmek için gidiyoruz Klavye ve fareyi yakalamak için 28 00:01:35,580 --> 00:01:38,240 Bilgisayardan girişi. 29 00:01:38,240 --> 00:01:41,550 Ne konuşuyor olmayacak yaklaşık Bugün 3D grafikler, 30 00:01:41,550 --> 00:01:45,520 Bu çok karmaşık çünkü biz vaktimiz yok tabi. 31 00:01:45,520 --> 00:01:49,010 Biz öğrenmek değil nasıl Bizim oyunları ses çalmak. 32 00:01:49,010 --> 00:01:53,300 Ve biz inşa olmayacak Linux ama her şey için. 33 00:01:53,300 --> 00:01:58,330 >> Şimdi uyarılar bu var, umarım sonunda seminer ile, 34 00:01:58,330 --> 00:02:01,660 Eğer rahat olacaksınız SDL dokümantasyon, 35 00:02:01,660 --> 00:02:05,370 böylece anlamaya gitmek mümkün olacak nasıl kendiniz ses çalmak için. 36 00:02:05,370 --> 00:02:12,150 Ayrıca çalışmalıdır Mac veya PC için bina Tam Linux için bina aynı, 37 00:02:12,150 --> 00:02:14,700 ancak kurulum gidiyor biraz farklı. 38 00:02:14,700 --> 00:02:17,700 Yani anlamaya muktedir olmalıdır Bunları yapmak için dışarı nasıl 39 00:02:17,700 --> 00:02:20,900 Bugünün Seminerin sonunda. 40 00:02:20,900 --> 00:02:26,980 >> Kurmak için Yani, biz gidiyoruz Bir sanal makine kullanmak için. 41 00:02:26,980 --> 00:02:31,010 Biz, çünkü CS50 IDE kullanmak istiyorsunuz biz sadece C. yazılı gidiyoruz 42 00:02:31,010 --> 00:02:35,120 Ama IDE biz bir tarayıcı değil çünkü Yeni pencere veya ekran oluşturamıyor 43 00:02:35,120 --> 00:02:36,410 İçinde grafikler. 44 00:02:36,410 --> 00:02:38,450 Yani biz bir sanal makine gerekir. 45 00:02:38,450 --> 00:02:47,790 Yani talimatları izleyebilirsiniz Burada manual.CS50.net/appliance/15~~pobj at 46 00:02:47,790 --> 00:02:53,290 Resmi CS50 Cihazı yüklemek için, hangi sadece bir Linux sanal olduğunu 47 00:02:53,290 --> 00:02:55,110 makinesi. 48 00:02:55,110 --> 00:02:58,090 >> Ve sonra bir kez tüm bu up-- ayarlanmış 49 00:02:58,090 --> 00:03:02,090 Çünkü, biraz zaman alabilir Eğer gidiyoruz çok büyük bir download-- 50 00:03:02,090 --> 00:03:07,060 VM sudo apt-get güncelleştirmesi çalıştırmak için. 51 00:03:07,060 --> 00:03:09,410 Ve bu gerçekten gidiyor tüm yazılımını güncellemek 52 00:03:09,410 --> 00:03:12,670 sanal makine üzerinde paketler. 53 00:03:12,670 --> 00:03:20,130 >> Bundan sonra, çalıştırmak için gidiyoruz sudo, install libsdl2-2.0-0 apt-get 54 00:03:20,130 --> 00:03:27,960 libsdl2-dbg, libsdl2-dev, ve ilave olarak libsdl2 görüntü-2,0-0, 55 00:03:27,960 --> 00:03:32,560 libsdl2-image-dbg, ve libsdl2-image-dev. 56 00:03:32,560 --> 00:03:33,640 Yani bu ne işe yarıyor? 57 00:03:33,640 --> 00:03:38,440 Bu sadece hata ayıklama yükler bilgi, belge, başlıklar, 58 00:03:38,440 --> 00:03:41,260 ve iki kütüphaneleri için ikili. 59 00:03:41,260 --> 00:03:45,090 SDL 2.0, eski Düzenli, ve başka bir kütüphane 60 00:03:45,090 --> 00:03:50,110 denilen SDL Görüntü, hangi Biz kullanarak gidiyoruz 61 00:03:50,110 --> 00:03:54,560 Bizim oyuna görüntü dosyalarını yüklemek için. 62 00:03:54,560 --> 00:03:57,860 >> Bunu da var bu yüzden bir kez bu sorar sadece zaman ki 63 00:03:57,860 --> 00:04:01,100 Sadece, evet yazın Enter tuşuna bu paketleri yüklemek için, 64 00:04:01,100 --> 00:04:04,430 ve daha sonra gitmek iyi olmalıdır. 65 00:04:04,430 --> 00:04:14,800 Yani, dağıtım kodunu almak için Ah sevgili can--, bu güncellenmiş değil. 66 00:04:14,800 --> 00:04:18,480 Sürece bir GitHub account-- var Eğer bir GitHub hesabınız varsa, 67 00:04:18,480 --> 00:04:24,450 Bu Git yapabilirsiniz repoya klon komut 68 00:04:24,450 --> 00:04:30,490 ve Git indirir içindeki tüm kodu ile repo, 69 00:04:30,490 --> 00:04:31,700 böylece kod olacak. 70 00:04:31,700 --> 00:04:36,470 >> Bir GitHub yoksa Hesap, ne yapmalıyım türüdür 71 00:04:36,470 --> 00:04:48,867 wgithttps: //github.com/tlively/sdl seminar-- ve burada different-- var 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 Yani yine, bu aynı değil URL, bu olacak hariç 75 00:04:59,220 --> 00:05:09,010 tlively / SDL_seminar / master.zip ve Bunu indirmek için wgit kullanıyorlar. 76 00:05:09,010 --> 00:05:12,940 Ve sonra sadece can Bu arşivi açın 77 00:05:12,940 --> 00:05:14,900 ve daha sonra gerekecek tüm kaynak kodu. 78 00:05:14,900 --> 00:05:17,580 Bu konuda çok üzgünüm. 79 00:05:17,580 --> 00:05:23,880 Ve sonra kodu da ev sahipliği yapacak Birkaç CS50 seminer web sayfası 80 00:05:23,880 --> 00:05:25,230 günler. 81 00:05:25,230 --> 00:05:26,590 >> Pekala. 82 00:05:26,590 --> 00:05:29,932 Peki nasıl başlarım Kendi oyun yazmaya? 83 00:05:29,932 --> 00:05:31,890 Peki, ilk şey bizim yapmak istediğimiz için gidiyoruz 84 00:05:31,890 --> 00:05:34,740 SDL belgelere bakmak. 85 00:05:34,740 --> 00:05:37,020 Yani burada VM var. 86 00:05:37,020 --> 00:05:38,720 Ve işte web sayfası. 87 00:05:38,720 --> 00:05:40,340 Ben libsdl.org yaşamak için gidilen ettik. 88 00:05:40,340 --> 00:05:43,110 89 00:05:43,110 --> 00:05:48,140 Ne ben burada yapacağım üzerine gidin kenar çubuğuna, dokümantasyon altında, 90 00:05:48,140 --> 00:05:51,040 ve wiki tıklayın. 91 00:05:51,040 --> 00:05:56,870 Bu wiki beni getirecek SDL belgelerine çoğu vardır. 92 00:05:56,870 --> 00:06:01,360 Burada kenar çubuğundaki içinde, konum Kategoriye göre API tıklayın gidiyor 93 00:06:01,360 --> 00:06:04,300 Çünkü verecek Bize güzel bir kategorik görünüm 94 00:06:04,300 --> 00:06:07,770 SDL için tüm API. 95 00:06:07,770 --> 00:06:12,390 >> Yani, örneğin, biz var Temel başlatma 96 00:06:12,390 --> 00:06:18,380 ve aşağı her tür kapattı SDL kullanarak idari şeyler, 97 00:06:18,380 --> 00:06:21,630 ve sonra biz bölümü için var Ekranın şeyler görüntüleniyor. 98 00:06:21,630 --> 00:06:23,000 Bu video. 99 00:06:23,000 --> 00:06:25,790 Girdi olaylar, bu getting klavyeden girdi, 100 00:06:25,790 --> 00:06:29,710 Fare girdi almak ve joystick, hatta bunu varsa. 101 00:06:29,710 --> 00:06:32,901 Şeyler için force feedback var oyun denetleyicileri gibi hangi 102 00:06:32,901 --> 00:06:34,150 Biz konuşmak için gitmiyoruz. 103 00:06:34,150 --> 00:06:35,630 Ve işte ses var. 104 00:06:35,630 --> 00:06:38,940 Ve sonra diğer bir grup var SDL Senin için yapabileceğim şeyler. 105 00:06:38,940 --> 00:06:43,830 >> Ama bugün odaklanmak için gidiyoruz Burada başlatma üzerinde, 106 00:06:43,830 --> 00:06:48,332 video görüntüme bölüm ve giriş olaylarını ele. 107 00:06:48,332 --> 00:06:50,290 Peki bu ana vardır dokümantasyon bölümleri 108 00:06:50,290 --> 00:06:53,050 Eğer endişe gerektiğini söyledi. 109 00:06:53,050 --> 00:06:57,170 Sadece eğlence için, biz üzerinden gidersek Burada ve adıyla API tıklayın 110 00:06:57,170 --> 00:07:04,350 Her bir listesini görebilirsiniz SDL kütüphanesi tek şey. 111 00:07:04,350 --> 00:07:11,330 Böylece tüm bu fonksiyonlar, numaralandırma, yapıları, malzeme çılgın miktarda 112 00:07:11,330 --> 00:07:12,820 alfabetik sıra. 113 00:07:12,820 --> 00:07:14,580 Ve açıkça kadar Ne yaptığınızı biliyorum, 114 00:07:14,580 --> 00:07:19,100 Bu, çok yararlı olacak değil hangi biz kategoriye göre API yapmak nedeni budur. 115 00:07:19,100 --> 00:07:20,810 >> Öyleyse başlayalım. 116 00:07:20,810 --> 00:07:25,680 Umarım zaten var Dağıtım kodunu indirildi. 117 00:07:25,680 --> 00:07:30,070 Ve böylece ne yapabilirim, değil mi Burada CS50 Cihazda, 118 00:07:30,070 --> 00:07:31,150 sadece bir terminal açın. 119 00:07:31,150 --> 00:07:33,750 120 00:07:33,750 --> 00:07:34,440 İşte başlıyoruz. 121 00:07:34,440 --> 00:07:40,740 Yani zaten indirdiğiniz .zip kullanarak dağıtım kodu 122 00:07:40,740 --> 00:07:41,690 yöntemi. 123 00:07:41,690 --> 00:07:43,140 Ve ben bunu fermuarını açıp ettik. 124 00:07:43,140 --> 00:07:46,120 Yani burada SDL seminer yöneticisi bulunmaktadır. 125 00:07:46,120 --> 00:07:49,750 Yani bu dizine gitmek için gidiyorum. 126 00:07:49,750 --> 00:07:55,310 Ve biz burada ne olduğunu görmek için biz yedi C dosyaları var. 127 00:07:55,310 --> 00:07:58,070 Ve bu kodu gidiyor bugün bakıyor olacağız. 128 00:07:58,070 --> 00:08:00,040 Biz bir makefile var. 129 00:08:00,040 --> 00:08:06,950 Ve biz bir kaynak dizin var, hangi basit bir imaja sahiptir 130 00:08:06,950 --> 00:08:09,070 Bu yakında yeterince görüyor olacağım. 131 00:08:09,070 --> 00:08:16,060 >> Yani bu dosyaları açmak izin G-Edit editörü kullanarak. 132 00:08:16,060 --> 00:08:22,000 Yani tüm dosyaları açmak istediğiniz Merhaba ile başlar ve .c ile sona erer. 133 00:08:22,000 --> 00:08:23,380 İşte başlıyoruz. 134 00:08:23,380 --> 00:08:28,180 Yani küçücük bir pencere var, o yüzden sen Büyük emin olmak için çalışacağım. 135 00:08:28,180 --> 00:08:28,900 Hayır, bu gitti. 136 00:08:28,900 --> 00:08:32,836 137 00:08:32,836 --> 00:08:34,570 >> Pekala. 138 00:08:34,570 --> 00:08:37,959 Yani burada ilk var Dosya biz bakmak için gidiyoruz. 139 00:08:37,959 --> 00:08:39,000 Bu hello1_sdl.c denir. 140 00:08:39,000 --> 00:08:41,890 141 00:08:41,890 --> 00:08:47,980 Ve tüm bu yapar SDL başlatmak olduğunu Kütüphane biz bunu kullanmaya başlayabilirsiniz böylece. 142 00:08:47,980 --> 00:08:51,550 Gelmek bileyim Bu kod kendiniz ile? 143 00:08:51,550 --> 00:08:53,850 Peki, biz üzerinden bakmak belgelere 144 00:08:53,850 --> 00:08:58,040 ve biz başlatma gitmek ve bölüm kapatıldı 145 00:08:58,040 --> 00:09:02,230 hepimizi söyleyecek SDL başlatmak konusunda. 146 00:09:02,230 --> 00:09:06,630 Yani kesinlikle bu başka bir zaman okuyun. 147 00:09:06,630 --> 00:09:09,230 Size tüm söyleyecek Burada neler olup bittiği hakkında. 148 00:09:09,230 --> 00:09:14,360 Ama işin asıl püf noktası olduğunu Biz In It bu işlev SDL çağırmanız gerekir 149 00:09:14,360 --> 00:09:18,910 ve onu geçmek nasıl şeyler tür Biz kütüphane başlatmak istiyoruz. 150 00:09:18,910 --> 00:09:23,620 Bizim durumumuzda Yani, biz sadece gidiyoruz şimdi videoyu başlatmak için, 151 00:09:23,620 --> 00:09:26,690 Bu yüzden görüntüleri görüntülemeye başlayabilirsiniz. 152 00:09:26,690 --> 00:09:32,370 >> Buraya, eğer görebilirsiniz Biz In It bir SDL tıklayın biz 153 00:09:32,370 --> 00:09:36,160 Hatta daha fazla bilgi alabilirsiniz, Dönüş değeri de dahil olmak üzere. 154 00:09:36,160 --> 00:09:39,050 Yani biz burada bunu görüyoruz returnes başarısına sıfır. 155 00:09:39,050 --> 00:09:43,320 Bizim kodunda Yani, biz gidiyoruz sıfıra dönmez görmek, 156 00:09:43,320 --> 00:09:47,020 ve iade etmezse sıfır, bu yüzden, başarılı olmadı 157 00:09:47,020 --> 00:09:50,650 Sonra biz sadece baskı gidiyoruz Bu diğer işlevini kullanarak bir hata, 158 00:09:50,650 --> 00:09:56,260 Bir dize döndürür SDL olsun hatası, meydana hatayı açıklayan. 159 00:09:56,260 --> 00:09:58,510 Biz yazdırmak için gidiyoruz Hata ve o zaman biz sadece konum 160 00:09:58,510 --> 00:10:02,270 Programdan çıkmak için gidiyoruz Bir hata kodu ile. 161 00:10:02,270 --> 00:10:06,470 >> İhtiyacımız Sonra başka bir şey yapmak için, program çıkmadan önce, 162 00:10:06,470 --> 00:10:10,830 başarılı SDL başlatıldı halinde, biz sadece SDL çıkın diyoruz gerekiyor. 163 00:10:10,830 --> 00:10:15,750 Ve bu temizlik işlemek için gidiyor Bizim için SDL iç kaynakların hepsi. 164 00:10:15,750 --> 00:10:21,240 Yani dokümantasyon, yine orada-- burada başlatma vardır 165 00:10:21,240 --> 00:10:23,640 ve bölüm kapatıldı Belgelerin. 166 00:10:23,640 --> 00:10:26,680 Sadece tıklayabilirsiniz Burada fonksiyon, SDL çıkın, 167 00:10:26,680 --> 00:10:28,700 ve sen de bu konuda tüm okuyabilirsiniz. 168 00:10:28,700 --> 00:10:31,400 Ve bu işlevin bir sürü dokümantasyon sayfaları 169 00:10:31,400 --> 00:10:35,630 Örnek kodu var, bu yüzden bu Çok iyi bir kaynaktır. 170 00:10:35,630 --> 00:10:39,610 Kesinlikle biraz zaman harcamak Bu wiki bölümlerini okuyarak 171 00:10:39,610 --> 00:10:42,520 Yapmanız gidiyoruz eğer Bir proje için bu. 172 00:10:42,520 --> 00:10:43,760 >> Pekala. 173 00:10:43,760 --> 00:10:46,590 Yani bizim tüm program. 174 00:10:46,590 --> 00:10:53,935 Şimdi ben o-- ne yapabilirim Burada makefile açacak, 175 00:10:53,935 --> 00:10:56,150 bu yüzden bir alacağım nasıl çalıştığını bak. 176 00:10:56,150 --> 00:10:59,500 Ve, çok basit bir makefile var: Eğer daha önce gördüm ne benzer. 177 00:10:59,500 --> 00:11:04,010 Ana farklardan biri Bu, burada, bu 178 00:11:04,010 --> 00:11:07,870 çalışan sonucunu eklemek için gidiyor Zaten ettik bu komut, 179 00:11:07,870 --> 00:11:10,850 SDL yükledim kurdum. 180 00:11:10,850 --> 00:11:13,230 Ve bu bir komut Bu üretmek için gidiyor 181 00:11:13,230 --> 00:11:16,710 derleyici için bazı ekstra bayraklar. 182 00:11:16,710 --> 00:11:22,050 >> Buna ek olarak, biz bunu veriyoruz her zamanki gibi komutlar, aynı zamanda 183 00:11:22,050 --> 00:11:23,430 Bu iki komutları. 184 00:11:23,430 --> 00:11:30,270 Yani -lsdl2 görüntü kolları SDL görüntü kütüphanesinde bağlama. 185 00:11:30,270 --> 00:11:36,200 Ve -lm aslında bağlama kolları Standart C matematik kütüphanesinde. 186 00:11:36,200 --> 00:11:40,630 Yani biz ihtiyacımız olacak değil Bizim C tüm dosyaları için olanlar, 187 00:11:40,630 --> 00:11:43,900 biz böylece ama biz sadece onları koymak her şey için aynı makefile kullanın 188 00:11:43,900 --> 00:11:44,816 değişiklik olmadan. 189 00:11:44,816 --> 00:11:46,970 190 00:11:46,970 --> 00:11:50,080 >> Buraya kaynaklarda, Bu nereye ediyorum olduğunu 191 00:11:50,080 --> 00:11:53,680 Eğer gittiğini dosyaları koymak Projeniz için derlemek için. 192 00:11:53,680 --> 00:11:57,570 Ama benim C her biri beri Burada dosyaları ana işlevi vardır 193 00:11:57,570 --> 00:12:00,000 o karışık olacak Biz hepsini koyarsanız. 194 00:12:00,000 --> 00:12:06,930 Yani, sadece söylemek için gidiyorum Şimdilik, hello1_sdl.c, 195 00:12:06,930 --> 00:12:11,150 hangi biz sadece baktı biridir. 196 00:12:11,150 --> 00:12:18,740 Ben geri gidip Yani eğer Burada, ben yaparım olabilir. 197 00:12:18,740 --> 00:12:22,160 Ve ne yaptım sadece bir ilk dosyayı derlenmiş. 198 00:12:22,160 --> 00:12:28,780 Ve sonra biz, çünkü ./game yazabilirsiniz o üretilen yürütülebilir var. 199 00:12:28,780 --> 00:12:31,660 Ve yaptım tüm yazdırma oldu başlatma başarılı. 200 00:12:31,660 --> 00:12:33,300 Bu yüzden doğru bir şey yaptım. 201 00:12:33,300 --> 00:12:36,200 Ama bu, bir tür sıkıcı bir pencere görmedim çünkü, 202 00:12:36,200 --> 00:12:37,900 hiçbir şey etrafında hareket ediyordu. 203 00:12:37,900 --> 00:12:41,030 >> Öylesine büyük, biz SDL başlatıldı var. 204 00:12:41,030 --> 00:12:43,520 Şimdi, bir şey geçelim Biraz daha ilginç. 205 00:12:43,520 --> 00:12:54,700 Yani burada biz hello2_window.c var, ve Bu biraz daha olacak 206 00:12:54,700 --> 00:13:00,010 Karmaşık C programı o SDL hemen önce gibi başlatır, 207 00:13:00,010 --> 00:13:04,250 Şimdi dışında biz de gidiyoruz SDL sayacını başlatmak için. 208 00:13:04,250 --> 00:13:07,720 Ve bu bize gidiyor İç zamanlayıcı erişmek 209 00:13:07,720 --> 00:13:10,550 ve kullanım fonksiyonları zaman ilgili. 210 00:13:10,550 --> 00:13:11,920 >> Ve sonra burada aşağı bakalım. 211 00:13:11,920 --> 00:13:16,840 Yapmamız bu işaretçi olduğunu Bir SDL pencere yapı, hangi 212 00:13:16,840 --> 00:13:21,160 Bu çağrı tarafından oluşturulan olacak işlevine, SDL pencere oluşturmak. 213 00:13:21,160 --> 00:13:25,380 Şimdi, bu argümanların bir sürü alır, böylece belgelerine bakmak gidelim. 214 00:13:25,380 --> 00:13:27,930 Yani yine, ben gidiyorum Kategoriye göre API, ben 215 00:13:27,930 --> 00:13:33,820 Burada ilk video aşağı gidiyor ve bölüm, pencere yönetimi görüntüleniyor. 216 00:13:33,820 --> 00:13:36,470 Yani bu bölüm vardır İçinde bir ton malzeme, 217 00:13:36,470 --> 00:13:39,970 ama içinden bakarsanız Bu işlevler, sen olacak 218 00:13:39,970 --> 00:13:43,620 muhtemelen tek biz bakın SDL penceresi oluşturmak denir istiyorum 219 00:13:43,620 --> 00:13:46,600 hangi üstünde doğru olur. 220 00:13:46,600 --> 00:13:49,080 >> Ve böylece bu Bu fonksiyon için belgeler. 221 00:13:49,080 --> 00:13:53,710 Pencere bir başlık var olacak, Ekrandaki bir x ve y konumunda, 222 00:13:53,710 --> 00:13:56,960 Bir genişliğe sahip olacak, yükseklik, ve daha sonra bazı bayraklar almaya gidiyor. 223 00:13:56,960 --> 00:14:01,220 Şimdi, biz aslında umurumda değil Şu anda bu bayrakların herhangi 224 00:14:01,220 --> 00:14:04,560 ama bir şey yapmak istiyorsa gibi tam ekran pencere yapmak, 225 00:14:04,560 --> 00:14:07,920 Bunun bakmak olabilir. 226 00:14:07,920 --> 00:14:13,190 Şimdilik, sadece gidiyoruz Bu özel değerler kullanmak için, 227 00:14:13,190 --> 00:14:18,775 SDL pencere artı merkezli için x ve y 228 00:14:18,775 --> 00:14:21,800 Sadece pencere oluşturmak için Bizim ekranın ortasında. 229 00:14:21,800 --> 00:14:24,370 >> Yani o ne yaptığını. 230 00:14:24,370 --> 00:14:27,960 Ve pencere olmak olur null, bir hata var, yani 231 00:14:27,960 --> 00:14:32,570 sonra tekrar biz sadece gidiyoruz SDL olsun hatası kullanılarak hata yazdırın. 232 00:14:32,570 --> 00:14:36,570 Ve sonra biz başlatıldı çünkü SDL, biz şimdi kapatmanız gerekir. 233 00:14:36,570 --> 00:14:40,900 Bu yüzden SDL önce çıkın çağrı Ana için bir dönen. 234 00:14:40,900 --> 00:14:42,905 >> Yani biz bu pencere umarım açmak var. 235 00:14:42,905 --> 00:14:44,613 Ve ne gidiyoruz Gideceğimiz yapmanız 236 00:14:44,613 --> 00:14:50,340 5000 milisaniye SDL aramak için, bu beş saniye ile aynıdır. 237 00:14:50,340 --> 00:14:55,640 Ve biz bu işin bitince, pencereyi yok oluyor, 238 00:14:55,640 --> 00:14:59,470 SDL kütüphanesi temizlemek ve programdan çıkın. 239 00:14:59,470 --> 00:15:05,240 O yüzden go ahead ve bir atış olduğunu vereyim. 240 00:15:05,240 --> 00:15:08,660 >> Şimdi yerine değişen makefile her zaman, 241 00:15:08,660 --> 00:15:12,180 Ben sadece yapmak ve yapabilirsiniz Daha sonra komut satırına, 242 00:15:12,180 --> 00:15:16,090 kaynaklar eşittir ve sonra söylemek biz derleme ediyoruz dosyası. 243 00:15:16,090 --> 00:15:17,090 Yani hello2_window.c var. 244 00:15:17,090 --> 00:15:21,390 245 00:15:21,390 --> 00:15:21,890 Harika. 246 00:15:21,890 --> 00:15:22,970 Hiçbir erros. 247 00:15:22,970 --> 00:15:26,085 Şimdi, bizim yürütülebilir çalıştırırsanız, Bu pencere görürsünüz. 248 00:15:26,085 --> 00:15:27,960 Şimdi birkaç vardır Pencerenin ile ilgili sorunlar. 249 00:15:27,960 --> 00:15:32,820 Biz bunu taşıyabilirsiniz, ancak bu var bunun içinde bu arka plan önemsiz. 250 00:15:32,820 --> 00:15:34,660 Bu yüzden çizilmiş değil şey, ve bu yüzden bu 251 00:15:34,660 --> 00:15:38,210 çöp, sadece tam olan hoş çok biz bekliyoruz budur. 252 00:15:38,210 --> 00:15:41,010 >> Ayrıca, pencereyi kapatmak olamaz. 253 00:15:41,010 --> 00:15:44,780 Ben bu X tuşuna basarak ediyorum Köşe ve hiçbir şey oluyor. 254 00:15:44,780 --> 00:15:47,840 Yani biz düzeltmek için nasıl göreceksiniz Biraz o. 255 00:15:47,840 --> 00:15:51,750 Yani kısmını düzeltmek edelim nereye Pencere ilk çöp dolu. 256 00:15:51,750 --> 00:16:00,850 Yani biz hello3_image.c üzerinden giderseniz ne Biz birkaç ekledik olduğunu görebilirsiniz 257 00:16:00,850 --> 00:16:03,360 burada daha fazla şeyler. 258 00:16:03,360 --> 00:16:08,740 Biz bu yeni başlık ekledik zamanlayıcı fonksiyonları almak için dosya. 259 00:16:08,740 --> 00:16:11,490 Ben son olarak yaptım sanırım biri de, ve ben bunu bahsetmiyorlar. 260 00:16:11,490 --> 00:16:13,550 Ama şimdi çünkü görüntülerle çalışırken, 261 00:16:13,550 --> 00:16:18,720 Biz SDL eklemeniz gerekir Görüntü başlık dosyası da. 262 00:16:18,720 --> 00:16:22,087 Yani aynı şey olarak var daha önce burada SDL başlatılırken, 263 00:16:22,087 --> 00:16:23,420 pencereleri oluşturma ile aynı anlaşma. 264 00:16:23,420 --> 00:16:25,380 Biz şimdi daha önce görmüştüm. 265 00:16:25,380 --> 00:16:29,870 >> Şimdi biz denilen bir şey yaratmak için ihtiyacınız olan çeşit birlikte gider bir renderer, 266 00:16:29,870 --> 00:16:30,800 pencere ile. 267 00:16:30,800 --> 00:16:33,860 Ama bu bir çeşit var soyut nesne 268 00:16:33,860 --> 00:16:37,370 Bütün bunları yaparken sorumlu pencereye işlemleri çizim. 269 00:16:37,370 --> 00:16:41,580 Ve aslında tekabül yüklü bir programa 270 00:16:41,580 --> 00:16:47,880 grafik donanım içine senin bilgisayar veya telefon ya da her neyse. 271 00:16:47,880 --> 00:16:51,005 Yani biz istiyoruz bayrakları Durdur-- geçmek ve belgelere bakabilirsiniz 272 00:16:51,005 --> 00:16:56,160 burada-- gidiyoruz daha fazla ayrıntı almak için SDL, hızlandırılmış işleme özellikleri de edilecek olan 273 00:16:56,160 --> 00:16:58,550 o olacak demektir Grafik donanım kullanarak 274 00:16:58,550 --> 00:17:01,490 ve sadece yazılımda benzetilmiş değil. 275 00:17:01,490 --> 00:17:07,390 >> Ve biz kullanmak için gidiyoruz SDL Renderer PRESENTVSYNC. 276 00:17:07,390 --> 00:17:12,280 VSYNC basitçe kılan bir şeydir Grafik iyi ve önler bakmak 277 00:17:12,280 --> 00:17:14,970 Bu şey denir ekran terör, nerede yarım 278 00:17:14,970 --> 00:17:17,720 Bir sonraki bir çerçeve ve yarım Çerçeve aynı zamanda çizilmiş olsun 279 00:17:17,720 --> 00:17:20,056 ve korkunç görünüyor. 280 00:17:20,056 --> 00:17:23,130 Fakat yine de, okumak gidebilirsiniz Kendi başınıza bu konuda. 281 00:17:23,130 --> 00:17:24,319 >> Yani biz burada bazı bayrakları var. 282 00:17:24,319 --> 00:17:27,810 Ve böylece biz sadece diyeceğiz Bu fonksiyon SDL renderer oluşturun. 283 00:17:27,810 --> 00:17:31,340 Biz bunu pencereyi vermek için gidiyoruz Bu renderer ile ilişkilendirmek için. 284 00:17:31,340 --> 00:17:34,520 Negatif biri ne umurumda değil demektir grafik sürücüsü kullandığımız için gidiyoruz. 285 00:17:34,520 --> 00:17:36,603 Yani hemen hemen gerektiği Her zaman negatif olmak, 286 00:17:36,603 --> 00:17:39,010 Eğer grafik sürücüleri hakkında bilmek sürece. 287 00:17:39,010 --> 00:17:41,650 Ve sonra biz sadece gidiyoruz o bizim bayrakları geçmek. 288 00:17:41,650 --> 00:17:47,240 O null döndürür Yani eğer, o zaman sen her zamanki gibi hata yazdırmak için gidiyor 289 00:17:47,240 --> 00:17:49,550 ama sonra biz de gidiyoruz Pencereyi yok 290 00:17:49,550 --> 00:17:54,970 önce bu kaynakları temizlemek için SDL çıkın çağırıyor ve geri dönen. 291 00:17:54,970 --> 00:17:58,110 >> Şimdi ilginç bölümü burada Bizim resim yüklemek nerede 292 00:17:58,110 --> 00:18:00,870 bu fonksiyon IMG_load kullanılmıştır. 293 00:18:00,870 --> 00:18:04,050 Bu Gittiğimiz tek işlevi SDL görüntü kitaplığından kullanmak için. 294 00:18:04,050 --> 00:18:05,480 Biz gereken tek kişi o. 295 00:18:05,480 --> 00:18:12,950 Bu dizeyi alır bir işlev var herhangi bir görüntü kaynağın yoludur. 296 00:18:12,950 --> 00:18:18,024 Ve bir .png olabilir, GIF, bitmap, bunlardan herhangi biri. 297 00:18:18,024 --> 00:18:19,690 Bu işlev çok güzel Ve bu yüzden. 298 00:18:19,690 --> 00:18:22,560 Bu hemen hemen herhangi bir biçimde işleyebilir. 299 00:18:22,560 --> 00:18:27,240 Bellek ve mağazalar onu içine yükler onu Bir şey, bir SDL yüzey denilen. 300 00:18:27,240 --> 00:18:34,660 >> Şimdi bir SDL yüzey sadece bir yapı olduğunu bellek görüntü verileri temsil eder. 301 00:18:34,660 --> 00:18:38,054 Yani hakkında daha fazla bilgi okuyabilirsiniz belgelerinde iki söyledi. 302 00:18:38,054 --> 00:18:40,720 Ve bu hatalar varsa, o zaman sen Her şeyi nereye yapacağız 303 00:18:40,720 --> 00:18:44,480 biz hata yazdırmak kapatmak bizim kaynaklar, ve sonra programdan çıkın. 304 00:18:44,480 --> 00:18:48,970 Şimdi ilginç bir şey daha önce olduğu Biz pencereye bu resim çizebilirsiniz 305 00:18:48,970 --> 00:18:51,390 biz aslında bir doku yapmak gerekir. 306 00:18:51,390 --> 00:18:54,460 Şimdi doku karşılık gelir yüklenen resim verilerine 307 00:18:54,460 --> 00:18:57,820 grafiğin donanım belleğine. 308 00:18:57,820 --> 00:19:00,720 >> Bu nedenle, ana yüzey içinde Hafıza, düzenli hafıza 309 00:19:00,720 --> 00:19:05,550 Hepimizin dönem kullanılarak oldum, ve bir doku bu ayrı VRAM ise 310 00:19:05,550 --> 00:19:09,410 Bellek ekran kartı denetimleri söyledi. 311 00:19:09,410 --> 00:19:13,170 Yani biz bu işlev çağrısı SDL_CreateTextureFromSurface. 312 00:19:13,170 --> 00:19:17,104 Biz bunu bizim oluşturucu ve yüzey verir. 313 00:19:17,104 --> 00:19:19,020 Ve sonra biz aslında konum yüzeyi ile yapılan 314 00:19:19,020 --> 00:19:20,311 Böylece biz sadece özgür için gidiyoruz. 315 00:19:20,311 --> 00:19:22,210 Biz artık gerek yok. 316 00:19:22,210 --> 00:19:26,650 Ve sonra bu çağrı eğer öyleyse errored ve boş döndü 317 00:19:26,650 --> 00:19:29,630 o zaman bütün yapacağız Yine bir şey raporlama hatası. 318 00:19:29,630 --> 00:19:30,920 >> Pekala. 319 00:19:30,920 --> 00:19:34,810 Burada, bazı içine almak Gerçek render işlevleri. 320 00:19:34,810 --> 00:19:37,730 Yani SDL_RenderClear çağırıyor ve geçen 321 00:19:37,730 --> 00:19:42,550 Bizim pencere ile ilişkili render sadece pencere siyah gitmek yapar. 322 00:19:42,550 --> 00:19:47,650 Yani önemsiz biz gördüğümüz o kaldırır bizim pencere önce ve siyah yapar. 323 00:19:47,650 --> 00:19:50,750 Ve sonra biz gidiyoruz SDL_RenderCopy ulaşmak için, 324 00:19:50,750 --> 00:19:53,010 o bizim render, bizim doku verir. 325 00:19:53,010 --> 00:19:55,800 Ve biz hakkında konuşmak ne yapacaksınız Bu alanlar biraz vardır. 326 00:19:55,800 --> 00:19:57,830 Ama bu gidiyor doku veri almak 327 00:19:57,830 --> 00:20:03,100 ve üzerine kopyalamak bizim Pencere resim çizmek için. 328 00:20:03,100 --> 00:20:07,020 Bu kopya yaptıktan sonra Yani Bizim pencere üzerine veri, 329 00:20:07,020 --> 00:20:11,180 biz bu ekstra fonksiyonu yapmak zorunda SDL_RenderPresent denir. 330 00:20:11,180 --> 00:20:15,360 >> Ve bu ilginç Bu olur çünkü 331 00:20:15,360 --> 00:20:18,770 çift ​​ara belleğe alma denilen bir konu haline. 332 00:20:18,770 --> 00:20:24,380 Yani çift tamponlama bir teknik olduğunu Grafik çok daha iyi görünmesini sağlar. 333 00:20:24,380 --> 00:20:28,240 Yine, bu ekran yırtılmasını engelleyici Ben, nerede daha önce bahsediyordu 334 00:20:28,240 --> 00:20:29,590 İki tamponlar var. 335 00:20:29,590 --> 00:20:32,260 Bir arka tampon içinde var hafıza ve bir ön tampon. 336 00:20:32,260 --> 00:20:36,410 Ön tampon tam anlamıyla Ne şu anda ekranda değil. 337 00:20:36,410 --> 00:20:42,070 Yani biz bu varyasyonları beraberlik her şeyi, SDL gibi kopya veya SDL_RenderClear hale 338 00:20:42,070 --> 00:20:43,080 arka tampon. 339 00:20:43,080 --> 00:20:44,800 Yani bir şeyler değiştirmek arka tamponda. 340 00:20:44,800 --> 00:20:48,970 İşte biz bu çizim olabilir arka tampon yeşil kare. 341 00:20:48,970 --> 00:20:52,300 >> Öyleyse biz yapıyoruz bitince Bizim hale işlemleri, burada 342 00:20:52,300 --> 00:20:55,700 Gerçekten uzun sürebilir Zaman, ne yapacağız 343 00:20:55,700 --> 00:20:57,860 tamponlar geçiş olduğunu. 344 00:20:57,860 --> 00:21:00,720 Yani kelimenin tam anlamıyla sadece alır Ön tampon ve arka tampon 345 00:21:00,720 --> 00:21:02,990 ve bu nedenle, onları anahtarları bu, ani, 346 00:21:02,990 --> 00:21:06,630 tek bir işlemde yerine Belki yüzlerce veya binlerce, 347 00:21:06,630 --> 00:21:10,910 bizim yeni render tüm nesneler ekranda bulunmaktadır. 348 00:21:10,910 --> 00:21:13,160 Ve bu şeyleri engeller Ekran ferahlatıcı gibi 349 00:21:13,160 --> 00:21:16,710 biz sadece boğuldum yarısı çerçeveye yönelik nesneleri. 350 00:21:16,710 --> 00:21:21,280 Dediğimiz gereken İşte bu yüzden SDL_RenderPresent yanı sıra 351 00:21:21,280 --> 00:21:23,320 SDL_RenderCopy olarak. 352 00:21:23,320 --> 00:21:25,749 >> Yine, biz sadece gidiyoruz beş saniye bekleyin. 353 00:21:25,749 --> 00:21:27,540 Sonra biz gidiyoruz Bizim kaynakları temizlemek. 354 00:21:27,540 --> 00:21:29,540 Biz daha epeyce bu zaman var. 355 00:21:29,540 --> 00:21:31,750 Ve sonra biz sadece gidiyoruz Programdan çıkmak için. 356 00:21:31,750 --> 00:21:35,350 O yüzden böyle yapalım. 357 00:21:35,350 --> 00:21:41,880 Ben kaynaklar make yazın gidiyor, sonra ben hello-- bu şimdi 3image.c olduğunu eşittir. 358 00:21:41,880 --> 00:21:49,632 359 00:21:49,632 --> 00:21:52,240 Pekala, hiç hata derlenmiş. 360 00:21:52,240 --> 00:21:57,210 Ve burada görebilirsiniz şimdi var Resmimi süzgün, Merhaba, CS50! 361 00:21:57,210 --> 00:22:00,560 bizim pencere, hangi Beş saniye sonra kaybolur. 362 00:22:00,560 --> 00:22:02,090 >> Şimdi, bu hala doğru, sorunları var? 363 00:22:02,090 --> 00:22:05,750 Bu, iyi bir uygulama değildir, Ben pencereyi kapatmak için çalıştığınızda, çünkü 364 00:22:05,750 --> 00:22:06,500 hiçbir şey olmuyor. 365 00:22:06,500 --> 00:22:09,540 O x hala duyarlı değildir. 366 00:22:09,540 --> 00:22:17,420 Yani bir göz atalım Bir sonraki resime, hello4animation. 367 00:22:17,420 --> 00:22:21,850 Yani bu dosya Bu tanıtmak için gidiyor 368 00:22:21,850 --> 00:22:25,124 Bizim görüntüye hareketli ve hareket. 369 00:22:25,124 --> 00:22:27,040 Yani biz yapacağız Aynı şey eskisi gibi, 370 00:22:27,040 --> 00:22:30,190 SDL başlatmak oluşturmak Pencere, renderer oluşturmak 371 00:22:30,190 --> 00:22:33,030 içine resim yüklemek Bellek, doku oluşturmak. 372 00:22:33,030 --> 00:22:35,090 Biz önce bütün gördüm. 373 00:22:35,090 --> 00:22:36,770 Şimdi, bu yeni. 374 00:22:36,770 --> 00:22:42,305 Biz bir yapı denilen gidiyoruz Sadece bir dikdörtgen bir SDL rect. 375 00:22:42,305 --> 00:22:49,950 Burada üzerinde gidersek, biz SDL rect için bir arama yapmak, 376 00:22:49,950 --> 00:22:54,040 ve bunun bir olduğunu görebiliyorum çok basit bir yapı. 377 00:22:54,040 --> 00:22:56,760 Bir x, y için vardır konumu ve 378 00:22:56,760 --> 00:23:02,080 bir genişlik ve yükseklik için vardır Dikdörtgenin boyutları. 379 00:23:02,080 --> 00:23:07,785 >> Yani biz konum ne yapacağız olduğunu Bu SDL rect dest tanımlamak için gidiyor, 380 00:23:07,785 --> 00:23:09,480 Hedef için. 381 00:23:09,480 --> 00:23:14,130 Ve bu yer nerede ekranda 382 00:23:14,130 --> 00:23:16,005 Biz çizim için gidiyoruz Bizim görüntü, sağ Yani 383 00:23:16,005 --> 00:23:17,880 biz olmak için gidiyoruz etrafında hareketli görüntü, 384 00:23:17,880 --> 00:23:20,300 ardından hedef nerede Biz resim çizmek için gidiyoruz 385 00:23:20,300 --> 00:23:22,620 dolaşırım gerekir. 386 00:23:22,620 --> 00:23:24,910 Yani biz bu diyeceğiz Fonksiyon SDL_QueryTexture. 387 00:23:24,910 --> 00:23:27,550 388 00:23:27,550 --> 00:23:33,500 Ve ben adresi geçirerek fark dest.w bölgesinin genişliği olan 389 00:23:33,500 --> 00:23:36,950 ve dest.h, yükseklik olan. 390 00:23:36,950 --> 00:23:40,425 Ve böylece SDL_QueryTexture gidiyor genişliği bu alanlarda saklamak için 391 00:23:40,425 --> 00:23:41,675 ve bizim doku yüksekliği. 392 00:23:41,675 --> 00:23:44,680 393 00:23:44,680 --> 00:23:47,030 >> Ve sonra ben gidiyorum ne Ben gidiyorum yapmanız 394 00:23:47,030 --> 00:23:55,580 dest.x olmak için pencereyi ayarlamak için bir genişlik eksi dest.w, 395 00:23:55,580 --> 00:23:59,000 2 bölü sprite genişliği. 396 00:23:59,000 --> 00:24:03,860 Ve bu yüzden kurmak için gidiyor Görüntü mükemmel merkezli olduğunu 397 00:24:03,860 --> 00:24:06,780 bizim penceresinde, tamam mı? 398 00:24:06,780 --> 00:24:08,652 Yani şimdi ben bir y konuma sahip. 399 00:24:08,652 --> 00:24:10,360 Ve bu gidiyor olan bir değişken olabilir 400 00:24:10,360 --> 00:24:16,390 biz olmak için gidiyoruz, çünkü değişen y yönünde hareketli görüntü. 401 00:24:16,390 --> 00:24:19,050 Ve şimdi biz bir şey var bir animasyon döngü denir. 402 00:24:19,050 --> 00:24:21,180 >> Peki nasıl animasyon çalışır? 403 00:24:21,180 --> 00:24:27,630 Peki, insan gözü 12 farklı algılayabilir Her saniyede görüntüleri, tamam mı? 404 00:24:27,630 --> 00:24:33,060 Bana 12 resim kartları flaş Yani eğer Bir saniye, ben bu görüntülerin her gördüm 405 00:24:33,060 --> 00:24:35,950 kendine özgü bireysel görüntü olarak. 406 00:24:35,950 --> 00:24:39,690 Şimdi, daha fazla flaş varsa İkinci olarak bana resim, 407 00:24:39,690 --> 00:24:42,140 Sonra gözüm başlamak istiyorum Onları birbirine karışmaya 408 00:24:42,140 --> 00:24:46,920 ve ben hareket olarak algılarlar olacaktır, yerine tek farklı görüntü. 409 00:24:46,920 --> 00:24:51,930 Yani, örneğin, filmler ve televizyon için, onlar 24 kez görüntüleri flaş 410 00:24:51,930 --> 00:24:52,570 bir saniye. 411 00:24:52,570 --> 00:24:55,110 Yani saniyede 24 kare var. 412 00:24:55,110 --> 00:25:00,136 Bilgisayar ekranları, diğer taraftan, genellikle saniyede 60 kare vardır. 413 00:25:00,136 --> 00:25:01,260 Bu onların yenileme hızı var. 414 00:25:01,260 --> 00:25:04,650 Yani yenilemek ne sıklıkta var Ekrandaki resim. 415 00:25:04,650 --> 00:25:08,960 Yani bizim hedef 60 olacak Bizim oyunlar için saniyede kare. 416 00:25:08,960 --> 00:25:11,770 417 00:25:11,770 --> 00:25:13,710 >> Yani kodda olduğunu görelim. 418 00:25:13,710 --> 00:25:19,064 Her kare için Yani, biz öncelikle konum Pencereyi temizlemek için gidiyor. 419 00:25:19,064 --> 00:25:20,230 Bu genel bir kalıptır. 420 00:25:20,230 --> 00:25:22,450 Her zaman açık Pencere her kare, ve sonra 421 00:25:22,450 --> 00:25:25,210 senin çizim her şeyi işlemler ve sonunda 422 00:25:25,210 --> 00:25:29,610 RenderPresent göstermek do çerçeve içinde her şeyi. 423 00:25:29,610 --> 00:25:33,910 Ve sonra gidiyoruz sonunda bir bekleme var 424 00:25:33,910 --> 00:25:36,340 Bir sonraki beklemek Çerçeve başlamalıdır. 425 00:25:36,340 --> 00:25:38,650 >> Ben bir sürü yapıyor olsaydı Yani Burada karmaşık hesaplama 426 00:25:38,650 --> 00:25:43,100 Bu fazla 16 milisaniye sürdü, Benim için imkansız olurdu 427 00:25:43,100 --> 00:25:46,890 60 O çerçeve hızı elde etmek için bu Her çerçeve çünkü, istediğim 428 00:25:46,890 --> 00:25:48,750 hesaplamak için çok uzun sürüyor. 429 00:25:48,750 --> 00:25:52,340 Ayrıca, gerçekten yapıyoruz iş ihmal edilebilecek kadar az sıralama 430 00:25:52,340 --> 00:25:54,820 Burada, sadece var, çünkü Biz çizim konum bir şey. 431 00:25:54,820 --> 00:25:59,390 Yani sadece a 1/60 oranında bekleyin ikinci olarak, uzunluğu olan 432 00:25:59,390 --> 00:26:01,520 kare arasında bir karenin. 433 00:26:01,520 --> 00:26:05,610 Yani bir çeşit yapıyorum gibi davranarak ediyorum Bütün çalışmalarım sıfır zaman alır. 434 00:26:05,610 --> 00:26:09,050 Ama gerçek bir oyun, Eğer çıkarmak zorunda kalacak 435 00:26:09,050 --> 00:26:13,760 süre bunu yapmak için aldı senin dinlenme zaman bütün bu çalışmalar. 436 00:26:13,760 --> 00:26:16,970 >> Neyse, ben neyim aslında bu döngü yapıyor? 437 00:26:16,970 --> 00:26:19,070 Pencereyi temizleyin. 438 00:26:19,070 --> 00:26:27,470 Ben bir int dest.y, set benim gerçek y konumu int dökülür. 439 00:26:27,470 --> 00:26:32,070 Şimdi, ben çözünürlüğü şamandıra istiyorum benim oyun benim y pozisyon için, 440 00:26:32,070 --> 00:26:34,150 ama sonra aslında için Ekranın üzerine çizmek, 441 00:26:34,150 --> 00:26:39,070 Bu birimler halinde olduğu için bu, ints ihtiyacı piksel, böylece döküm için var. 442 00:26:39,070 --> 00:26:41,745 Ben resim çizmek için gidiyorum. 443 00:26:41,745 --> 00:26:45,180 Yani bu kaynak dikdörtgen olduğunu. 444 00:26:45,180 --> 00:26:47,060 Ve bu hedef dikdörtgen. 445 00:26:47,060 --> 00:26:50,310 Yani null geçti kaynak dikdörtgen 446 00:26:50,310 --> 00:26:53,426 Benim bütün doku çizmek istiyorum demek. 447 00:26:53,426 --> 00:26:55,300 Ama eğer bir sürü vardı oyununda dokular 448 00:26:55,300 --> 00:26:59,120 ve onlar büyük bir doku haritası her şeysin bu sadece bir olarak SDL içine yüklendi 449 00:26:59,120 --> 00:27:02,850 doku, yapabilirsin Bir kaynak dikdörtgen kullanın 450 00:27:02,850 --> 00:27:06,750 Daha küçük dokular birini seçmek için, Daha küçük sprite biri, 451 00:27:06,750 --> 00:27:09,450 o büyük doku haritası dışarı. 452 00:27:09,450 --> 00:27:14,740 >> Yani yine, benim hale geçirerek, benim doku ve şimdi hedef. 453 00:27:14,740 --> 00:27:18,320 Bu nerede olacak penceresi çizilecek gidiyor. 454 00:27:18,320 --> 00:27:21,390 Ve sonra, ben animasyon olduğum için bir şey, ben hareket ihtiyacım var, 455 00:27:21,390 --> 00:27:25,150 Ben güncelleme için gidiyorum Her karede sprite konumu. 456 00:27:25,150 --> 00:27:30,190 Yani bu sabit denilen kaydırma var Saniyede piksel birimleri de hızlandırır. 457 00:27:30,190 --> 00:27:34,320 Şimdi, bir hareketi yapmak her zaman, Çerçeve sadece 1/60 saniyenin olduğunu. 458 00:27:34,320 --> 00:27:36,740 Yani 60 ile o bölmek için gidiyorum. 459 00:27:36,740 --> 00:27:42,350 Ve sonra, ben, görelim y konumu o çıkarılması. 460 00:27:42,350 --> 00:27:44,470 Neden çıkarılarak ki? 461 00:27:44,470 --> 00:27:46,169 Biz bir saniyede o alırsınız. 462 00:27:46,169 --> 00:27:48,460 Öyleyse benim kaynakları temizlemek ve program bitti. 463 00:27:48,460 --> 00:27:49,830 >> Yani o yapalım. 464 00:27:49,830 --> 00:27:52,450 465 00:27:52,450 --> 00:28:03,570 Öyleyse yapmak SRCs = hello4 içine gidelim animation.c, tamam mı? 466 00:28:03,570 --> 00:28:05,720 Oyunu. 467 00:28:05,720 --> 00:28:06,770 Orada sen gitmek. 468 00:28:06,770 --> 00:28:12,690 Yani o kadar kaydırma var Oldukça düzgün penceresi. 469 00:28:12,690 --> 00:28:17,110 Ama çıkarılarak oldu, bekle y konumu her zaman gelen. 470 00:28:17,110 --> 00:28:18,910 Orada neler oluyor? 471 00:28:18,910 --> 00:28:24,010 Eh, o SDL çıkıyor ve Aslında, çoğu bilgisayar grafikleri, 472 00:28:24,010 --> 00:28:28,890 koordinat sistemi için kökenli Pencerenin sol üst olduğunu. 473 00:28:28,890 --> 00:28:34,960 >> Yani pozitif x yönü gider sağ pencerenizin karşısında. 474 00:28:34,960 --> 00:28:38,110 Ve pozitif y yönünde Aslında iner. 475 00:28:38,110 --> 00:28:40,470 Yani yine, Origin adlı bölgesindeki pencerenizin sol üst, 476 00:28:40,470 --> 00:28:46,190 Pozitif y yönünde, aşağı ve pozitif x sağa etmektir. 477 00:28:46,190 --> 00:28:48,770 Yani çıkarma yaparken y konumu, işte bu 478 00:28:48,770 --> 00:28:52,640 negatif gitmek yapacak up penceresi y yönü. 479 00:28:52,640 --> 00:28:55,500 Yani orada neler oluyor bu. 480 00:28:55,500 --> 00:28:56,510 Güzel. 481 00:28:56,510 --> 00:28:59,240 >> Dosyasının yanında bakalım. 482 00:28:59,240 --> 00:29:05,700 İşte parçasıdır nerede nihayet göstermek 483 00:29:05,700 --> 00:29:08,920 Pencerenin köşesinde o X olsun Bu pencereyi kapatmak gerekiyordu 484 00:29:08,920 --> 00:29:10,660 çalışmak. 485 00:29:10,660 --> 00:29:12,800 Yani ne oluyor? 486 00:29:12,800 --> 00:29:17,520 Biz, bir pencere oluşturmak, SDL başlatılamıyor , render oluşturmak resim yüklemek, 487 00:29:17,520 --> 00:29:19,770 doku oluşturmak gibi daha önce görmüştüm. 488 00:29:19,770 --> 00:29:26,850 Aynı hedef dikdörtgeni var daha önce olduğu gibi, aynı çağrı dokusunu sorgulamak için. 489 00:29:26,850 --> 00:29:29,780 Ama bu sefer, biz sonra konum genişlik bölmek için gidiyor 490 00:29:29,780 --> 00:29:33,110 ve 4 ile hedefimize yüksekliği. 491 00:29:33,110 --> 00:29:36,430 Bu yalnızca etkisine sahiptir imajımızı aşağı zaman ölçekleme 492 00:29:36,430 --> 00:29:39,884 biz dört tarafından penceresinde görüntüler. 493 00:29:39,884 --> 00:29:40,800 Yani oldukça düzgün değil. 494 00:29:40,800 --> 00:29:42,770 Biz sadece sadece böyle ölçeklendirilebilir. 495 00:29:42,770 --> 00:29:45,970 Biz sprite başlatmak için gidiyoruz Ekranın ortasında. 496 00:29:45,970 --> 00:29:49,410 Ve şimdi biz x ve y hız ve var ikisi de sıfırdan başlamak için gidiyoruz. 497 00:29:49,410 --> 00:29:53,740 498 00:29:53,740 --> 00:29:55,880 >> Bu yanlış bir dosyadır. 499 00:29:55,880 --> 00:29:56,380 Özür dilerim. 500 00:29:56,380 --> 00:29:57,960 Yani hepsi doğrudur. 501 00:29:57,960 --> 00:30:00,170 İşte bu dosyadaki tüm hala. 502 00:30:00,170 --> 00:30:03,210 Biz 4 ve her şeyi ile uçurumu var. 503 00:30:03,210 --> 00:30:07,830 Yani burada bizim x ve y konumu var Pencerenin merkezi için. 504 00:30:07,830 --> 00:30:12,480 Ve biz bunu bir başlangıç ​​hızı vermek Bu sabit bir hızla, hangi 505 00:30:12,480 --> 00:30:15,180 Ben saniyede 300 piksel olduğuna inanıyorum. 506 00:30:15,180 --> 00:30:19,850 Şimdi, biz bu int gibi iyi olabilir var yakın talep adında bir boolean olabilir. 507 00:30:19,850 --> 00:30:23,970 Ve yerine bir yapıyor Burada bir zamanlayıcı üzerinde sonsuz döngü, 508 00:30:23,970 --> 00:30:29,180 biz animasyon için gidiyoruz yakın sürece talep edilmez. 509 00:30:29,180 --> 00:30:30,960 >> Peki nasıl olayları işlemek mı? 510 00:30:30,960 --> 00:30:35,600 Peki, SDL bir de olayları sıraya dizer perde arkasında literal kuyruk. 511 00:30:35,600 --> 00:30:38,860 Ve sonra her kare, Biz olayları sıradan çıkarma yapabilirsiniz 512 00:30:38,860 --> 00:30:43,900 kullanarak bu kuyruktan Bu çağrı SDL_PullEvent. 513 00:30:43,900 --> 00:30:46,730 Ve yine, kesinlikle okumak gitmek belgelerinde bu konuda. 514 00:30:46,730 --> 00:30:50,450 Çok daha fazla ayrıntı ve bir sürü var daha fazla işlevleri bununla kullanabilirsiniz. 515 00:30:50,450 --> 00:30:54,750 Biz adresi geçmesi Bu şey, SDL_Event 516 00:30:54,750 --> 00:30:56,990 biz burada yığını var. 517 00:30:56,990 --> 00:30:58,840 >> Şimdi, bir SDL_event nedir? 518 00:30:58,840 --> 00:31:02,356 SDL Çünkü biz bakarsanız documentation-- diyelim 519 00:31:02,356 --> 00:31:07,580 kategori, girişi, API bakın olaylar, olay yönetimi, 520 00:31:07,580 --> 00:31:15,150 Biz numara bakabilirsiniz Buradan farklı etkinlikler 521 00:31:15,150 --> 00:31:18,600 ve biz orada görebilirsiniz Bunların bir bütün ton. 522 00:31:18,600 --> 00:31:22,150 Yani bu SDL_Event şey nedir? 523 00:31:22,150 --> 00:31:28,190 524 00:31:28,190 --> 00:31:31,107 SDL_Event bir birliktir. 525 00:31:31,107 --> 00:31:31,940 Vay, sendika nedir? 526 00:31:31,940 --> 00:31:33,910 Muhtemelen hiç ettik önce duydum. 527 00:31:33,910 --> 00:31:35,610 Ve bunda bir sorun yok. 528 00:31:35,610 --> 00:31:39,420 >> Bir sendika tür gibi Bir yapı dışında bir yapı, 529 00:31:39,420 --> 00:31:41,960 tümü için bir alana sahip kendi alanları ve bellek, 530 00:31:41,960 --> 00:31:45,060 Sendika sadece oysa yeterli alan en büyük sığdırmak için 531 00:31:45,060 --> 00:31:49,660 Bunu demek onun alanlardan biri, sadece alanlardan birini saklayabilirsiniz 532 00:31:49,660 --> 00:31:52,830 Bir zamanda, hangi tür Doğru, etkinlikler için mantıklı? 533 00:31:52,830 --> 00:31:55,810 Biz bir klavye olabilir olay veya pencere olay, 534 00:31:55,810 --> 00:31:59,750 ancak tek bir olay hem olamaz Klavye olayı ve bir pencere olay, 535 00:31:59,750 --> 00:32:05,450 bu yüzden için boşluk olması saçma olurdu Bizim olay birliğin içinde olanların hem de. 536 00:32:05,450 --> 00:32:07,770 Yani eğer istedim Kendi birliği oluşturmak 537 00:32:07,770 --> 00:32:10,020 tam olarak aynı görünüyor Bir yapı oluşturma gibi, 538 00:32:10,020 --> 00:32:14,140 dışında biz sendika anahtar sözcüğünü kullanın yerine struct anahtar kelime. 539 00:32:14,140 --> 00:32:17,490 Ve hepsi için hatırlıyorum senin sendika içindeki şeyler, 540 00:32:17,490 --> 00:32:22,020 Sendika fiili değişken sadece bu değerlerden birine sahip olabilir 541 00:32:22,020 --> 00:32:24,780 zamanında. 542 00:32:24,780 --> 00:32:29,940 >> Peki olayın ne tür söyleyebilirim biz sadece bu sıranın kapalı attı? 543 00:32:29,940 --> 00:32:33,370 Peki, biz Event.type için test edebilirsiniz. 544 00:32:33,370 --> 00:32:35,792 Ve bu eşitse SDL_Quit, biz biliyoruz 545 00:32:35,792 --> 00:32:37,500 olay olduğunu ne zaman biz oluşturulan 546 00:32:37,500 --> 00:32:39,510 Pencerenin köşesinde o X çarptı. 547 00:32:39,510 --> 00:32:44,270 Ve yakın talep set edebilirsiniz biz 1 eşittir. 548 00:32:44,270 --> 00:32:47,230 Gerisi sadece bazı animasyon Daha önce gördüğüm. 549 00:32:47,230 --> 00:32:52,802 O yüzden go ahead ve yapalım Bu ve nasıl çalıştığını iyi bakın. 550 00:32:52,802 --> 00:32:55,135 Yani markasını yazın gidiyorum ve Daha sonra SRCs = hello5_events.c. 551 00:32:55,135 --> 00:33:03,760 552 00:33:03,760 --> 00:33:04,770 Oraya gidiyoruz. 553 00:33:04,770 --> 00:33:05,780 Oyunlar. 554 00:33:05,780 --> 00:33:08,920 >> Şimdi, biz ne görebilirsiniz Gerçekten dört ile küçültülmüş. 555 00:33:08,920 --> 00:33:10,360 Ve şimdi etrafta zıplayan var. 556 00:33:10,360 --> 00:33:14,630 Bazı çarpışma algılama var Pencerenin tarafı ile oluyor 557 00:33:14,630 --> 00:33:16,840 Biz bir göz alabilir. 558 00:33:16,840 --> 00:33:21,190 Bunu kapatmak için gittiğinizde ne olur? 559 00:33:21,190 --> 00:33:22,120 Bu kapatır. 560 00:33:22,120 --> 00:33:22,740 Harika. 561 00:33:22,740 --> 00:33:24,290 Biz bu olay aldı. 562 00:33:24,290 --> 00:33:26,630 Ve biz bunu ele. 563 00:33:26,630 --> 00:33:30,730 >> Yani kodunun geri bakalım. 564 00:33:30,730 --> 00:33:33,020 Peki onu nasıl aldın Böyle etrafta zıplayan? 565 00:33:33,020 --> 00:33:37,200 Unutmayın ben de x set ve ilk hızlara y. 566 00:33:37,200 --> 00:33:39,260 Ve hız pozitif olduğu sabit böylece var: 567 00:33:39,260 --> 00:33:42,680 gidiyor başlıyor almak aşağı ve sağa gidiyor. 568 00:33:42,680 --> 00:33:45,680 569 00:33:45,680 --> 00:33:50,310 >> Şimdi, elleçleme ek olarak her kare, meydana gelmiş olabilecek olaylar, 570 00:33:50,310 --> 00:33:57,520 Ben sprite olmadığını algılamak için gidiyorum pencereden dışarı çıkmak için çalışıyor. 571 00:33:57,520 --> 00:34:03,610 Yani biz sadece kontrol ederek bunu yapabilirsiniz 0 ile x_pos sonra y_pos 0 ve 572 00:34:03,610 --> 00:34:07,370 Ayrıca x_pos ve y_pos ile pencere genişliği ve pencere yüksekliği. 573 00:34:07,370 --> 00:34:11,010 Ben çıkarılır ettik dikkat sprite genişliği. 574 00:34:11,010 --> 00:34:14,090 Ben yapmadım çünkü eğer Ve bu sprite genişliğini çıkarma, 575 00:34:14,090 --> 00:34:17,760 yalnızca olmadığını kontrol ediyorum sprite kökeni 576 00:34:17,760 --> 00:34:19,690 pencere dışında gitmedi. 577 00:34:19,690 --> 00:34:21,480 Ama biz bütününü istiyoruz sprite genişliği 578 00:34:21,480 --> 00:34:24,030 Her zaman penceresinin içinde olması ve sprite tüm yüksekliği 579 00:34:24,030 --> 00:34:25,321 Her zaman pencereye içinde olmak. 580 00:34:25,321 --> 00:34:27,429 Yani çıkarma için var. 581 00:34:27,429 --> 00:34:30,080 Burada geometri bir sürü can dışarı çekmek için yararlı olabilir 582 00:34:30,080 --> 00:34:33,929 koordinat ile kağıt üzerinde Sistem ne olup bittiğini görmek için. 583 00:34:33,929 --> 00:34:38,090 >> Ben çarpışır yoksa Yani, ben sadece sadece konumunu sıfırlamak 584 00:34:38,090 --> 00:34:41,400 o gitmiyor ki ekrandan dışarı. 585 00:34:41,400 --> 00:34:47,179 O sekerek Ve eğer ben, gidiyorum Yan duvarların birinde, 586 00:34:47,179 --> 00:34:51,469 Ben inkâr gidiyorum x hız böylece 587 00:34:51,469 --> 00:34:53,210 diğer yönde sıçrayan başlar. 588 00:34:53,210 --> 00:34:56,210 Ve benzer şekilde, bu isabet ederse üst veya alt, 589 00:34:56,210 --> 00:34:59,820 I y hızı ayarlamak için gidiyorum Negatif y hızına eşit, 590 00:34:59,820 --> 00:35:01,690 böylece geri sıçrama olacaktır. 591 00:35:01,690 --> 00:35:03,860 Yani biz burada var ki sadece nasıl. 592 00:35:03,860 --> 00:35:07,560 >> Ve güncelleme pozisyonları Sadece, daha önce gördüğümüz gibi 593 00:35:07,560 --> 00:35:12,510 Biz çünkü, 60 bölmek Sadece bir saniyenin 1/60 oranında taşıma. 594 00:35:12,510 --> 00:35:15,750 Ve sonra render daha önce tam olarak aynı. 595 00:35:15,750 --> 00:35:19,810 Ve böylece her şey bu dosya üzerinde gidiyordu. 596 00:35:19,810 --> 00:35:22,490 Biz olayları nasıl Yani bu. 597 00:35:22,490 --> 00:35:29,260 Önemli olan burada götürmek için Bu SDL_PullEvent fonksiyonudur. 598 00:35:29,260 --> 00:35:33,020 Ve kesinlikle okumalısınız SDL_Event hakkında belgeler daha 599 00:35:33,020 --> 00:35:38,630 Sendika, bu veri türü olduğundan çok çok önemli, bunu kullanmak için 600 00:35:38,630 --> 00:35:40,690 Olayların her türlü. 601 00:35:40,690 --> 00:35:46,539 >> Örneğin, biz klavyenin için kullanabilirsiniz olaylar, hangi bu dosyanın için budur. 602 00:35:46,539 --> 00:35:47,330 Peki ne var? 603 00:35:47,330 --> 00:35:50,180 Biz, daha önce olduğu gibi aynı şeyi , SDL başlatmak bir pencere oluşturmak, 604 00:35:50,180 --> 00:35:55,260 resim yüklemek, bir renderer oluşturmak belleğe, doku oluşturmak. 605 00:35:55,260 --> 00:36:00,530 Yine, biz gidiyoruz Bu hedef dikdörtgen var, 606 00:36:00,530 --> 00:36:04,890 Biz Görüntüyü ölçeklemek için gidiyoruz dört ile, biraz daha küçük yapmak. 607 00:36:04,890 --> 00:36:08,000 Şimdi, biz başlatmak için gidiyoruz ekranın ortasında sprite. 608 00:36:08,000 --> 00:36:12,090 Ama bu sefer, biz ayarlamak için gidiyoruz İlk x ve y sıfıra hızları, 609 00:36:12,090 --> 00:36:15,140 Klavye, çünkü Bu kontrol edecek. 610 00:36:15,140 --> 00:36:18,900 Ve dahası, biz gidiyoruz Bu değişkenlerin takip 611 00:36:18,900 --> 00:36:20,450 yukarı, aşağı, sola ve sağa. 612 00:36:20,450 --> 00:36:23,090 Ve bu devam edecek biz ettik olsun iz 613 00:36:23,090 --> 00:36:27,370 Klavye tuşlarını basılı olduğu yukarı, aşağı, sola karşılık, 614 00:36:27,370 --> 00:36:28,460 ve sağ. 615 00:36:28,460 --> 00:36:32,440 >> Şimdi, bu fantezi tür Biz W, A, S kullanabilirsiniz, çünkü, 616 00:36:32,440 --> 00:36:35,480 Burada D, ya da gerçek ok tuşlarını kullanın. 617 00:36:35,480 --> 00:36:38,590 Biz sadece bir saniye içinde olduğunu görürsünüz. 618 00:36:38,590 --> 00:36:41,140 Yani biz işlemek için gidiyoruz Sadece eskisi gibi olay. 619 00:36:41,140 --> 00:36:42,530 Biz olayı çekin. 620 00:36:42,530 --> 00:36:45,840 Ama şimdi biz gidiyoruz Olay türü açın. 621 00:36:45,840 --> 00:36:47,710 O SDL_Quit ise, biz konum yakın ayarlamak için gidiyor 622 00:36:47,710 --> 00:36:49,990 daha önce olduğu gibi, birine istedi. 623 00:36:49,990 --> 00:36:52,315 Yani içinde x kolları Pencerenin köşesi, 624 00:36:52,315 --> 00:36:55,050 Bizim pencere aslında bir şekilde kapanacaktır. 625 00:36:55,050 --> 00:37:00,110 >> Aksi takdirde, bir SDL anahtar alırsanız aşağı Biz tuşuna bastığında anlamına olay, 626 00:37:00,110 --> 00:37:04,470 Sonra ne yapacağız biz olman Burada bu şey üzerinde geçiş yapmak için gidiyor 627 00:37:04,470 --> 00:37:11,370 hangi böylece event.key means-- Bizim olay birlik tedavi anlamına gelir, 628 00:37:11,370 --> 00:37:15,490 gidin ve anahtarı almak bu olay yapısı. 629 00:37:15,490 --> 00:37:18,810 Peki bu çıkıyor Sendika önemli bir olay yapıdır. 630 00:37:18,810 --> 00:37:22,820 Ve sonra anahtarına gidin Etkinliğin yapısı saha 631 00:37:22,820 --> 00:37:26,140 adı keysym ve scancode. 632 00:37:26,140 --> 00:37:29,480 Ve yine, kesinlikle okumak Bu konuda belgeler. 633 00:37:29,480 --> 00:37:31,220 Kelime girişler oldukça ilginç. 634 00:37:31,220 --> 00:37:34,020 Tarama kodları veya anahtar kodları alabilirsiniz. 635 00:37:34,020 --> 00:37:38,590 Ve bu, biraz ince ama dokümantasyon oldukça iyidir. 636 00:37:38,590 --> 00:37:43,380 >> Biz tarama kodu için bkz Yani olmak W veya yukarı bizim tuşa basın, 637 00:37:43,380 --> 00:37:45,450 Biz 1'e eşit kurmak için gidiyoruz. 638 00:37:45,450 --> 00:37:47,240 Ve sonra biz bu anahtarın patlak. 639 00:37:47,240 --> 00:37:52,980 O A veya sola ise, biz ve diğerleri, 1 sol seti vesaire, vesaire, aşağı ve sağa için. 640 00:37:52,980 --> 00:37:57,080 Şimdi, bu dış anahtarı üzerinden, Biz olayı bir anahtarı görürseniz, 641 00:37:57,080 --> 00:38:00,730 biz bir anahtar sunduk demektir ve biz artık basıyoruz. 642 00:38:00,730 --> 00:38:05,380 Yani 0 eşittir kadar söylemek için gidiyorum, Sol, aşağı, sağa 0 eşittir 0 eşittir 643 00:38:05,380 --> 00:38:08,260 0 eşittir, vesaire. 644 00:38:08,260 --> 00:38:12,070 >> Ve biz bunların her biri var fark İki olgu birbirine hemen yanındaki koymak 645 00:38:12,070 --> 00:38:14,490 ayrı bir kod ile İlk durumda, bu için 646 00:38:14,490 --> 00:38:18,180 o olsun demektir S ya da tam burada aşağı, 647 00:38:18,180 --> 00:38:20,520 Bu kod yürütmesine gidiyor. 648 00:38:20,520 --> 00:38:22,090 Yani oldukça kullanışlı. 649 00:38:22,090 --> 00:38:24,830 Bize daha fazlasını yapmak zorunda önler koşulları ve IFS ve işler 650 00:38:24,830 --> 00:38:26,980 bunun gibi. 651 00:38:26,980 --> 00:38:29,420 >> Yani biz gidiyoruz hız belirler. 652 00:38:29,420 --> 00:38:31,020 Biz 0 hız ayarlayın. 653 00:38:31,020 --> 00:38:33,910 Sonra yukarı basılırsa ve aşağı değil, o zaman 654 00:38:33,910 --> 00:38:37,450 Negatif hız y hızı ayarlayın. 655 00:38:37,450 --> 00:38:42,930 Negatif hatırlıyorum çünkü Negatif y yönünde kadardır. 656 00:38:42,930 --> 00:38:45,540 Ve pozitif y yönünde aşağı. 657 00:38:45,540 --> 00:38:47,510 Basıldığında ise ve yukarı, sonra sen 658 00:38:47,510 --> 00:38:53,860 Pozitif hıza ayarlamak için gidiyor, Hangi ekran aşağı gidiyor demektir. 659 00:38:53,860 --> 00:38:55,460 Sağ ve sol ile aynı şey. 660 00:38:55,460 --> 00:38:58,200 >> Ve sonra biz güncelleştirmek için gidiyoruz Sadece eskisi gibi pozisyonlar. 661 00:38:58,200 --> 00:39:00,740 Biz çarpışma yapacağız sınırları ile tespiti, 662 00:39:00,740 --> 00:39:04,290 ama biz sıfırlamak için gitmiyoruz hız, hız sadece çünkü 663 00:39:04,290 --> 00:39:06,780 klavye ile kontrol. 664 00:39:06,780 --> 00:39:11,230 Ama biz sıfırlamak için gidiyoruz Pozisyonlar penceresinde tutmak için. 665 00:39:11,230 --> 00:39:14,400 Ve biz ayarlamak için gidiyoruz yapı içinde pozisyonları 666 00:39:14,400 --> 00:39:17,400 ve daha sonra her şeyi daha önce gelen şeyler render. 667 00:39:17,400 --> 00:39:20,750 Yani o ne yaptığını görelim. 668 00:39:20,750 --> 00:39:25,460 Yani SRCS-- bakalım yapmak, Bu hello6_keyboard.c olduğunu. 669 00:39:25,460 --> 00:39:38,140 670 00:39:38,140 --> 00:39:38,820 >> Oh hayır. 671 00:39:38,820 --> 00:39:40,150 Yani biz burada bazı uyarılar var. 672 00:39:40,150 --> 00:39:43,840 Ve bu sadece biz değil mi söylüyor her türlü olası kontrol 673 00:39:43,840 --> 00:39:45,610 Olayın. 674 00:39:45,610 --> 00:39:49,470 Çünkü, Tamam Bunlardan 236 ya da öylesine var. 675 00:39:49,470 --> 00:39:51,760 Yani bu uyarıları görmezden gidiyorum. 676 00:39:51,760 --> 00:39:53,530 Hala ince derlenmiş. 677 00:39:53,530 --> 00:39:56,100 Yani oyunu oynamak için gidiyorum. 678 00:39:56,100 --> 00:39:57,590 Bu hareket etmiyor. 679 00:39:57,590 --> 00:40:04,150 Ama şimdi, benim klavyede püre zaman, Ben, burada bazı WASD hareket yapabilirsiniz 680 00:40:04,150 --> 00:40:06,870 Ben de benim ok tuşlarını kullanın. 681 00:40:06,870 --> 00:40:10,070 Ve ben bile fark Sağ hemen presleme, 682 00:40:10,070 --> 00:40:13,804 o pencereden dışarı gitmiyor Her karede sıfırlamak için. 683 00:40:13,804 --> 00:40:14,720 Yani oldukça düzgün değil. 684 00:40:14,720 --> 00:40:19,420 Sen ile Mario dolaşırım hayal edebilirsiniz Bazı ok tuşları veya böyle bir şey. 685 00:40:19,420 --> 00:40:22,880 Ve evet, X çalışır. 686 00:40:22,880 --> 00:40:26,900 >> Biz gidiyoruz Yani son dosya hellow7_mouse, bakmak için. 687 00:40:26,900 --> 00:40:29,600 Bu fare girişini alma hakkında olduğunu. 688 00:40:29,600 --> 00:40:34,790 Biz bu bir Yani matematik başlığı ithalat, 689 00:40:34,790 --> 00:40:38,100 biz gidiyoruz çünkü Burada matematik biraz. 690 00:40:38,100 --> 00:40:45,260 Aynı eski, aynı eski şeyler, hedef, daha önce olduğu görülmektedir, aynı eski. 691 00:40:45,260 --> 00:40:46,910 Peki, bu ilginç. 692 00:40:46,910 --> 00:40:51,730 Yani biz sadece kontrol için geri döndük SDL için olayı çıkın. 693 00:40:51,730 --> 00:40:52,460 Neden? 694 00:40:52,460 --> 00:40:55,110 Yani olaylardan fare giriş alabilirsiniz. 695 00:40:55,110 --> 00:40:57,670 Fare taşındı gibi, Bunun için bir olay olsun. 696 00:40:57,670 --> 00:41:00,520 Bir fare düğmesine basıldığında, Bunun için bir olay alabilirsiniz. 697 00:41:00,520 --> 00:41:05,760 >> Ama, biraz daha basit bir var Belki, fare girişini almak için API. 698 00:41:05,760 --> 00:41:09,500 Ve bu sadece SDL olsun fare devleti var. 699 00:41:09,500 --> 00:41:14,370 Yani x için bir int var ve imleç konumu için y. 700 00:41:14,370 --> 00:41:18,910 Ben, SDL_GetMouseState onu geçmek Hangi bunlar belirler. 701 00:41:18,910 --> 00:41:22,200 Ve bu pozisyon Pencerenin koordinat sistemi. 702 00:41:22,200 --> 00:41:25,520 Yani kitle sol üst ise Pencerenin, o 0, 0 olur. 703 00:41:25,520 --> 00:41:28,040 704 00:41:28,040 --> 00:41:33,380 >> Şimdi ne yapacağım ben gidiyorum olduğunu Vektör matematik biraz yapmak. 705 00:41:33,380 --> 00:41:36,910 Seni değil düşündüm bahis CS50 içinde olduğunu görmek, ama burada öyle. 706 00:41:36,910 --> 00:41:40,720 Bazı vektör yapacağım matematik vektör olsun 707 00:41:40,720 --> 00:41:43,840 imleç görüntüden. 708 00:41:43,840 --> 00:41:53,280 Ve böylece neden var Burada bu çıkarma? 709 00:41:53,280 --> 00:42:01,350 Eh, ben sadece dest kullanılırsa .-- yani Fare x çevirmek gerekiyor 710 00:42:01,350 --> 00:42:05,166 ve genişliğinin yarısı ile y ve Resim yüksekliği, 711 00:42:05,166 --> 00:42:08,040 Ben merkezini istiyorum çünkü Görüntü, fare doğru gidiyor 712 00:42:08,040 --> 00:42:10,160 Görüntünün değildir kökeni. 713 00:42:10,160 --> 00:42:15,650 >> Yani ben konuşuyorum emin olmak için sadece var Burada görüntünün merkezinde yaklaşık. 714 00:42:15,650 --> 00:42:19,510 Sonra delta x ve y olsun hangi hedeften fark 715 00:42:19,510 --> 00:42:23,430 görüntünün gerçek konumuna getirin. 716 00:42:23,430 --> 00:42:25,690 Ve sonra biz alabilirsiniz Burada mesafe hangi 717 00:42:25,690 --> 00:42:29,140 Pisagor olacak teoremi, x in karekökü 718 00:42:29,140 --> 00:42:32,720 kez x artı y kez y. 719 00:42:32,720 --> 00:42:38,400 >> Şimdi titreme önlemek için, ve ben gösterebilirim Eğer bunu yapmazsanız, bu ne, 720 00:42:38,400 --> 00:42:45,830 eğer imleç ve arasındaki mesafe Görüntü merkezi, beşten az olması 721 00:42:45,830 --> 00:42:48,730 Ben sadece görüntüyü taşımak için gitmiyorum. 722 00:42:48,730 --> 00:42:52,900 Aksi takdirde, biz hız ayarlayın. 723 00:42:52,900 --> 00:42:55,960 Ve biz, böylece ayarlayın hız daima sabit olacaktır. 724 00:42:55,960 --> 00:42:58,770 Ve tüm net sonucu bu matematik görüntü olmasıdır 725 00:42:58,770 --> 00:43:01,660 imleç doğru hareket edecek. 726 00:43:01,660 --> 00:43:08,470 >> Şimdi, o çıkıyor SDL_GetMouseState, 727 00:43:08,470 --> 00:43:14,490 ayarı ek olarak x ve y burada argümanlar, 728 00:43:14,490 --> 00:43:21,340 o da gelen bir int döndüren Fare düğmeleri durumuna. 729 00:43:21,340 --> 00:43:24,600 Yani biz o okuyamaz doğrudan, ama biz 730 00:43:24,600 --> 00:43:29,090 tek bu makroları kullanmak Bitwise operatörü, bu korkutucu değil, 731 00:43:29,090 --> 00:43:30,650 Sadece bir bitsel ve. 732 00:43:30,650 --> 00:43:38,320 Bu yüzden sonucu olan düğmeler söylüyor Bizim SDL_GetMouseState arasında, eğer 733 00:43:38,320 --> 00:43:43,990 bitsel ve bu makro ve Burada, SDL_BUTTON_LEFT. 734 00:43:43,990 --> 00:43:47,680 >> Yani bu sadece gidermek için gidiyor karşılık gelen bitmap 735 00:43:47,680 --> 00:43:51,090 sol fare düğmesine basılmasını. 736 00:43:51,090 --> 00:43:55,470 Ve böylece bitwise eğer ve oluşur ve var 737 00:43:55,470 --> 00:43:59,340 anlamına değil sıfır, sol düğmeye basıldı, 738 00:43:59,340 --> 00:44:04,320 Sonra biz aslında inkâr gidiyoruz X ve Y hızları, 739 00:44:04,320 --> 00:44:06,700 hangi sadece görüntü kaçak yapacaktır. 740 00:44:06,700 --> 00:44:07,980 Güncelleme pozisyonları. 741 00:44:07,980 --> 00:44:10,920 Çarpışmalar tespitleri, gördüm hepsi daha önce, render, tamam. 742 00:44:10,920 --> 00:44:11,510 Şunu yapalım. 743 00:44:11,510 --> 00:44:14,200 744 00:44:14,200 --> 00:44:16,050 Yani SRCs = hello7_mouse.c yapmak var. 745 00:44:16,050 --> 00:44:21,720 746 00:44:21,720 --> 00:44:22,220 Büyük. 747 00:44:22,220 --> 00:44:23,490 Hiçbir hata. 748 00:44:23,490 --> 00:44:24,900 Ve oyun. 749 00:44:24,900 --> 00:44:26,440 >> Yani burada benim fare var. 750 00:44:26,440 --> 00:44:29,000 Ve Görüntü gerçekten de benim fare peşinde. 751 00:44:29,000 --> 00:44:33,140 Şimdi bir oyun belki, yapmak Bu düşman kovalayan gibi 752 00:44:33,140 --> 00:44:35,240 küçük karakter ya da her neyse. 753 00:44:35,240 --> 00:44:37,440 Ama burada biz Görüntü fareyi kovalayan. 754 00:44:37,440 --> 00:44:41,000 Ve ben tıklayın, fare Görüntüyü kovalamaya başlar 755 00:44:41,000 --> 00:44:42,860 ve görüntü uzakta fare koşuyor. 756 00:44:42,860 --> 00:44:43,810 Yani oldukça serin. 757 00:44:43,810 --> 00:44:47,770 Ve haber yine var Burada hala çarpışma algılama. 758 00:44:47,770 --> 00:44:53,930 >> Böylece nihai biraz Demo burada kurdunuz. 759 00:44:53,930 --> 00:44:58,870 Ve en bir şey daha bir göz atalım. 760 00:44:58,870 --> 00:45:02,970 Yani buraya, ben bu jitter bahsettiniz. 761 00:45:02,970 --> 00:45:05,000 Pekala. 762 00:45:05,000 --> 00:45:12,890 Mesafe az beş piksel Yani eğer, Ben sıfır x ve y hızını batıyordu. 763 00:45:12,890 --> 00:45:15,960 Biz kurtulmak ne olur? 764 00:45:15,960 --> 00:45:19,070 Ben sadece bunu yapmak için gidiyorum. 765 00:45:19,070 --> 00:45:23,820 766 00:45:23,820 --> 00:45:30,150 Bu korkunç tarzı Lütfen özür, ama biz doğru kodunu yorumladı. 767 00:45:30,150 --> 00:45:38,080 Yani bu kaydetmek ve yapacağım Bunu yapmak için önce aynı komut. 768 00:45:38,080 --> 00:45:38,785 >> Pekala. 769 00:45:38,785 --> 00:45:39,660 Ve şimdi ne olacak? 770 00:45:39,660 --> 00:45:43,260 771 00:45:43,260 --> 00:45:43,760 İyi. 772 00:45:43,760 --> 00:45:45,801 Biz hala izliyoruz Sadece eskisi gibi fare, 773 00:45:45,801 --> 00:45:49,310 ama biz fare gidince, Bu brüt titremeleri var. 774 00:45:49,310 --> 00:45:50,320 Orada neler oluyor? 775 00:45:50,320 --> 00:45:52,600 Eh, bizim vektör içinde matematik, biz hatırlıyorum 776 00:45:52,600 --> 00:45:57,540 arasındaki mesafeyi alarak imleci ve görüntünün merkez? 777 00:45:57,540 --> 00:46:00,710 Eh, o yaklaştıkça 0, biz başlıyorsun 778 00:46:00,710 --> 00:46:06,280 çılgın davranış bu tür gibi nerede görüntü çeşit olduğunu 779 00:46:06,280 --> 00:46:08,910 imlecin çevresinde salınan gibi. 780 00:46:08,910 --> 00:46:12,000 Ve bu titremeleri yaratıyor. 781 00:46:12,000 --> 00:46:13,020 Ve bu gerçekten çirkin. 782 00:46:13,020 --> 00:46:15,103 Ve muhtemelen yok senin oyun bunu yaparken istiyorum 783 00:46:15,103 --> 00:46:17,350 Bunun sürece özel efekt çeşit. 784 00:46:17,350 --> 00:46:21,960 >> Elimizdeki İşte bu yüzden sadece bu keyfi 785 00:46:21,960 --> 00:46:27,150 nereye demek, beş piksel kesti beş piksel içinde ise, biz iyiyiz. 786 00:46:27,150 --> 00:46:29,560 Artık görüntüyü taşımak gerekmez. 787 00:46:29,560 --> 00:46:32,260 Yani orada neler oluyor bu. 788 00:46:32,260 --> 00:46:37,390 789 00:46:37,390 --> 00:46:40,870 >> Yani hemen hemen öyle. 790 00:46:40,870 --> 00:46:44,390 Şimdi nasıl oluşturulacağını bilmek Bir pencere, bir resim yüklemek, 791 00:46:44,390 --> 00:46:49,330 penceresine bir görüntü çizmek, olsun klavye girişi, fare girişi olsun, 792 00:46:49,330 --> 00:46:52,190 Diğer bir grup var girdi o Istemezdiniz 793 00:46:52,190 --> 00:46:56,070 Eğer sadece bir harcama varsa nasıl biliyor belgelerine bakarak birkaç dakika. 794 00:46:56,070 --> 00:46:59,670 Yani aslında var oldukça Şimdi emrinde birkaç araçları 795 00:46:59,670 --> 00:47:01,650 tam teşekküllü bir oyun yazmak için. 796 00:47:01,650 --> 00:47:05,030 >> Şimdi, her oyun bazı ses ihtiyacı ama ses dokümantasyon 797 00:47:05,030 --> 00:47:06,460 de oldukça iyidir. 798 00:47:06,460 --> 00:47:09,200 Ve ben eğer bahse hazırım Eğer şeylerin hepsini anlıyorum 799 00:47:09,200 --> 00:47:14,560 biz bugün hakkında konuştuk görüntüleri ve yüzeyler, 800 00:47:14,560 --> 00:47:18,370 Sonra pencere ve her şey, bulmaktan ses API değil 801 00:47:18,370 --> 00:47:21,170 gidiş o kötü olması. 802 00:47:21,170 --> 00:47:27,420 Yani görmek için sabırsızlanıyoruz Eğer SDL ne oluşturun. 803 00:47:27,420 --> 00:47:31,595