Kamis, 13 Agustus 2015

Latar Belakang Program Game Engine

Membuat animasi latar belakang (background) game engine


Selamat pagi, jumpa lagi dengan ogut melalui artikel ini. Setelah sebelumnya ogut menjelaskan tentang kerangka dasar program game engine yang tidak memerlukan banyak kode program. Sekarang ogut akan menjelasan cara membuat background game.


Gambar latar belakang yang bergeser adalah komponen pertama yang akan ogut bahas, tetapi sebelumnya ada beberapa proses yang harus ogut terangkan sebelum Anda dapat menampilkan gambar latar belakang.

Perhatikan listing program di bawah ini (MainProgram.cpp).

#include"My7OpenGL.h"
#include"GEEmas7.h"

HWND MainHWND = NULL;

My7OpenGL GameOpenGL;
GEEmas7 GameObject;

int WINAPI WinMain(HINSTANCE HInstanceP, 
HINSTANCE HPrevinstanceP, 
LPSTR LpcmdLineP, int NShowcmdP)
{
GameOpenGL.SetHInstance(HInstanceP);
if (!GameOpenGL.CreateOpenGLWindow(MainHWND))
return 0;

/////////////////////////////
//Inisialisasi Game
/////////////////////////////
if (!GameObject.geInisialisasi(MainHWND))
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}


/////////////////////////////
//set nilai awal variabel
/////////////////////////////
GameObject.geSetGameLoop();

while (GameOpenGL.OpenGLMainLoop)
{
GameOpenGL.MessageHandle();

/////////////////////////////
//Render objek game, 
//di bawah ini
/////////////////////////////

GameObject.geDisplayBG();

/////////////////////////////

GameOpenGL.OpenGLSwapBuffer();
GameOpenGL.BreakProgram();

/////////////////////////////
//memperlambat kecepatan game
/////////////////////////////
GameObject.geTimerGEEmas7(GAME_DELAY);
}

GameOpenGL.CloseOpenGLWindow(MainHWND);

return 0;
}

Sebelum Anda menampilkan objek-objek game Anda harus menyisipkan beberapa hal berikut di dalam program.

Include
Include yang harus ditambahkan untuk objek game adalah.
...
...
...
#include"GEEmas7.h"
...
...
...

Variabel objek
Cara mendeklarasikan variabel objek telah penulis bahas sebelumnya.
...
...
...
GEEmas7 GameObject;
...
...
...

Inisialisasi
Pertama kali dalam setiap program untuk game ini Anda harus inisialisasi game, dan jika inisialisasi game gagal program akan langsung dihentikan, oleh sebab itu dipakai kondisi if.
...
...
...
if (!GameObject.geInisialisasi(MainHWND))
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}
...
...
...

Nilai awal variabel
Variabel-variabel yang digunakan untuk perhitungan game ini harus diberi nilai awal sesuai dengan kondisi game sebelum program memasuki tahap render.
...
...
...
GameObject.geSetGameLoop();
...
...
...

geDisplayBG
Pada listing program sebelumnya Anda dapat melihat bahwa fungsi geDisplayBG ogut tempatkan di dalam while, artinya gambar latar belakang terus menerus akan mengalami proses render hingga program dihentikan.

Fungsi geDisplayBG dipakai untuk menampilkan objek latar belakang ke layar monitor, gambar akan terus bergeser secara berulang-ulang dalam waktu 20 hingga 30 menit(tergantung kecepatan komputer). Jika  telah melewati waktu di atas gambar akan berhenti bergeser. Waktu 20 hingga 30 menit telah ogut perhitungkan dan cukup untuk memainkan satu level/babak dalam game ini.

geLoadBGTexture
Anda dapat mengganti gambar latar belakang dengan fungsi ini.

#include"My7OpenGL.h"
#include"GEEmas7.h"

HWND MainHWND = NULL;

My7OpenGL GameOpenGL;
GEEmas7 GameObject;

int WINAPI WinMain(HINSTANCE HInstanceP,
HINSTANCE HPrevinstanceP,
LPSTR LpcmdLineP, int NShowcmdP)
{
GameOpenGL.SetHInstance(HInstanceP);
if (!GameOpenGL.CreateOpenGLWindow(MainHWND))
return 0;

if (!GameObject.geInisialisasi(MainHWND))
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}

/////////////////////////////
//Status loading ditampilkan
/////////////////////////////
GameOpenGL.DisplayLoading();

/////////////////////////////
//Load tektur untuk gambar BG
/////////////////////////////
if (!GameObject.geLoadBGTexture("BmpData/BG1.bmp"))
{
GameOpenGL.CloseOpenGLWindow(MainHWND);
return 0;
}


/////////////////////////////
//set nilai awal variabel
/////////////////////////////
GameObject.geSetGameLoop();

while (GameOpenGL.OpenGLMainLoop)
{
GameOpenGL.MessageHandle();

/////////////////////////////
//Render objek game,
//di bawah ini
/////////////////////////////

GameObject.geDisplayBG();

/////////////////////////////

GameOpenGL.OpenGLSwapBuffer();
GameOpenGL.BreakProgram();

/////////////////////////////
//memperlambat kecepatan game
/////////////////////////////
GameObject.geTimerGEEmas7(GAME_DELAY);
}

GameOpenGL.CloseOpenGLWindow(MainHWND);

return 0;

}

Jika program di atas dijalankan rekan-rekan dapat melihat bahwa gambar latar belakang telah berubah.

Sebelum fungsi geLoadBGTexture dipanggil sebaiknya Amda menggunakan fungsi DisplayLoading agar pemain game mengerti bahwa pada saat ini program sedang melakukan proses loading.


Untuk membuat tekstur latar belakang  jangan lupa aturan pangkat dua, memakai file bitmap 24 bit, lebar dan tinggi tekstur sebaiknya nilai dari bilangan pangkat dua(128, 256, 512), serta tekstur tidak bertepi atau menyambung.

geTimerGEEmas7
Fungsi ini berguna untuk mengurangi kecepatan proses pengulangan atau biasa kita sebut dengan delay. Fungsi ini sebaiknya ditempatkan pada akhir dari pengulangan while untuk membuat program berjalan lebih optimal.
Nilai GAME_DELAY telah ogut sesuaikan, tetapi Anda dapat mengubah nilai ini jika diperlukan.
Untuk mengubah nilai GAME_DELAY Anda dapat melakukan proses editing terhadap file header GEEmas7.h.
...
...
...
////////DELAY & TIMER
#define GAME_DELAY 10000
...
...
...
Perbesar nilai GAME_DELAY agar kecepatan game lebih lambat, ogut menentukan nilai sebesar 10000 karena nilai ini sesuai di komputer yang ogut gunakan.

Perubahan nilai ini sebaiknya dilakukan pada tahap akhir karena masih banyak objek atau komponen game lainnya yang bisa ditambahkan, semakin banyak objek maka semakin banyak proses perhitungan yang harus dilakukan komputer dan hal itu akan membuat program bekerja lebih lambat.

Demikian rekan-rekan tahap kedua untuk membuat game shoot them up dengan game engine ini, mudah bukan, ngak perlu koding yang panjang dan rumit. Tahap berikutnya rekan-rekan akan belajar cara menampilkan pesawat jagoan, jadi sabar ya semua akan ogut bahas tuntas.

Salam Game Engine


Heriady
heriady.yoh@gmail.com




Artikel terkait

Panduan Lengkap Membuat Game Perang Shoot Them Up

Panduan Lengkap Membuat Game Perang Dengan Game Engine