Setelah kita dapat menjalankan kerangka dasar dari sebuah game (game kosong) pada bab sebelum, saatnya untuk mengutilisasi setiap engine dari GTGE untuk membuat game yang sebenarnya! seperti menampilkan gambar, memutar suara, dll.
GTGE memiliki 6 buah engine :
(lihat package com.golden.gamedev.engine)
- Engine Grafis
Berisi fungsi-fungsi yang berhubungan dengan grafis layar, seperti :
- Mengambil layar belakang (backbuffer) dimana game akan digambar.
- Memutar (flip) atau mengkopi backbuffer ke layar utama.
Engine grafis ini juga yang digunakan untuk menginisialisasi mode grafis game, seperti yang telah dijelaskan pada bab sebelum.

- Engine Input
Berisi fungsi-fungsi untuk mengambil input user dari keyboard dan mouse, seperti :
- Mendeteksi penekanan tombol keyboard.
- Mendeteksi penekanan tombol mouse.
- Posisi mouse dalam game. - Engine Suara
Berisi fungsi-fungsi untuk memutar suara, seperti :
- memutar satu suara atau lebih secara simultan.
- memutar suara secara exclusive.
- memutar suara secara berulang-ulang. - Engine Timer
Berisi fungsi-fungsi untuk mengelola frame rate dari game. - Engine File I/O
Berisi fungsi-fungsi untuk mengambil objek file, URL, dan stream dari suatu resource. - Engine Citra
Berisi fungsi-fungsi untuk meload citra dari file dengan atau tanpa warna transparansi.
Menggunakan Engine Game dari dalam Game
Seperti yang telah kita pelajari dari bab-bab sebelum, setiap game merupakan turunan dari Game class. Oleh karenanya sekarang kita lihat bagaimana game kita yang merupakan turunan dari Game class tersebut dapat langsung memakai engine-engine GTGE di atas.
Pertama-tama mari kita lihat potongan kode program Game class di bawah ini :
public abstract class Game { public BaseGraphics bsGraphics; public BaseIO bsIO; public BaseLoader bsLoader; public BaseInput bsInput; public BaseTimer bsTimer; public BaseAudio bsMusic; public BaseAudio bsSound; protected void initEngine() { // game engines initilialization bsTimer = new ..... bsIO = new ..... ....... } }Dapat kita lihat bahwa
Game class menginisialisasi setiap engine GTGE yang siap untuk dipakai oleh game kita (ingat, game kita merupakan turunan dari Game class).
Selain dapat secara langsung memakai fungsi dari setiap engine dengan menggunakan referensi objek engine tersebut, Game class juga memberikan kenyamanan lebih dengan membungkus fungsi-fungsi yang penting dari setiap engine. Misalnya :
public abstract class Game { public BaseInput bsInput; public int getMouseX() { return bsInput.getMouseX(); } }Dapat kita lihat
Game class secara langsung memanggil fungsi dari engine input. Kami menggunakan cara pembungkusan seperti ini untuk semakin memudahkan dan menyamankan Anda dalam mengetikkan kode program game.

Kemampuan Engine GTGE
Sekarang saatnya kita lihat fungsi-fungsi penting dari setiap engine tersebut, yang umumnya telah dibungkus di dalam Game class.
Engine Grafis
Selain mensetting mode grafis, menyediakan backbuffer untuk penggambaran, dan menflip ke layar utama, engine grafis juga menyediakan fungsi-fungsi sebagai berikut :
- Menyediakan lebar dan tinggi dari game :
class :: Game Syntax: public int getWidth(); public int getHeight();
Engine Input
Engine input GTGE untuk saat ini hanya mendukung keyboard dan mouse (joystick belum didukung). Adapun fungsi-fungsi penting input keyboard adalah :
- Mendeteksi penekanan tombol keyboard :
class :: Game Syntax: public boolean keyDown(int keyCode); public boolean keyPressed(int keyCode); dimana : keyCode = nilai konstan tombol keyboard dari java.awt.event.KeyEvent boolean = true, apabila tombol keyboard keyCode ditekan Misal: mendeteksi apakah tombol SPASI (sedang) ditekan atau tidak keyDown(java.awt.event.KeyEvent.VK_SPACE); keyPressed(java.awt.event.KeyEvent.VK_SPACE);
Perbedaan antarakeyDowndankeyPressedadalah :
keyDownakan mengembalikan nilaitrueselama tombol ditekan; sedangkan
keyPressedhanya akan mengembalikan nilaitruesewaktu tombol ditekan pertama kali.
Sedangkan fungsi-fungsi penting input mouse adalah :
- Mendeteksi penekanan tombol mouse :
class :: Game Syntax: public boolean click(); public boolean rightClick();
- Mendeteksi kordinat pointer mouse dalam game :
class :: Game Syntax: public int getMouseX(); public int getMouseY();
Engine Suara
Engine suara digunakan untuk memutar suatu suara. Adapun fungsi-fungsi yang dibungkus oleh Game class adalah :
- Memutar musik secara berulang (.mid audio format), sedangkan untuk efek suara diputar sekali saja (.wav audio format):
class :: Game Syntax: public int playMusic(String audiofile); public int playSound(String audiofile); dimana : audiofile = nama file audio yang ingin diputar int = slot dimana audio diputar Misal: memutar musik "intro.mid" dan memutar efek suara "fire.wav" yang keduanya berada di direktori tempat game berada playMusic("intro.mid"); playSound("fire.wav");
Engine Timer
Fungsi-fungsi engine timer yang dibungkus adalah :
- Menset frame rate game, dimana nilai defaultnya adalah 50 frame-per-second (fps) :
class :: Game Syntax: public void setFPS(int fps); dimana : fps = frame rate yang diinginkan Misal: menset frame rate game menjadi 100 fps setFPS(100);
- Mengambil kecepatan frame rate dari game :
class :: Game Syntax: public int getCurrentFPS(); public int getFPS();
Perbedaan darigetCurrentFPS()dengangetFPS()adalah :
getCurrentFPS()mengembalikan kecepatan frame rate yang dapat dicapai oleh game; sedangkan
getFPS()mengembalikan kecepatan frame rate yang ingin dicapai, yang diset padasetFPS(int fps).
Engine File I/O
Oleh karena operasi file I/O jarang dilakukan, Game class tidak membungkus satu pun fungsi dari engine file I/O. Untuk menggunakan engine file I/O dapat dilakukan secara langsung dari referensi objek engine file I/O. Misalnya :
class :: Game Misal: mengambil objek URL "level.dat" java.net.URL url = bsIO.getURL("level.dat");
Engine Citra
Ada cukup banyak fungsi-fungsi dari engine citra yang dibungkus oleh Game class, diantaranya adalah :
- Menset warna yang akan dianggap sebagai warna transparan oleh setiap citra, defaultnya adalah
Color.MAGENTA- RGB (255,0,255) :class :: Game Syntax: public void setMaskColor(Color c); dimana : c = warna yang akan menjadi transparan dalam setiap citra Misal: menset warna hijau menjadi warna transparan setMaskColor(Color.GREEN);
- Meload citra dari file berformat png, gif, jpg :
class :: Game Syntax: public BufferedImage getImage(String imagefile); dimana : imagefile = file citra yang akan diload dalam format png, gif, jpg Misal: menload citra dari file "player.png" getImage("player.png");
- Meload dan memotong citra menjadi beberapa baris dan kolom :
class :: Game Syntax: public BufferedImage[] getImages(String imagefile, int col, int row); dimana : imagefile = file citra dalam format png, gif, jpg col = citra dipotong menjadi col kolom row = citra dipotong menjadi row baris Misal: menload citra dari file "player.png" dan memotongnya menjadi 4 kolom 2 baris getImages("player.png", 4, 2);
Catatan
Untuk keseluruhan fungsi dari setiap engine, Anda dapat melihat pada dokumentasi API dari engine tersebut. Untuk menggunakannya, gunakan referensi objek dari engine tersebut yang terdapat pada Game class seperti yang telah dijelaskan di atas.
Misalnya : mendeteksi perpindahan posisi mouse menggunakan engine input
class :: Game // referensi objek engine input adalah bsInput int dx = bsInput.getMouseDX(); int dy = bsInput.getMouseDY();
Contoh Pemakaian Engine secara Komprehensif dalam Game Class
Contoh pemakaian setiap engine di atas di dalam game :
file :: YourGame.java // JFC import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.net.*; // GTGE import com.golden.gamedev.*; public class YourGame extends Game { /****************************************************************************/ /**************************** GAME SKELETON *********************************/ /****************************************************************************/ public void initResources() { // Image Engine BufferedImage image = getImage("image1.png"); BufferedImage[] images = getImages("image2.png", 3, 1); // File I/O Engine URL url = bsIO.getURL("level.txt"); // Sound Music Engine playMusic("music1.mid"); // Timer Engine setFPS(100); } public void update(long elapsedTime) { // Input Engine if (keyPressed(KeyEvent.VK_SPACE)) { // Sound Engine playSound("sound1.wav"); } } public void render(Graphics2D g) { // Graphics Engine g.setColor(Color.LIGHT_GRAY); g.fillRect(0, 0, getWidth(), getHeight()); } /****************************************************************************/ /***************************** START-POINT **********************************/ /****************************************************************************/ public static void main(String[] args) { GameLoader game = new GameLoader(); game.setup(new YourGame(), new Dimension(640,480), false); game.start(); } }
Akhir dari Tutorial Fondasi
"Tutorial Fondasi" telah selesai! (bab 1-6)
Pada 6 bab ini kita telah mempelajari semua hal mendasar yang diperlukan untuk membuat sebuah game dengan menggunakan Java dan GTGE, mulai dari setting awal Java SDK sampai menjalankan sebuah game dengan menggunakan engine-engine yang ada pada GTGE.
Seperti yang telah kami sebutkan di awal tutorial, dengan menyelesaikan 6 bab awal ini (tutorial fondasi) Anda sudah dapat membuat game! Karena dalam 6 bab ini Anda sudah memperoleh seluruh peralatan / engine yang dibutuhkan untuk membuat sebuah game. Tutorial yang selanjutnya adalah opsional.
Anda sudah dapat membuat game, misalnya :
- Meload gambar berformat gif, png, jpg (menggunakan Engine Citra);
- Menampilkan citra tersebut ke layar (menggunakan Engine Grafis);
- Mendeteksi input user untuk menggerakkan citra tersebut (menggunakan Engine Input);
- Memutar efek suara (menggunakan Engine Suara);
- Membaca file teks untuk setting level ataupun menyimpan data player (menggunakan Engine File I/O);
- DLL.
Selanjutnya kita akan memasuki "Tutorial Objek Game". Tutorial objek game ini lebih spesifik ke hal di dalam game. Diharapkan dengan adanya tutorial objek game ini, pembuatan game Anda akan jauh lebih mudah!