Selasa, 21 Juli 2015

Background untuk Game Shoot Them Up

Membuat animasi scrolling untuk backgound game shoot them up


Selamat pagi rekan-rekan sekalian, pada artikel sebelumnya ogut pernah mem-posting program game shoot them up, kali ini ogut akan memberikan teknik cara untuk membuat scrolling background game tersebut sehingga akan tampak animasi seolah-olah pesawat sedang berjalan maju (padahal pesawat hanya diam ditempat saja).


Untuk membuat background yang bergulung ogut memakai cara yang sangat sederhana. Yaitu membagi layar secara horisontal sebanyak beberapa bagian yang sama besar, dan  juga membagi sebuah tekstur dengan cara yang sama.


Langkah berikutnya ogut menempatkan tekstur yang telah dibagi ke layar secara berurutan seperti gambar bawah ini. Dengan cara ini maka background akan terlihat seperti berjalan.


Untuk membuat programnya ikuti langkah-langkah berikut ini.

Deklarasi struct dan variabel
Struct dan variabel yang diperlukan untuk menampung titik koordinat layar dan texture koordinat adalah:

typedef struct
{
double V_Y1;
double V_Y2;
int Index_TK;
}Vertex_BG;

typedef struct
{
double TK_Y1;
double TK_Y2;
}TK_BG;

const int total_V_BG = 600;
const int total_TK_BG = total_V_BG * 2;

Vertex_BG V_BG[total_V_BG];
TK_BG Text_BG[total_TK_BG];

Mengisi nilai koordinat dan texture koordinat
Variabel-variabel yang telah kita siapkan harus diisi sebelum ditampilkan ke layar.

void Create_Vertex_BG(Vertex_BG Array_BG[], int total_ar, double Ymax_P)
{
int i;
//tinggi layar dibagi dengan total array
//untuk membagi layar menjadi bagian yang
//sama besar secara horisontal
double beda_VBG = (Ymax_P * 2.0 / (double)total_ar);

for (i = 0; i < total_ar; i++)
{
Array_BG[i].V_Y1 = -Ymax_P + (beda_VBG * (double)i);
Array_BG[i].V_Y2 = -Ymax_P + (beda_VBG * (double)(i+1));

Array_BG[i].Index_TK = i;
}
}

void Create_TK_BG(TK_BG Array_TK_BG[], int total_ar)
{
int i;

//tinggi texture = 1
//dibagi dengan banyaknya array.
double beda_TK_BG = 1.0 / (double)total_ar;

for (i = 0; i < total_ar; i++)
{
Array_TK_BG[i].TK_Y1  = beda_TK_BG * (double)i;
Array_TK_BG[i].TK_Y2  = beda_TK_BG * (double)(i+1);
}
}

Tampilkan background
Untuk menampilkan background perlu diperhatikan nilai dari Index_TK yang harus terus diperbaharui.

void Display_Scrolling_BG(Vertex_BG Array_BG[], TK_BG Array_TK_BG[],
int total_ar_V, int total_ar_TK,
unsigned int texture_BG, double Xmax_P)
{
int i;

glBindTexture(GL_TEXTURE_2D, texture_BG);
for (i = 0; i < total_ar_V; i++)
{
glBegin(GL_POLYGON);
glTexCoord2d(0.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y1);
glVertex2d( -Xmax_P, Array_BG[i].V_Y1);

glTexCoord2d(1.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y1);
glVertex2d( Xmax_P, Array_BG[i].V_Y1);

glTexCoord2d(1.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y2);
glVertex2d( Xmax_P, Array_BG[i].V_Y2);

glTexCoord2d(0.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y2);
glVertex2d( -Xmax_P, Array_BG[i].V_Y2);
glEnd();

//perbaharui nilai Index TK
//supaya tercipta animasi
//background berjalan/bergulung
Array_BG[i].Index_TK++;

if (Array_BG[i].Index_TK == total_ar_TK)
Array_BG[i].Index_TK = 0;
}
}

Delay
Untuk menahan laju agar game tidak telalu cepat diperlukan waktu tunda atau biasa disebut delay.

void My_Delay(double mili_detik_delay)
{
double ambil_waktu1;
double ambil_waktu2;

ambil_waktu1 = timeGetTime();

do
ambil_waktu2 = timeGetTime();
while ((ambil_waktu2 - ambil_waktu1) <= mili_detik_delay);
}

Selesai sudah pembahasan  cara untuk membuat scrolling background, source code program dapat rekan-rekan download di link yang telah disediakan. Pada artikel lain ogut akan menjelaskan cara untuk membuat pesawat, musuh, cara menembak dan lain-lain, hingga rekan-rekan dapat berkreasi sendiri  untuk membuat game sejenis ini.

Salam Shoot Them Up


Heriady
heriady.yoh@gmail.com




Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Animasi Game 2D dengan Translasi

Deteksi Tabrakan dengan Proyeksi Vektor