Halo semuanya! Ini adalah pelajaran kedua SDL 2. Saya masih mendapatkan informasi 
dari sini .
Jadi, selamat datang di pelajaran
Utama bukan karet
Dalam pelajaran terakhir, saya mengatur semuanya dengan baik di fungsi 
Main () , tetapi untuk program besar ini tidak baik. Itulah sebabnya kesempatan untuk menulis fungsi muncul. Sekarang kita akan menggunakannya.
Kami akan mulai menulis kode dengan menghubungkan SDL dan mendeklarasikan beberapa variabel global.
#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; 
Di sini, di luar fungsi 
Main () , kami mendeklarasikan objek jendela ( 
menang ), permukaan layar ( 
scr ), dan gambar 
emotikon ini ( 
senyum ).
Mari kita menulis fungsi untuk menginisialisasi SDL, membuat jendela dan permukaan untuk menggambar. Ini terlihat seperti ini:
Init () int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } 
 Kode ini seharusnya tidak asing bagi Anda dari pelajaran sebelumnya. Di sini kita menginisialisasi sistem video, menciptakan jendela dengan nama "Utama bukan karet", dengan koordinat yang tidak ditentukan dan dengan dimensi yang ditetapkan sebelumnya, dan juga mendapatkan permukaan jendela, menyimpannya di 
scr . Pada kesalahan, fungsi ini akan mengembalikan 1, jika tidak 0.
Sekarang Anda dapat menulis fungsi untuk mengunduh file media yang diperlukan. Ini dia:
Memuat () int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } 
 Fungsi ini sangat sederhana. Kami memuat gambar .bmp menggunakan fungsi 
SDL_LoadBMP . Fungsi ini mengambil path ke file gambar (penuh atau relatif), dan mengembalikan objek dari kelas 
SDL_Surface . Anda juga harus memeriksa kebenaran eksekusi: jika ada masalah dengan unduhan (file tidak ditemukan, file rusak), maka fungsi 
SDL_LoadBMP akan mengembalikan 
NULL .
Kami juga menulis program untuk menyelesaikan aplikasi.
Berhenti () void quit() { SDL_FreeSurface(smile); smile = NULL; SDL_DestroyWindow(win); SDL_Quit(); } 
 Fungsi 
SDL_FreeSurface baru telah muncul di 
sini , yang hanya membersihkan permukaan. Setelah kita menetapkan variabel 
smile menjadi 
NULL . Semua fungsi lain dibahas dalam pelajaran sebelumnya.
Di situlah penulisan fungsi selesai dan kami dapat melanjutkan ke 
Utama () .
Main () int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 
 Di sini pertama-tama kita memanggil fungsi 
init () , yang ditulis sebelumnya, kemudian fungsi 
load () , yang juga kita tulis sebelumnya. Selanjutnya, tampilkan 
senyum dalam 
scr , menggunakan fungsi 
SDL_BlitSurface . Fungsi ini menerima permukaan untuk menggambar, persegi panjang yang harus dipotong dari permukaan ini (ini diperlukan untuk animasi), jika tidak ada yang perlu dipotong, 
NULL ditransmisikan, permukaan tempat persegi panjang itu digambar, yang koordinatnya digunakan untuk menggambar. Jika koordinatnya nol, kami berikan 
NULL .
Sudah waktunya untuk berbicara tentang koordinat. SDL menggunakan sistem koordinat yang berbeda, bukan yang digunakan semua orang. Di sini titik dengan koordinat (0, 0) ada di sudut kiri atas. Ini penting untuk dipertimbangkan saat menampilkan untuk menghindari situasi yang tidak menyenangkan.
Nah, itu tadi menyenangkan, kami lanjutkan. Selanjutnya, kami memperbarui jendela dengan fungsi yang sudah akrab, membuat program membeku selama 2 detik, memanggil fungsi 
quit () yang kami tulis, dan mengakhiri program. Pada output, kami memiliki program yang menampilkan senyum dingin selama 2 detik. Seluruh kode terlihat seperti ini:
 #include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } void quit() { SDL_FreeSurface(smile); SDL_DestroyWindow(win); SDL_Quit(); } int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 
Saya harap semuanya jelas. Semoga beruntung untuk semuanya!
<< Pelajaran sebelumnya || Pelajaran selanjutnya 
>>