Thursday, 26 February 2015

SDL2 : Dimulai dari Sebuah Titik (Piksel) #2




Tulisan ini merupakan lanjutan dari:
SDL2 : Dimulai dari Sebuah Titik (Piksel)

Pada SDL2 mari kita berkenalan dengan tipe data baru seperti SDL_Renderer dan SDL_Window untuk keperluan utama program kita, sebelumnya pada SDL1 cukup menggunakan SDL_Surface untuk membuat jendela utama. Selebihnya hanya perubahan disana-sini yang perlu penyesuaian saja .

Mari kita mulai dengan membuat file baru (File -> New -> Empty File, simpan dengan nama Main.cpp atau nama yang diinginkan) untuk project kita. Selanjutnya tuliskan kode int main seperti biasa, dan inisialisasi SDL serta beberapa variabel penting, seperti berikut :

  
//start code
#include <SDL.h>
#include <stdio.h>

//dimensi layar
const int Layar_Lebar = 640;
const int Layar_Tinggi = 480;

//fungsi untuk memulai fungsi-fungsi SDL
bool inisialisasi();

//prosedur untuk membersihkan variabel-variabel dan SDL
void bersih();

SDL_Window * gWindow = NULL;
SDL_Renderer * gRenderer = NULL;

int main(int argc, char * argv[])
{
   ...

Saat fungsi main dijalankan selanjutnya mempersiapkan inisialisasi variabel global agar dapat digunakan melalui fungsi inisialisasi. Berikut isi dari fungsi inisialisasi :
  
...

bool inisialisasi()
{
    //inisialisasi SDL
    if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "Terjadi Kesalahan! Inisialisasi Gagal! SDL Error: %s\n", SDL_GetError() );
 return false;
    }

    gWindow = SDL_CreateWindow("(Judul Program)",SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,Layar_Lebar,Layar_Tinggi,SDL_WINDOW_SHOWN);
    if( gWindow == NULL){
        printf( "Gagal membuat jendela! SDL Error: %s\n", SDL_GetError() );
        return false;
    }

    gRenderer = SDL_CreateRenderer( gWindow,-1,SDL_RENDERER_ACCELERATED);
    if( gRenderer == NULL){
        printf( "Gagal membuat Renderer! SDL Error: %s\n", SDL_GetError());
        return false;
    }

    //mengatur warna
    SDL_SetRenderDrawColor( gRenderer, 0x00, 0x00, 0xFF, 0xFF );

    //semua berjalan normal
    return true;
}
...

SDL_Init() berfungsi untuk inisialisasi library SDL agar dapat digunakan. Lalu fungsi SDL_CreateWindow akan membuat jendela aplikasi dengan dimensi 640x480, perhatikan parameter pada SDL_CreateWindow(). Selanjutnya dengan SDL_CreateRenderer kita telah membuat wadah untuk proses drawing. Dan yang terakhir adalah prosedur untuk membersihkan variabel-variabel yang ada dalam memori, dan juga mematikan fungsi-fungsi SDL yang sudah tidak terpakai, melalui prosedur void bersih() :
  
...
void bersih()
{
    //bersihkan variabel dari memory
    SDL_DestroyRenderer( gRenderer );
    SDL_DestroyWindow( gWindow );
    gWindow = NULL;
    gRenderer = NULL;

    //Menutup SDL
    SDL_Quit();
}
...

Inisialisasi dan prosedur pembersihan telah siap, selanjutnya kita langsung masuk ke dalam looping utama program kita.
  
...
int main(int argc, char * argv[])
{
    if( inisialisasi() == false){
        printf(" Program gagal berjalan! ");
        bersih();
        return 1;
    }
    //variabel sebagai Penanda perulangan
    bool keluar = false;

    //Variabel untuk menampung event masukkan
    SDL_Event e;

    //Loop utama kita berjalan selama keluar = false
    while( keluar == false)
    {
        //selama masih ada event dalam antrian
        while( SDL_PollEvent( &e ) != 0 )
        {
            //menangani jenis masukkan
            switch ( e.type)
            {
                //Jika user menekan tombol escape (ESC) atau tombol silang,
                //maka program akan ditutup
                case SDL_QUIT : keluar = true; break;
                case SDL_KEYDOWN:{
                    switch( e.key.keysym.sym){
                        case SDLK_ESCAPE: keluar = true; break;
                        default:;
                    }
                }
                default:;
            }
        }
        //mengatur warna abu-abu
        SDL_SetRenderDrawColor( gRenderer, 0x55, 0x55, 0x55, 0xFF );

        //Membersihkan layar dengan menutup keselurahan layar dengan warna abu-abu
        SDL_RenderClear( gRenderer );

        //Memperbaharui objek pada layar
        SDL_RenderPresent( gRenderer );

        //Waktu istirahat program setiap framenya selama 100 milisecond atau 0,1 detik
        SDL_Delay(100);
    }

    bersih();
    return 0;
}
...

Dapat dilihat bahwa SDL2 tidak jauh berbeda penulisannya jika anda sudah terbiasa dengan SDL1. Lakukan proses Build and Run (shortkey : F9), jika muncul pesan yang mengatakan bahwa SDL2.dll tidak ditemukan, maka buka kembali library arsip yang sebelumnya kita sudah , selanjutnya buka folder lib pada arsip, maka akan terdapat 2 folder , yaitu x64 untuk sistem 64bit dan x86 untuk sistem 32bit.

Lalu ekstrak SDL2.dll kedalam folder project atau satu folder dengan file program (.exe) atau cara kedua yaitu meletakkan file tersebut di dalam folder Windows -> System32. Dengan cara kedua, jika ada program yang memerlukan file tersebut, tetapi tidak ada dalam folder program tersebut, ia akan mencarinya didalam folder sistem (Windows\System32) sehingga dengan cara kedua, file library dapat bersifat universal.

Selamat! Jika program anda berjalan normal dan memunculkan jendela aplikasi dengan background berwarna abu-abu! . Pada artikel selanjutnya akan kita tampilkan titik putih seperti screenshot sebelumnya. So, Happy Coding!

- krofz

No comments:

Post a Comment

Maaf jika komentar anda lama terbitnya ^__^, penulis berusaha OL sesering mungkin. Komentar anda adalah semangat blog ini, dan juga semangat para blogger lainnya. You can use XHTML tags: <a href="" rel="link"> </a>, <strong> </strong>, <b> </b>, <em> </em>, <i> </i>.

Spesial character use :
&lt; for <
&gt; for >


Use Pastebin.com for alternative to display your code :) .

 

back to top

back to top