THOMAS MERIAH: Baiklah. Hi semua. Saya Thomas Lively. Seminar ini akan menjadi menulis permainan 2D dalam C menggunakan SDL. Jadi saya tahu anda semua bertanya, ya, saya benar-benar ingin bermain permainan dan membuat permainan, tetapi apa yang perniagaan SDL ini? Jadi SDL sebuah perpustakaan C. Ia bermaksud Mudah Lapisan DirectMedia. Dan ia adalah satu platform silang, perpustakaan pembangunan permainan. Ia berfungsi pada Windows, Mac, Linux, walaupun IOS dan Android. Ia mengendalikan perkara-perkara seperti akses kepada sistem audio untuk komputer, papan kekunci, dan tetikus, kayu ria, jika mereka dilampirkan. Di telefon bimbit, ia juga boleh melakukan menyentuh input dan semua itu. Dan sudah tentu, ia mengendalikan grafik, melukis sesuatu dengan skrin. Oleh itu, ia digunakan secara meluas, walaupun anda mungkin tidak pernah mendengar sebelum ini. Ia dibina ke dalam, sebagai contoh, Enjin sumber Valve, yang kuasa permainan seperti Portal Team Fortress 2. Ia juga dalam jumlah yang sangat besar permainan indie yang keluar, jadi saya teruja untuk melihat apa yang anda semua akan membuat dengannya. Matlamat seminar adalah untuk mendapatkan anda ditetapkan menjadi membangun dengan SDL. Kita akan belajar bagaimana untuk mewujudkan tetingkap permainan. Kami akan mewujudkan sprites, yang adalah imej-imej dalam permainan anda yang boleh bergerak. Kita akan belajar bagaimana untuk dan bernyawa sprites, jadi bergerak mereka di sekitar, membuat mereka berubah mengikut masa. Dan kita akan belajar bagaimana untuk menangkap papan kekunci dan tetikus input daripada komputer. Apa yang kita tidak akan bercakap tentang hari ini adalah grafik 3D, kerana itulah yang sangat rumit subjek yang kita tidak mempunyai masa untuk. Kami tidak akan belajar bagaimana untuk memainkan audio pada permainan kami. Dan kita tidak akan membina bagi apa-apa tetapi Linux. Kini terdapat kaveat itu, mudah-mudahan, pada akhir seminar tersebut, anda akan selesa dengan dokumentasi SDL, jadi anda akan dapat untuk pergi mencari tahu bagaimana untuk memainkan audio untuk diri sendiri. Juga membina untuk Mac atau PC harus bekerja sama seperti bangunan untuk Linux, tetapi persediaan akan menjadi sedikit berbeza. Jadi, anda akan dapat memikirkan bagaimana untuk melakukan perkara-perkara pada akhir seminar itu. Jadi untuk sehingga ditetapkan, kita akan menggunakan mesin maya. Kami akan menggunakan IDE CS50, kerana kita hanya akan menulis dalam C. Tetapi oleh kerana IDE bukan pelayar, kita tidak boleh membuat tetingkap baru atau paparan grafik di dalamnya. Oleh itu, kita memerlukan mesin maya. Jadi, anda boleh ikut arahan di sini di manual.CS50.net/appliance/15 memasang perkakas CS50 rasmi, yang hanya Linux maya mesin. Dan kemudian sekali anda mempunyai bahawa semua set up-- ia mungkin mengambil sedikit masa, kerana yang download-- sangat besar anda akan berjalan di VM sudo apt-get update. Dan yang benar-benar berlaku untuk mengemaskini semua perisian pakej pada mesin maya anda. Selepas itu, anda akan berjalan sudo apt-get install, libsdl2-2.0-0, libsdl2-dbg, libsdl2-dev, dan tambahan libsdl2-image-2,0-0, libsdl2-image-dbg, dan libsdl2-image-dev. Jadi, apa yang anda lakukan? Yang semata-mata memasang debug maklumat, dokumentasi, tajuk, dan binari untuk dua perpustakaan. Biasa lama, SDL 2.0, dan perpustakaan lain dipanggil SDL Imej, yang kita akan menggunakan untuk memuatkan fail imej ke dalam permainan kami. Jadi apabila anda mempunyai yang juga itu, hanya apabila ia bertanya, anda hanya perlu menaip ya, tekan Enter untuk memasang mereka pakej, dan kemudian anda perlu baik untuk pergi. Jadi untuk mendapatkan kod pengedaran, anda can-- oh sayang, ini tidak dikemaskini. Melainkan anda mempunyai account-- GitHub jika anda mempunyai akaun GitHub, yang boleh anda lakukan Git ini arahan klon untuk repo dan akan memuat turun Git repo dengan semua kod di dalamnya, supaya anda akan mempunyai kod. Jika anda tidak mempunyai GitHub akaun, apa yang perlu anda lakukan adalah jenis wgithttps: //github.com/tlively/sdl seminar-- dan di sini ia different-- /archive/master.zip. Jadi sekali lagi, itu yang sama URL, kecuali ia akan menjadi tlively / SDL_seminar / master.zip dan anda menggunakan wgit untuk memuat turun itu. Dan kemudian anda boleh semata-mata unzip arkib yang dan kemudian anda akan mempunyai semua kod sumber. Jadi maaf tentang itu. Dan kemudian kod itu juga akan diadakan di laman web seminar CS50 dalam pasangan hari. Baiklah. Jadi bagaimana kita bermula menulis permainan kami sendiri? Nah, perkara pertama kita akan mahu lakukan adalah melihat dokumentasi SDL. Jadi di sini adalah VM. Dan di sini adalah laman web. Saya telah dilayari untuk hidup libsdl.org. Apa yang saya akan lakukan ialah pergi ke to sidebar, di bawah dokumentasi, dan klik pada wiki. Ini akan membawa saya ke wiki yang mempunyai kebanyakan dokumentasi untuk SDL. Lebih pada bar sisi di sini, kami akan klik API mengikut kategori, kerana akan memberikan kita pandangan yang mutlak bagus keseluruhan API untuk SDL. Jadi, sebagai contoh, kami mempunyai yang pengawalan asas dan ditutup, semua jenis barangan pentadbiran untuk menggunakan SDL, dan kemudian kita mempunyai bahagian untuk memaparkan sesuatu dengan skrin. Itulah video. Peristiwa input, itu mendapat input daripada papan kekunci, mendapatkan input daripada tetikus, dan kayu bedik, jika anda mempunyai ia juga. Ada maklum balas tenaga untuk perkara-perkara seperti pengawal permainan, yang kita tidak akan bercakap tentang. Dan di sini adalah audio. Dan kemudian ada sekumpulan lain barangan yang SDL boleh lakukan untuk anda. Tetapi hari ini kita akan memberi tumpuan pada pengawalan di sini, memaparkan imej dalam video seksyen, dan pengendalian acara input. Jadi ini adalah utama bahagian dokumentasi yang anda perlu bimbang tentang. Hanya untuk keseronokan, jika kita pergi ke di sini dan klik pada API dengan nama, kita dapat melihat senarai tiap-tiap perkara yang tunggal di perpustakaan SDL. Jadi semua fungsi ini, enumerations, struktur, jumlah yang gila barangan, turutan abjad. Dan jelas, sehingga anda tahu yang anda lakukan, ini tidak akan menjadi terlalu membantu, itulah sebabnya kami melakukan API mengikut kategori. Jadi mari kita mulakan. Mudah-mudahan anda telah pun turun kod pengagihan. Dan supaya apa yang boleh anda lakukan adalah, hak di sini di dalam perkakas CS50, hanya buka terminal. Di sini kita pergi. Jadi saya telah memuat turun yang kod pengedaran menggunakan .zip kaedah. Dan saya unzipped ia. Jadi di sini adalah dalam seminar tuan SDL. Jadi, saya akan pergi ke dalam direktori. Dan apa yang kita lihat di sini adalah yang kita ada tujuh fail C. Dan ini akan kod di kita akan melihat pada hari ini. Kami mempunyai Makefile a. Dan kita mempunyai direktori sumber, yang hanya mempunyai imej bahawa anda akan melihat tidak lama lagi. Jadi mari kita membuka fail-fail menggunakan G-Edit editor. Jadi saya ingin membuka semua fail yang bermula dengan khabar dan berakhir dengan .c. Di sini kita pergi. Jadi itulah tetingkap yang kecil, jadi kami akan cuba untuk membuat yang lebih besar. Tidak, ia pergi. Baiklah. Jadi di sini adalah yang pertama fail kita akan melihat. Ia dipanggil hello1_sdl.c. Dan semua ini dilakukan adalah memulakan yang SDL perpustakaan supaya kita boleh mula menggunakannya. Bagaimana anda tahu yang akan datang dengan kod ini diri sendiri? Nah, jika kita melihat ke atas dokumentasi dan kami pergi ke dalam pengawalan dan menutup bahagian, ia akan memberitahukan kepada kita semua tentang bagaimana untuk memulakan SDL. Jadi pasti baca suatu masa yang lain. Ia akan memberitahu anda semua tentang apa yang berlaku di sini. Tetapi pokok utama perkara ini ialah bahawa kita perlu memanggil fungsi SDL ini In It dan lulus apa jenis perkara kita mahu perpustakaan untuk memulakan. Jadi, dalam kes kami, kami hanya akan untuk memulakan video buat masa ini, supaya kita boleh mula memaparkan imej. Di sini, anda boleh melihat jika kita klik pada SDL di dalamnya, kita boleh mendapatkan lebih banyak maklumat, termasuk nilai balasan. Oleh itu, kita lihat di sini bahawa ia returnes sifar pada kejayaan. Jadi dalam kod kami, kita akan melihat jika ia tidak akan kembali sifar, dan jika ia tidak akan kembali sifar, jadi ia tidak berjaya, maka kita akan hanya cetak kesilapan menggunakan fungsi lain ini, SDL get ralat, yang mengembalikan rentetan menerangkan kesilapan yang berlaku. Kami akan mencetak kesilapan dan kemudian kita Hanya akan keluar dari program ini dengan kod ralat. Kemudian satu lagi perkara yang kita perlu lakukan adalah, sebelum keluar program, jika kita berjaya dimulakan SDL, kita hanya perlu untuk memanggilnya SDL berhenti. Dan yang akan mengendalikan membersihkan semua sumber dalaman SDL kepentingan kita. Jadi dokumentasi there-- lagi, di sini kita berada di dalam pengawalan dan menutup bahagian daripada dokumentasi. Anda hanya boleh klik pada fungsi sini, SDL berhenti, dan anda boleh membaca semua tentang itu juga. Dan banyak fungsi ini laman dokumentasi mempunyai kod contoh, jadi ini adalah sumber yang sangat baik. Sudah pasti meluangkan masa membaca bahagian wiki ini jika anda akan melakukan ini untuk projek. Baiklah. Jadi itulah keseluruhan program kami. Apa yang kita boleh lakukan sekarang is-- Saya akan membuka Makefile di sini, jadi saya akan mengambil melihat bagaimana yang bekerja. Dan ia adalah satu Makefile sangat mudah, sama dengan apa yang anda lihat sebelum ini. Salah satu perbezaan utama adalah bahawa, di sini, ini akan memasukkan hasil daripada berjalan arahan ini, yang anda telah pun dipasang jika anda memasang SDL. Dan ini adalah arahan yang akan menjana beberapa bendera tambahan untuk pengkompil. Di samping itu, kita memberikan semua arahan biasa, dan juga kedua-dua arahan. Jadi pemegang -lsdl2-imej menghubungkan di perpustakaan imej SDL. Dan -lm sebenarnya mengendalikan menghubungkan dalam C perpustakaan matematik standard. Oleh itu, kita tidak akan memerlukan mereka untuk semua fail C kami, tetapi kita hanya meletakkan mereka dalam supaya kita dapat menggunakan Makefile yang sama untuk segala-galanya tanpa pengubahsuaian. Di sini dalam sumber-sumber, ini adalah di mana anda akan meletakkan fail yang anda telah akan untuk menyusun untuk projek anda. Tetapi oleh kerana setiap seorang daripada C saya fail di sini mempunyai fungsi utama, ia akan menjadi bingung jika kita meletakkan mereka semua dalam. Jadi saya akan katakan, buat masa ini, hello1_sdl.c, yang merupakan salah satu yang kita hanya melihat. Jadi, jika saya kembali ke atas di sini, saya boleh melakukan dilupakan. Dan apa yang ia lakukan adakah ia hanya menyusun fail pertama. Dan kemudian kita boleh menaip ./game, kerana ia laksana ia dihasilkan. Dan semua yang berlaku adalah cetak pengawalan berjaya. Oleh itu, kita melakukan sesuatu yang betul. Tetapi itu adalah jenis membosankan, kerana kita tidak melihat tingkap, tiada apa yang bergerak di sekitar. Begitu besar, kami mendapat SDL dimulakan. Sekarang, mari kita beralih kepada sesuatu yang sedikit lebih menarik. Jadi di sini kita mempunyai hello2_window.c, dan ini akan menjadi lebih sedikit program C kompleks yang initializes SDL sama seperti sebelum ini, kecuali sekarang kita juga akan untuk memulakan pemasa SDL. Dan ini akan membolehkan kami mengakses pemasa dalaman dan penggunaan fungsi berkaitan ke semasa. Kemudian mari kita lihat di sini. Apa yang kita lakukan ialah kita mempunyai penunjuk ini kepada struct tetingkap SDL, yang akan diwujudkan dengan panggilan ini untuk majlis itu, SDL mewujudkan tingkap. Sekarang, ini mengambil banyak hujah, jadi mari kita pergi melihat dokumentasi. Jadi sekali lagi, saya akan API mengikut kategori, Saya akan turun ke video di sini, dan yang pertama seksyen, memaparkan pengurusan tingkap. Jadi seksyen ini mempunyai satu tan barangan di dalamnya, tetapi jika anda melihat melalui fungsi-fungsi ini, anda akan melihat bahawa mungkin salah kita yang mahu dipanggil SDL mewujudkan tingkap, yang berlaku sebagai jalan yang betul di bahagian atas. Dan sebagainya ini adalah dokumentasi untuk fungsi ini. Tetingkap akan mempunyai tajuk, x dan y kedudukan pada skrin, ia akan mempunyai lebar, ketinggian, dan kemudian ia akan mengambil bendera. Sekarang, kita tidak benar-benar mengambil berat tentang mana-mana bendera ini sekarang, tetapi jika anda mahu melakukan sesuatu seperti membuat tetingkap skrin penuh, anda boleh mengambil lihat itu. Buat masa ini, kami hanya akan menggunakan nilai-nilai khas, Tetingkap SDL ditambah berpusat untuk x dan y bagi untuk hanya membuat tingkap di tengah-tengah skrin kami. Jadi itulah apa yang lakukan. Dan jika tingkap berlaku untuk menjadi null, bermakna ada kesilapan, sekali lagi kita hanya akan mencetak kesilapan menggunakan SDL get kesilapan. Dan kemudian kerana kita dimulakan SDL, kita kini perlu menutupnya. Jadi, kita harap SDL berhenti sebelum kembali satu untuk utama. Jadi kita mempunyai tetingkap ini membuka mudah-mudahan. Dan apa yang kita akan lakukan ialah kita akan untuk memanggil SDL harga 5,000 milisaat, yang adalah sama dengan lima saat. Dan apabila kita selesai dengan itu, ia akan memusnahkan tingkap, membersihkan perpustakaan SDL itu, dan keluar dari program ini. Jadi mari kita pergi ke depan dan memberikan yang pukulan. Jadi sekarang bukannya berubah Makefile setiap kali, Saya hanya boleh melakukan membuat, dan kemudian pada baris arahan, kata sumber sekutu-sekutu dan kemudian fail yang kita menyusun. Jadi ia hello2_window.c. Fantastic. Tiada erros. Sekarang, jika kita menjalankan laku kita, kita lihat tetingkap ini. Sekarang terdapat beberapa masalah dengan tingkap. Kita boleh bergerak di sekitar, tetapi ia mempunyai ringan latar belakang ini di dalamnya. Oleh itu, kita tidak disediakan apa-apa, dan sebagainya itu hanya penuh dengan sampah, yang adalah cukup banyak apa yang kita harapkan. Tambahan pula, kita tidak boleh menutup tetingkap. Saya menekan X ini dalam sudut dan apa-apa yang berlaku. Oleh itu, kita akan melihat bagaimana untuk menetapkan bahawa dalam sedikit. Jadi mari kita menetapkan bahagian di mana tetingkap penuh dengan sampah pertama. Jadi, jika kita pergi ke hello3_image.c, apa kita dapat lihat adalah bahawa kami telah menambah beberapa lebih banyak perkara di sini. Kami telah menambah header baru ini memfailkan untuk mendapatkan fungsi pemasa. Saya rasa kita lakukan bahawa dalam tempoh satu, juga, dan saya tidak menyatakannya. Tetapi sekarang kerana kami bekerja dengan imej, kita perlu termasuk SDL imej fail header juga. Jadi ia adalah perkara yang sama seperti sebelum ini, Memulakan SDL sini, tawaran sama dengan mewujudkan tingkap. Kita telah melihat bahawa sebelum ini. Sekarang kita perlu membuat sesuatu yang dinamakan pemapar, yang jenis pergi bersama-sama dengan tingkap. Tetapi ia adalah satu bentuk objek abstrak itu yang bertanggungjawab bagi melakukan semua ini lukisan operasi ke tingkap. Dan ia benar-benar sepadan kepada program dimuatkan ke dalam perkakasan grafik dalam anda komputer atau telefon anda atau apa sahaja. Jadi bendera kita mahu lulus kitab itu dan anda boleh melihat dokumentasi untuk mendapatkan butiran lanjut sini-- akan akan SDL bersungguh dipercepatkan, yang bermakna ia akan menjadi menggunakan perkakasan grafik dan bukan hanya dicontohi dalam perisian. Dan kita akan menggunakan SDL pemapar PRESENTVSYNC. VSync adalah satu perkara yang hanya membuat grafik anda kelihatan lebih baik dan mencegah skrin perkara dipanggil ini keganasan, di mana separuh satu rangka dan separuh daripada seterusnya rangka mendapatkan disediakan pada masa yang sama dan ia kelihatan besar. Tetapi sekali lagi, anda boleh pergi membaca tentang itu sendiri. Oleh itu, kita mempunyai beberapa bendera di sini. Dan dengan itu kita hanya akan memanggil fungsi SDL ini mewujudkan pemapar. Kami akan memberikan tingkap kaitkan dengan pemapar itu. Satu negatif bermakna kita tidak peduli apa pemacu grafik kita akan gunakan. Supaya sekiranya cukup banyak sentiasa menjadi salah satu negatif, melainkan jika anda tahu tentang pemandu grafik. Dan kemudian kami hanya akan untuk lulus bendera kami. Jadi, jika yang mengembalikan batal, maka kami akan mencetak kesilapan seperti biasa, tetapi kemudian kita juga akan untuk memusnahkan tingkap untuk membersihkan sumber-sumber sebelum memanggil SDL berhenti dan kembali. Kini, bahagian yang menarik di sini adalah di mana kita memuatkan imej kami menggunakan fungsi IMG_load ini. Inilah satu-satunya fungsi kita akan gunakan dari perpustakaan imej SDL. Ia adalah satu-satunya yang kita perlukan. Ia adalah satu fungsi yang mengambil tali iaitu jalan mana-mana sumber imej. Dan ia boleh Png, GIF yang, bitmap, mana-mana perkara-perkara ini. Dan itulah sebabnya fungsi ini adalah begitu baik. Ia boleh mengendalikan cukup banyak mana-mana format. Memuatkannya ke dalam ingatan dan kedai-kedai sebagai perkara yang dipanggil permukaan SDL. Sekarang permukaan SDL hanya struct yang mewakili data imej dalam ingatan. Jadi, anda boleh membaca lebih lanjut mengenai yang dalam dokumentasi dua. Dan jika kesilapan ini, maka kami akan melakukan segala-galanya di mana kita cetak ralat, tutup kami sumber, dan kemudian berhenti program ini. Sekarang perkara yang menarik ialah, sebelum kita boleh membuat imej ini ke tingkap, kita perlu benar-benar membuat ia tekstur. Kini merupakan sepadan tekstur kepada data imej dimuatkan ke dalam ingatan perkakasan grafik itu ini. Jadi permukaan yang berada di utama memori, memori tetap yang kita telah menggunakan semua semester, dan tekstur adalah dalam VRAM berasingan ini ingatan bahawa kawalan kad grafik. Oleh itu, kita memanggil fungsi ini SDL_CreateTextureFromSurface. Kami memberikan pemapar kami dan permukaan kami. Dan kemudian kita sebenarnya dilakukan dengan permukaan, jadi kami hanya akan membebaskan. Kami tidak memerlukannya lagi. Dan kemudian jadi jika panggilan ini errored dan kembali null, maka kita akan lakukan keseluruhannya ralat melaporkan perkara lagi. Baiklah. Di sini, kami masuk ke dalam beberapa fungsi persembahan yang sebenar. Oleh itu menamakan SDL_RenderClear dan lulus pemapar yang berkaitan dengan tingkap kami hanya membuat tingkap pergi hitam. Jadi ia membuang yang remeh yang kita lihat dalam tetingkap kami sebelum dan menjadikannya hitam. Dan kemudian kita akan untuk memanggil SDL_RenderCopy, memberikan pemapar kami, tekstur kami. Dan kita akan bercakap tentang apa yang bidang ini adalah dalam sedikit. Tetapi yang akan mengambil data tekstur dan menyalinnya ke kami tetingkap untuk menarik imej. Jadi selepas kita telah melakukan salinan ini data ke tetingkap kami, kita perlu melakukan fungsi tambahan ini dipanggil SDL_RenderPresent. Dan ini adalah menarik kerana ini mendapat ke dalam topik yang dikenali sebagai buffering berganda. Jadi buffering dua adalah teknik yang membuat grafik anda kelihatan lebih baik. Sekali lagi, ia menghalang yang terkoyak skrin Saya bercakap tentang awal, di mana anda mempunyai dua penampan. Ada penampan semula ingatan dan penampan depan. Penampan depan literal apa yang pada skrin anda pada masa ini. Oleh itu, kita melakukan semua ini menarik variasi, seperti SDL menyebabkan salinan atau SDL_RenderClear buffer belakang. Jadi mereka mengubah perkara dalam buffer belakang. Di sini kita mungkin lukisan ini persegi hijau untuk penampan belakang. Sebab itu apabila kita selesai melakukan menyebabkan operasi kami, yang mungkin mengambil masa benar-benar panjang masa, apa yang kita akan lakukan adalah menukar penampan. Oleh itu, ia benar-benar hanya mengambil penampan depan dan penampan belakang dan menukar mereka, sehingga itu, serta-merta, dalam satu operasi, bukan mungkin beratus-ratus atau beribu-ribu, semua kami yang baru diberikan objek pada skrin. Dan ini menghalang perkara seperti menyegarkan skrin dua apabila kami hanya disediakan objek kami untuk bingkai. Jadi itulah sebabnya kita perlu memanggil SDL_RenderPresent, dan juga sebagai SDL_RenderCopy. Sekali lagi, kami hanya akan menunggu lima saat. Kemudian kita akan membersihkan sumber kami. Kita mempunyai beberapa lagi kali ini. Dan kemudian kami hanya akan untuk keluar dari program ini. Jadi mari kita buat itu. Saya akan menaip membuat, dan kemudian sumber sama hello-- ini kini 3image.c. Baiklah, itu disusun tiada kesilapan. Dan anda boleh lihat di sini saya telah sekarang ditarik keluar imej saya, Hello, CS50! ke tingkap kami, yang hilang selepas lima saat. Sekarang, ini masih mempunyai masalah, bukan? Ini bukan permohonan yang baik, kerana apabila saya cuba untuk menutup tetingkap, tiada apa yang berlaku. Yang x masih tidak responsif. Jadi mari kita lihat pada Gambar sebelumnya, hello4animation. Jadi ini adalah fail yang akan memperkenalkan bergerak dan pergerakan kepada imej kami. Jadi, kita akan melakukan perkara yang Perkara yang sama seperti sebelum ini, memulakan SDL, mewujudkan tingkap, mencipta pemapar, memuatkan imej ke dalam ingatan, mencipta tekstur. Kami telah melihat semua itu sebelum ini. Sekarang, ini adalah baru. Kita akan mempunyai struktur yang dikenali sebagai yang rect SDL, yang hanya segi empat tepat. Jika kita pergi ke sini, kita boleh melakukan carian untuk SDL rect, dan anda boleh lihat ia adalah satu struktur yang sangat mudah. Ia mempunyai x, y untuk kedudukan, dan ia mempunyai lebar dan ketinggian untuk saiz segi empat tepat. Jadi apa yang kita akan lakukan ialah kita berada akan menentukan ini SDL rect dest, destinasi. Dan ini adalah tempat di pada skrin di mana kita akan dapat melukis imej kita, bukan Jadi jika kita akan menjadi bergerak imej sekitar, maka tujuan di mana kita akan membawa imej perlu bergerak di sekitar. Oleh itu, kita akan memanggil ini fungsi SDL_QueryTexture. Dan perhatikan saya lulus alamat daripada dest.w, yang lebar, dan dest.h, yang merupakan ketinggian. Dan sebagainya SDL_QueryTexture akan untuk menyimpan dalam bidang-bidang lebar dan ketinggian tekstur kami. Dan kemudian apa yang saya akan lakukan adalah saya akan untuk menetapkan dest.x sebagai tetingkap dest.w tolak lebar, yang lebar bidadari, dibahagikan dengan 2. Dan ini akan membinanya supaya bahawa imej adalah betul-betul tertumpu dalam tetingkap kami, ok? Jadi sekarang saya mempunyai kedudukan y. Dan ini akan sebagai pemboleh ubah itu berubah-ubah, kerana kita akan menjadi bergerak imej dalam arah y. Dan sekarang kita mempunyai sesuatu dipanggil gelung animasi. Jadi bagaimana animasi berfungsi? Nah, mata manusia boleh mengesan 12 berbeza Imej di dalam setiap saat, boleh? Jadi, jika anda berkelip 12 kad imej saya dalam satu saat, saya melihat setiap orang-orang imej sebagai imej individu yang berbeza sendiri. Sekarang, jika anda berkelip lebih imej pada saya dalam kedua, kemudian mata saya akan bermula untuk mengaburkan mereka bersama-sama dan saya akan melihat ia sebagai gerakan, dan bukan satu imej yang berbeza. Jadi, sebagai contoh, filem dan televisyen, mereka flash imej pada anda 24 kali yang kedua. Jadi, itu 24 bingkai sesaat. Skrin komputer, di sisi lain, sering pada 60 bingkai sesaat. Itulah kelajuan refresh mereka. Itulah berapa kerap mereka menyegarkan gambar di skrin. Jadi sasaran kita akan menjadi 60 bingkai sesaat untuk permainan kami. Jadi mari kita lihat bahawa dalam kod. Jadi untuk setiap frame, kami pertama akan membersihkan tingkap. Ini adalah corak umum. Anda sentiasa membersihkan tetingkap setiap bingkai, dan kemudian melakukan semua lukisan anda operasi, dan kemudian pada akhirnya, jangan RenderPresent untuk menunjukkan segala-galanya dalam bingkai. Dan kemudian anda akan mempunyai tunggu di hujung menunggu sehingga seterusnya rangka harus bermula. Jadi, jika saya telah melakukan banyak pengiraan kompleks sini yang mengambil masa lebih daripada 16 milisaat, ia akan menjadi mustahil untuk saya untuk mendapatkan bahawa kadar bingkai 60 yang Saya mahu, kerana setiap bingkai adalah mengambil masa yang lama untuk membuat pengiraan. Tambahan pula, kita benar-benar melakukan semacam jumlah yang sedikit kerja di sini, kerana ada hanya satu perkara yang kita melukis. Jadi saya hanya menunggu 1/60 daripada kedua, yang panjang bingkai di antara bingkai. Jadi, saya semacam berpura-pura melakukan semua kerja saya mengambil masa sifar. Tetapi dalam permainan sebenar, anda akan perlu tolak jumlah masa yang diambil untuk melakukan semua ini kerja dari masa rehat anda. Jadi anyway, apa yang saya sebenarnya melakukan dalam gelung ini? Saya membersihkan tingkap. Saya menetapkan dest.y, yang int untuk kedudukan y sebenar saya dibuang ke dalam int. Sekarang, saya mahu terapung resolusi untuk kedudukan y saya dalam permainan saya, tetapi untuk benar-benar menarik ia ke skrin, ia perlu ints, kerana ia adalah dalam unit piksel, jadi itulah yang pelakon adalah untuk. Saya akan membawa imej. Jadi ini adalah segi empat tepat sumber itu. Dan ini adalah segi empat tepat destinasi. Jadi saya berlalu null untuk segi empat tepat sumber untuk mengatakan saya ingin menarik keseluruhan tekstur saya. Tetapi jika anda mempunyai banyak tekstur dalam permainan anda dan mereka semua dalam satu peta tekstur besar yang dimuatkan ke dalam SDL sebagai hanya satu tekstur, anda boleh menggunakan segi empat sumber untuk memilih salah satu daripada tekstur yang lebih kecil, salah satu daripada sprites lebih kecil, daripada yang besar peta tekstur. Jadi sekali lagi, saya lulus menyebabkan saya, saya tekstur, dan kini destinasi. Ini akan menjadi di mana dalam tetingkap ia akan diambil. Dan kemudian, kerana saya animasi sesuatu, saya perlu pergerakan, Saya akan mengemas kini kedudukan bidadari pada setiap bingkai. Jadi saya mempunyai ini dipanggil tatal berterusan mempercepatkan dalam unit piksel sesaat. Sekarang, setiap kali kita melakukan gerakan, bingkai hanya 1/60 saat. Jadi, saya akan membahagikan dengan 60. Kemudian, mari kita lihat, Saya menolak bahawa dari y kedudukan. Kenapa saya menolak? Kami akan mendapat itu dalam satu saat. Sebab itu saya membersihkan sumber saya dan program berakhir. Jadi mari kita membuat itu. Jadi mari kita pergi ke make SRCS = hello4 animation.c, ok? Permainan. Itupun dia. Jadi saya mempunyai ia menatal ke atas yang tingkap, yang cukup kemas. Tetapi berpegang, saya menolak dari y kedudukan setiap masa. Apa yang berlaku di sana? Nah, ternyata bahawa dalam SDL, dan sebenarnya, dalam kebanyakan grafik komputer, asal-usul sistem koordinat adalah bahagian atas kiri tetingkap. Jadi arah x positif pergi seluruh tingkap anda ke kanan. Dan arah y positif sebenarnya terbenam. Jadi sekali lagi, dalam asal-usul ini bahagian atas sebelah kiri tetingkap anda, arah positif y turun, dan x positif ke kanan. Oleh itu, apabila saya menguranginya kedudukan y, itu akan membuat ia pergi negatif y arah, yang sehingga tingkap. Jadi itulah apa yang berlaku di sana. Sejuk. Mari kita lihat fail seterusnya. Berikut adalah sebahagian daripada menunjukkan di mana kami akhirnya mendapatkan X yang di sudut tingkap yang sepatutnya untuk menutup tetingkap bekerja. Jadi apa yang berlaku? Kita memulakan SDL, membuat tingkap, mewujudkan pemapar, memuatkan imej, mewujudkan tekstur seperti yang kita lihat sebelum ini. Kami mempunyai destinasi segi empat tepat yang sama seperti sebelum ini, panggilan yang sama untuk query tekstur. Tetapi kali ini, kami kemudian akan membahagikan lebar dan ketinggian destinasi kita dengan 4. Ini mempunyai kesan scaling imej kami ke bawah apabila kami memaparkan dalam tetingkap oleh empat. Supaya agak kemas. Kami hanya boleh skala sahaja. Kami akan mula bidadari di tengah-tengah skrin. Dan sekarang kita mempunyai x dan y halaju dan mereka berdua akan bermula pada sifar. Ini adalah fail yang salah. Maafkan Saya. Jadi itu sahaja yang benar. Itu sahaja yang masih dalam fail ini. Kami mempunyai jurang dengan 4 dan segala-galanya. Jadi di sini kita mempunyai x dan y kedudukan kami untuk pusat tetingkap. Dan kami memberikan halaju awal kelajuan ini berterusan, yang Saya percaya adalah 300 piksel per saat. Sekarang, kita mempunyai int ini boleh sama dengan baik menjadi boolean yang dipanggil berhampiran diminta. Dan bukannya melakukan satu gelung tak terhingga di atas pemasa di sini, kita akan dapat menghidupkan sebagai Selama hampir tidak diminta. Jadi bagaimana kita memproses peristiwa? Nah, SDL beratur sehingga acara dalam barisan literal di belakang tabir. Dan kemudian setiap frame, kita boleh dequeue acara dari barisan yang menggunakan ini SDL_PullEvent panggilan. Dan sekali lagi, pasti pergi membaca tentang perkara ini dalam dokumentasi. Terdapat banyak lebih terperinci dan banyak lebih banyak fungsi yang anda boleh gunakan dengan ini. Kami lulus alamat perkara ini, SDL_Event kita ada di dalam timbunan. Sekarang, apa yang SDL_event yang? Kerana SDL, jika kita melihat di yang documentation-- mari lihat, API mengikut kategori, input acara, pengendalian acara, kita boleh melihat jumlah peristiwa-peristiwa yang berbeza di sini dan kita dapat melihat ada satu tan keseluruhan mereka. Jadi apakah perkara SDL_Event ini? SDL_Event adalah kesatuan sekerja. Wow, apa kesatuan? Anda telah mungkin tidak pernah mendengar bahawa sebelum ini. Dan itu OK. Kesatuan adalah jenis seperti struct, kecuali struct mempunyai ruang untuk semua bidang dan ingatan, manakala kesatuan hanya mempunyai ruang yang cukup untuk dimuatkan terbesar salah satu bidang, yang bermakna ia hanya boleh menyimpan satu bidang yang pada satu masa, yang jenis masuk akal untuk acara-acara, bukan? Kita boleh mempunyai papan kekunci peristiwa atau acara tingkap, tetapi peristiwa tunggal tidak boleh menjadi kedua-dua acara keyboard dan acara tingkap, jadi ia akan menjadi bodoh untuk mempunyai ruang untuk kedua-dua mereka dalam kesatuan acara kami. Jadi, jika anda mahu mewujudkan kesatuan anda sendiri, ia kelihatan betul-betul sama mewujudkan struct, kecuali yang kita gunakan kata kunci kesatuan bukannya kata kunci struct. Dan ingat, untuk semua perkara di dalam kesatuan anda, pembolehubah yang sebenar iaitu kesatuan boleh mempunyai salah satu daripada nilai-nilai pada satu masa. Jadi bagaimana kita boleh memberitahu apa jenis acara kita hanya muncul kira barisan ini? Nah, kita boleh menguji event.type. Dan jika itu adalah sama untuk SDL_Quit, kita tahu itu sekiranya telah dijana apabila kita memukul X yang di sudut tingkap. Dan kita boleh set berhampiran diminta sama dengan 1. Selebihnya adalah hanya beberapa animasi yang anda telah lihat sebelum ini. Oleh itu, marilah kita pergi ke hadapan dan membuat ini dan melihat bagaimana ia berfungsi. Jadi, saya akan menaip membuat dan kemudian SRCS = hello5_events.c. Di sana kami pergi. Permainan. Sekarang, kita dapat melihat ia sesungguhnya dikecilkan oleh empat. Dan kini ia melantun sekitar. Saya mempunyai beberapa pengesanan perlanggaran berlaku dengan dua belah tingkap yang kita boleh lihat di. Dan apa yang berlaku apabila saya pergi ke menutupnya? Ia ditutup. Fantastic. Kami menerima peristiwa tersebut. Dan kita mengendalikannya. Jadi mari kita lihat kembali pada kod. Jadi, bagaimana saya mendapatkannya melantun di sekitar seperti itu? Ingat saya menetapkan kedua-dua x dan y mulanya kepada kelajuan. Dan kelajuan adalah positif berterusan, supaya akan mendapatkan ia bermula akan turun dan ke kanan. Sekarang, setiap bingkai, sebagai tambahan kepada pengendalian mana-mana acara yang mungkin telah berlaku, Saya akan mengesan sama ada bidadari saya cuba untuk keluar dari tingkap. Oleh itu, kita boleh berbuat demikian dengan hanya memeriksa x_pos dengan 0, y_pos 0, dan kemudian juga x_pos dan y_pos dengan lebar tingkap dan ketinggian tingkap. Notis saya telah ditolak lebar bidadari. Dan ini adalah kerana jika saya tidak tolak lebar bidadari, ia hanya akan pastikan asal-usul bidadari tidak pergi ke luar tingkap. Tetapi kita mahu keseluruhan lebar bidadari untuk sentiasa berada di dalam tingkap dan ketinggian keseluruhan bidadari untuk sentiasa berada di dalam tetingkap. Jadi itulah yang penolakan adalah untuk. Banyak geometri di sini boleh membantu untuk menarik keluar di atas kertas dengan koordinat sistem untuk melihat apa yang sedang berlaku. Jadi jika saya bertembung, saya hanya hanya menetapkan semula kedudukan supaya ia tidak akan keluar dari skrin. Dan saya akan, jika ia melantun pada salah satu dinding sisi, Saya akan menafikan x halaju supaya ia bermula melantun ke arah yang lain. Begitu juga, jika ia mencecah bahagian atas atau bahagian bawah, Saya akan menetapkan halaju y sama dengan y halaju negatif, supaya ia akan pulih semula. Jadi itu hanya bagaimana kita mendapat bahawa di sini. Dan kedudukan pengemaskinian seperti yang kita lihat sebelum ini, dibahagikan dengan 60, kerana kami hanya mengendalikan 1/60 saat. Dan kemudian memberi, betul-betul sama seperti sebelum ini. Dan supaya segala-galanya yang telah berlaku fail ini. Jadi itulah cara kita menjalankan acara. Perkara utama yang perlu mengambil sini adalah fungsi SDL_PullEvent ini. Dan anda pasti perlu membaca dokumentasi lebih lanjut mengenai SDL_Event kesatuan, kerana jenis data ini adalah sangat, sangat penting, kerana kami menggunakannya untuk pelbagai acara. Sebagai contoh, kita menggunakannya untuk papan kekunci peristiwa, yang adalah apa yang fail ini adalah untuk. Jadi apa yang kita ada? Kami ada perkara yang sama seperti sebelum ini, memulakan SDL, membuat tingkap, mewujudkan pemapar yang, memuatkan imej ke dalam ingatan, mewujudkan tekstur. Sekali lagi, kita akan mempunyai segi empat tepat dest ini, kita akan skala imej oleh empat, membuat ia sedikit lebih kecil. Sekarang, kita akan memulakan bidadari di tengah skrin. Tetapi kali ini, kita akan menetapkan x awal dan y halaju sifar, kerana papan kekunci adalah akan mengawal mereka. Dan tambahan pula, kita akan mengesan pembolehubah ini atas, bawah, kiri, dan kanan. Dan itu akan terus mengesan sama ada kami telah menekan butang papan kekunci yang sesuai dengan atas, bawah, kiri, dan kanan. Sekarang, ini adalah jenis mewah kerana kita boleh menggunakan W, A, S, D sini, atau kekunci anak panah yang sebenar. Kita akan melihat bahawa hanya dalam satu saat. Jadi, kita akan memproses acara yang sama seperti sebelum ini. Kita tarik acara tersebut. Tetapi sekarang kita akan menukar kepada jenis acara. Jika ia SDL_Quit, kami akan menetapkan berdekatan diminta untuk satu, sama seperti sebelum ini. Yang mengendalikan x dalam sudut tingkap, supaya tingkap kita sebenarnya ditutup. Jika tidak, jika kita mendapat kunci SDL turun Acara itu, yang bermakna kita ditekan kekunci, maka apa yang kita akan lakukan ialah kita berada akan beralih pada perkara ini di sini, yang ertinya- supaya event.key bermakna merawat kesatuan acara kami, pergi dan mendapatkan kunci struktur acara di dalamnya. Jadi ternyata bahawa ini kesatuan adalah struktur acara utama. Dan kemudian pergi ke kunci struktur acara itu bidangnya dipanggil keysym dan kemudian scancode. Dan sekali lagi, pasti membaca dokumentasi tentang perkara ini. Kata kunci input agak menarik. Anda boleh mendapatkan kod imbasan atau kod kunci. Dan ia sedikit halus, tetapi dokumentasi yang agak baik. Jadi, jika kita melihat kod imbasan untuk tekan kekunci kami tidak W atau ke atas, kita akan menubuhkan sama dengan 1. Dan kemudian kita keluar daripada suis itu. Jika ia A atau kiri, kita set kiri ke 1, et sebagainya, dan sebagainya, untuk turun dan kanan. Sekarang, di dalam suis luar ini, jika kita lihat kunci sehingga acara, ini bermakna kita telah mengeluarkan kunci dan kami tidak lagi menekan. Jadi, saya akan berkata sehingga sama dengan 0, kiri sama dengan 0, turun sama dengan 0, betul-betul sama dengan 0, dan sebagainya. Dan perhatikan kita ada dalam setiap satu daripada dua kes meletakkan betul-betul bersebelahan antara satu sama lain tanpa kod berasingan untuk kes pertama, yang bermakna sama ada S atau ke bawah di sini, ia akan melaksanakan kod ini. Jadi yang cukup berguna. Ia menghalang kita perlu melakukan lebih banyak syarat dan IFS dan perkara-perkara macam itu. Oleh itu, kita akan menentukan halaju. Kami menetapkan kelajuan ke 0. Kemudian jika sehingga ditekan dan tidak turun, maka kita menetapkan halaju y pada kelajuan negatif. Ingat negatif, kerana arah negatif y terpulang. Dan arah y positif ke bawah. Jika turun ditekan dan tidak ke atas, kemudian kami akan menetapkan ia untuk kelajuan positif, yang bermaksud pergi ke bawah skrin. Perkara yang sama dengan kiri dan kanan. Dan kemudian kita akan mengemas kini jawatan-jawatan seperti dahulu. Kami akan melakukan perlanggaran pengesanan dengan batas, tetapi kita tidak akan menetapkan semula halaju, kerana halaju sahaja dikawal oleh keyboard. Tetapi kita akan menetapkan semula jawatan untuk memastikan ia dalam tetingkap. Dan kita akan menetapkan jawatan dalam struct dan kemudian melakukan semua memberikan barangan dari sebelum ini. Jadi mari kita lihat apa yang dilakukan. Oleh itu, SRCS-- mari kita lihat, ini adalah hello6_keyboard.c. Oh tidak. Oleh itu, kita mendapat beberapa amaran di sini. Dan itu hanya mengatakan kita tidak memeriksa tiap-tiap jenis tunggal mungkin acara. Itu OK, kerana ada 236 daripada mereka atau lebih. Jadi saya akan untuk mengenepikan amaran. Ia masih menyusun halus. Jadi, saya akan bermain permainan. Ia tidak bergerak. Tetapi kini, apabila saya mash pada keyboard saya, Yang boleh saya lakukan beberapa pergerakan WASD sini, Saya menggunakan kekunci anak panah saya juga. Dan perhatikan, walaupun saya menekan tepat sekarang, ia tidak akan keluar dari tingkap, kerana saya menetapkan semula pada setiap bingkai. Supaya agak kemas. Anda boleh bayangkan bergerak Mario dengan beberapa kekunci anak panah atau sesuatu seperti itu. Dan ya, X tidak bekerja. Fail Jadi akhir kita akan untuk melihat, hellow7_mouse. Ini adalah tentang mendapatkan input tetikus. Jadi dalam satu ini, kami mengimport header matematik, kerana kita akan mempunyai sedikit matematik di sini. Sama lama, sama lama barangan, destinasi, lama yang sama, melihat bahawa sebelum. Nah, ini adalah menarik. Jadi kita kembali kepada hanya memeriksa bagi SDL berhenti acara. Kenapa begitu? Jadi, anda boleh mendapatkan input tetikus daripada peristiwa. Seperti apabila tetikus digerakkan, anda acara untuk itu. Apabila butang tetikus ditekan, anda boleh mendapatkan acara untuk itu. Tetapi ada satu lagi, lebih mudah sedikit mungkin, API untuk mendapatkan input tetikus. Dan itu hanya SDL negeri get tetikus. Jadi saya mempunyai int untuk x dan y untuk kedudukan kursor. Saya lulus kepada SDL_GetMouseState, yang menetapkan ini. Dan ini adalah kedudukan dalam sistem koordinat tetingkap. Jadi jika jisim berada di bahagian atas sebelah kiri tingkap, yang akan 0, 0. Kini, apa yang saya akan lakukan ialah saya akan untuk melakukan sedikit matematik vektor. Saya pasti anda fikir anda tidak akan melihat bahawa dalam CS50, tetapi di sini ia adalah. Saya akan melakukan beberapa vektor matematik untuk mendapatkan vektor daripada imej untuk kursor. Dan jadi mengapa saya perlu penolakan ini di sini? Nah, jika saya hanya menggunakan dest .-- supaya Saya perlu untuk menterjemahkan tetikus x dan y separuh lebar dan ketinggian imej, kerana saya mahu pusat gambar untuk pergi ke arah tetikus, bukan asal imej. Jadi itu hanya untuk memastikan saya bercakap kira-kira tengah imej di sini. Kemudian kami mendapatkan delta x dan y, yang perbezaan dari sasaran ke kedudukan sebenar imej. Dan kemudian kita boleh mendapatkan menjauhkan sini, yang akan menjadi Pythagoras teorem, punca kuasa dua x kali x campur y kali y. Sekarang untuk mengelakkan ketar, dan saya boleh tunjukkan anda apa yang ini tidak jika saya tidak melakukan ini, jika jarak antara kursor dan pusat imej adalah kurang daripada lima, Saya hanya tidak akan bergerak imej. Jika tidak, kita menetapkan halaju. Dan kita menetapkan ia supaya halaju akan sentiasa berterusan. Dan hasilnya bersih semua matematik ini adalah bahawa imej akan bergerak ke arah kursor. Kini, ternyata bahawa SDL_GetMouseState, di samping menetapkan x dan y hujah-hujah di sini, ia juga mengembalikan int yang sepadan kepada keadaan butang tetikus. Oleh itu, kita tidak boleh membaca yang secara langsung, tetapi kita boleh menggunakan makro ini, satu pengendali bitwise, bukan yang menakutkan, hanya bitwise dan. Oleh itu, kita katakan butang, yang merupakan hasil yang daripada SDL_GetMouseState kami, jika itu dan bitwise dan, makro ini sini, SDL_BUTTON_LEFT. Jadi ini akan hanya menyelesaikan untuk bitmap yang sepadan butang kiri tetikus ditekan. Dan jadi jika bitwise dan berlaku dan ia tidak sifar, yang bermaksud butang kiri ditekan, maka kita sebenarnya akan menafikan kedua-dua x dan y halaju itu, yang hanya akan membuat melarikan imej. Jawatan Update. Pertembungan pengesanan, melihatnya semua sebelum, menjadikan, baiklah. Mari kita membuat ia. Jadi, anda mendapat membuat SRCS = hello7_mouse.c. Yang besar. Tiada kesilapan. Dan permainan. Jadi di sini saya mempunyai tetikus saya. Dan imej yang memang mengejar tetikus saya. Sekarang, dalam permainan yang anda buat, mungkin ini adalah seperti mengejar musuh watak kecil anda atau apa sahaja. Tetapi di sini kita mempunyai imej mengejar tetikus. Dan apabila saya klik, tetikus bermula mengejar imej dan imej adalah melarikan diri dari tetikus. Jadi, itu agak sejuk. Dan notis lagi, ada masih pengesanan perlanggaran di sini. Jadi itulah sedikit akhir demo yang kudirikan di sini. Dan mari kita lihat satu lagi perkara. Jadi kembali di sini, saya nyatakan ketar ini. Baiklah. Jadi, jika jarak kurang daripada lima piksel, Saya telah menetapkan x dan y halaju sifar. Apakah yang akan berlaku jika kita buang itu? Jadi, saya akan hanya melakukan ini. Sila maafkan gaya dahsyat ini, tetapi kita mengulas keluar kod yang betul. Jadi, saya akan menyimpan itu dan melakukan perintah sama dari sebelum membuatnya. Baiklah. Dan kini apa yang berlaku? Yang baik. Kami masih berikutan tetikus sama seperti sebelum ini, tetapi apabila kita sampai ke tetikus, kami mempunyai ketar kasar ini. Apa yang berlaku di sana? Nah, dalam vektor kami matematik, ingat kita mengambil jarak antara kursor dan pusat imej? Well, seperti yang menghampiri 0, kita mula mendapat seperti ini jenis tingkah laku gila di mana imej adalah jenis seperti berayun sekitar kursor. Dan itu mewujudkan ketar ini. Dan itu benar-benar hodoh. Dan anda mungkin tidak mahu permainan anda berbuat demikian, melainkan jika ia adalah beberapa jenis kesan khas. Jadi itulah sebabnya kita ada hanya ini sewenang-wenangnya memotong lima piksel, di mana kita katakan jika ia dalam tempoh lima piksel, kita baik. Kami tidak perlu bergerak imej lagi. Jadi itulah apa yang berlaku di sana. Jadi, itu cukup banyak ia. Anda kini tahu bagaimana untuk mewujudkan tingkap, memuatkan imej, menarik patung untuk tingkap, mendapatkan input keyboard, mendapatkan input tetikus, ada sekumpulan lain input bahawa anda tidak akan tahu bagaimana untuk mendapatkan jika anda hanya menghabiskan Beberapa minit melihat dokumentasi. Jadi, anda benar-benar mempunyai cukup beberapa alat yang ada sekarang untuk menulis permainan sepenuhnya. Sekarang, setiap permainan memerlukan beberapa audio, tetapi dokumentasi audio juga cukup baik. Dan saya sanggup bertaruh bahawa jika anda memahami semua perkara kita bercakap tentang hari ini dengan imej, dan permukaan, tingkap, dan segala-galanya, maka memikirkan API audio tidak akan menjadi yang buruk. Oleh itu, saya berharap untuk melihat apa yang anda buat dengan SDL.