Dari penerjemah:
Ini adalah kelanjutan dari serangkaian terjemahan tutorial Twinklebear, yang awalnya tersedia di sini . Terjemahan ini sebagian gratis dan mungkin berisi sedikit perubahan atau tambahan dari penerjemah. Terjemahan dari dua pelajaran pertama ditulis oleh InvalidPointer . Gambar-gambar dari artikel asli dilokalkan dengan pelestarian gaya penulis maksimum.Daftar pelajaran:Penanganan acara
Dalam pelajaran ini, kita akan belajar dasar-dasar untuk mendapatkan input pengguna, dan untuk kesederhanaan, kita akan menganggap setiap tindakan pengguna sebagai upaya untuk
melarikan diri untuk menghentikan program. SDL menggunakan struktur SDL_Event dan fungsi ekstraksi peristiwa dari antrian acara, seperti SDL_PollEvent, untuk mengambil informasi tentang peristiwa. Kode yang ditulis sebagai bagian dari pelajaran ini didasarkan pada hasil dari
pelajaran sebelumnya .
Tapi pertama-tama, mari kita ubah gambar di tengah layar sehingga pengguna yang pertama kali melihat program Anda memahami apa yang dilakukannya dan apa yang diperlukan.
Penulis Man disimpanLoop utama paling sederhana
Kami akan menambahkan
loop utama ke program, yang akan membuat program bekerja sampai pengguna ingin keluar (dan memberitahukan program tentang hal itu dalam bentuk yang dapat diakses, tentu saja), alih-alih penundaan yang tetap, seperti dalam pelajaran sebelumnya. Berikut ini perkiraan struktur dari siklus seperti itu:
while (!quit)
Antrian Acara SDL
Untuk menggunakan sistem acara SDL dengan benar, kita membutuhkan setidaknya pemahaman minimal tentang fungsinya. Ketika SDL menerima suatu peristiwa dari sistem operasi, ia menempatkannya di akhir antrian, setelah semua peristiwa lain yang diterima sebelumnya, tetapi belum diekstraksi dari program. Jika, setelah memulai program, kami akan mengubah ukuran jendela secara bergantian, klik dan klik tombol, antrian acara akan terlihat seperti ini:

Ketika kami memanggil SDL_PollEvent, kami mendapatkan acara dari awal antrian, yang tertua dari yang tersisa. Menerima acara dari antrian menggunakan SDL_PollEvent menghapusnya dari sana, untuk menghindari ini, Anda dapat "mengintip" acara menggunakan fungsi SDL_PeepEvents dengan set flag SDL_PEEKEVENT. Anda dapat membaca lebih lanjut tentang fungsi ini dalam dokumentasi, itu tidak akan diperlukan dalam kerangka artikel ini (dan Anda kemungkinan besar juga akan) dan karena itu tidak akan dipertimbangkan.
Penanganan acara
Di loop utama, kami ingin menerima semua acara yang tersedia yang muncul setelah frame sebelumnya dibuat, dan memprosesnya. Untuk melakukan ini, cukup masukkan SDL_PollEvent dalam kondisi loop sementara, karena mengembalikan 1 jika menerima acara, dan 0 jika tidak ada yang menerima. Karena semua yang dilakukan oleh program adalah menyelesaikan pekerjaannya di bawah peristiwa tertentu, itu akan cukup untuk menggunakan variabel boolean (bool berhenti), menunjukkan apakah kita ingin mengakhiri program atau tidak dan menetapkan nilainya menjadi true ketika peristiwa ini diterima.
Loop ini harus ditempatkan di dalam loop utama aplikasi.
Kejadian tipe SDL_QUIT terjadi ketika pengguna menutup jendela, SDL_KEYDOWN ketika tombol ditekan pada keyboard (dan muncul berkali-kali saat dipegang, mirip dengan bagaimana huruf diulang sambil memegang kunci saat mencetak teks), dan peristiwa tipe SDL_MOUSEBUTTONDOWN terjadi ketika klik mouse. Ini hanya beberapa peristiwa yang dapat diterima aplikasi Anda - dan secara total, SDL dapat menerima lebih dari 20 jenis peristiwa, yang tentu saja tidak dapat dibahas oleh artikel ini, oleh karena itu Anda harus membacanya di dokumentasi untuk
SDL_EventPenyelesaian siklus utama
Kami telah menyelesaikan pemrosesan acara, tetapi dalam loop utama, satu bagian lagi tidak ada - tampilan adegan. Kami telah mempertimbangkan topik ini dalam pelajaran sebelumnya, tetap hanya menerapkan pengetahuan ini, dan siklus utama akan mengambil bentuk berikut:
Program ini akan bekerja selamanya. Ya, atau setidaknya sampai pengguna dengan
sopan memintanya untuk berhenti. Setelah memulai program, menekan tombol dengan tanda silang, menekan tombol apa saja pada keyboard, atau mengklik mouse di dalam jendela harus mengarah pada penyelesaian pekerjaannya. Dan sampai saat itu, dia hanya akan terus-menerus menggambar ulang isi jendela.
Tambahan dari penerjemah: program dalam bentuk yang kemungkinan besar akan mengkonsumsi semua sumber daya prosesor yang tersedia, memuat satu inti sepenuhnya. Ini akan menjadi rasional untuk menambahkan penundaan kecil (1-5 ms) pada akhir siklus utama menggunakan SDL_Delay, sehingga tanpa adanya acara, program membebaskan prosesor untuk program lain. Ini tidak berlaku untuk gim berat, yang sudah membutuhkan semua sumber daya yang tersedia, ketika pada 100fps menghabiskan 100 ms setiap detik untuk menunggu adalah kemewahan yang tidak diizinkan.Akhir dari pelajaran keempat
Jadi pelajaran selanjutnya berakhir. Sampai jumpa di pelajaran 5: Pengambilan sampel dari atlas tekstur
Pekerjaan rumah: coba tambahkan gerakan gambar, misalnya, menggunakan panah.