Tuesday, 18 February 2014

Kedalaman sebuah Objek

Hell yeah! sudah tahun 2014 aja, tepatnya udah bulan Februari 2014 wahahaha. Tak terasa memang waktu berjalan begitu cepat.

Nah, kali ini kita melakukan beberapa teknik dalam menampilkan sebuah objek, untuk itu perhatikan kedua gambar berikut :

Gambar. Kedalaman Objek

Yup, kedalaman (Depth) yang dimaksud adalah bagaimana objek diletakkan terlebih dahulu pada program 2D. Contoh kita memiliki 10 objek gedung yang akan kita letakkan pada layar. Umumnya jika objek disimpan pada array maka kita akan menampilkan dari 0-9 secara berurutan. Masalah akan timbul jika yang ditampilkan tidak beraturan posisi Y / ketinggiannya. Seperti pada gambar diatas pada gambar berhuruf A, dimana objek gedung (seolah-olah yah hahaha xD ) ditampilkan secara berurutan sesuai indeks array, sedangkan posisinya selanjutnya mungkin ada yang lebih atas atau lebih bawah tidak beraturan sehingga akan tampil acak-acakan.

Lalu perhatikan lagi gambar diatas pada gambar huruf B, dimana objek tampak lebih rapi dan mulai tampak perspektif sebuah perkotaan yang dilihat dari atas gunung (oh yeah! :P ). Jika biasanya kode yang digunakan seperti berikut (Potongan kode) :

#define MAX_BOX 50

int main( int argc, char** argv)
{
    std::vector<Kotak> A;
    for(int i = 0; i<MAX_BOX;i++)
    {
        //inisialisasi kotak A sebanyak MAX_BOX
    }
    
    //loop utama
    while(!done){
        ...
        //menampilkan kotak A sebanyak MAX_BOX
        for(int i = 0; i<MAX_BOX;i++)
        {
            A[i].tampil(screen);
        }
    }
}
Maka kita perlu menambahkan beberapa proses agar objek yang ditampilkan berurutan sesuai posisi ketinggian, yaitu yang lebih rendah ditampilkan lebih dahulu (dari atas lalu kebawah, karena semakin kebawah nilai y semakin besar). Variabel yang diperlukan array yang akan menampung urutan objek. Berikut ini potongan kodenya :

#define MAX_BOX 50

int main( int argc, char** argv)
{
    std::vector<Kotak> A;
    for(int i = 0; i<MAX_BOX;i++)
    {
        //inisialisasi kotak A sebanyak MAX_BOX
    }
    
    //loop utama
    while(!done){
        ...
        const int NO_ = 0, Y_ = 1;
        int Urutan[MAX_BOX][2];

        //mengumpulkan data posisi Y dan nomor urut
        for(int i = 0; i < MAX_BOX;i++)
        {
            Urutan[i][NO_] = i;
            Urutan[i][Y_] = A[i].getY();
        }

        //melakukan pengurutan dengan Bubble Sort
        for(int i=0;i < MAX_BOX;i++)
        {
            for(int j=i;j < MAX_BOX;j++)
            {
               if(Urutan[i][Y_] > Urutan[j][Y_])
               {
                   int temp_;
                   temp_ = Urutan[i][NO_];
                   Urutan[i][NO_] = Urutan[j][NO_];
                   Urutan[j][NO_] = temp_;

                   temp_ = Urutan[i][Y_];
                   Urutan[i][Y_] = Urutan[j][Y_];
                   Urutan[j][Y_] = temp_;
               }
            }
        }

        //tahap terakhir menampilkan objek sesuai nilai urutan.
        for(int i = 0; i < MAX_BOX;i++)
        {
            A[Urutan[i][NO_]].tampil(screen);
        }
    }
}


Akhirnya objek yang tampil lebih rapi. So, Happy Coding!

- Krofz
 

back to top

back to top