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
>>