Ahlan Wa Sahlan

Rabu, 25 Mei 2011

KEMAMPUAN ENGINE-ENGINE GTGE

Bab ini akan menjelaskan secara terperinci engine-engine yang terdapat dalam GTGE serta cara memakainya.
Tujuan : Mengetahui seluruh engine yang ada pada GTGE, apa kegunaannya, dan bagaimana cara pemakaiannya.
collapse/expand
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.


Bab ini akan menjelaskan secara terperinci engine-engine yang terdapat dalam GTGE serta cara memakainya.
Tujuan : Mengetahui seluruh engine yang ada pada GTGE, apa kegunaannya, dan bagaimana cara pemakaiannya.
collapse/expand
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.

Tutorial6.java [view online]

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 antara keyDown dan keyPressed adalah :
keyDown akan mengembalikan nilai true selama tombol ditekan; sedangkan
keyPressed hanya akan mengembalikan nilai true sewaktu 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 dari getCurrentFPS() dengan getFPS() adalah :
getCurrentFPS() mengembalikan kecepatan frame rate yang dapat dicapai oleh game; sedangkan
getFPS() mengembalikan kecepatan frame rate yang ingin dicapai, yang diset pada setFPS(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!

collapse/expand
Kesimpulan :

GTGE memiliki 6 buah engine, yakni Engine Grafis, Engine Input, Engine Suara, Engine Timer, Engine File I/O, dan Engine Citra.
Game class (superclass dari setiap game) telah merangkum seluruh engine tersebut dengan menginisialisasi dan membungkus engine-engine tersebut.
Selain menyediakan referensi objek dari setiap engine, Game class juga membungkus fungsi-fungsi penting dari setiap engine dengan memanggil fungsi dari engine-engine tersebut secara langsung, hal ini untuk memberikan kenyamanan lebih kepada Anda sebagai programmer.
Untuk keseluruhan kemampuan dari setiap engine dapat dilihat secara langsung pada dokumentasi API dari engine yang bersangkutan.
Bab ini adalah bab akhir dari "Tutorial Fondasi", Anda sudah dapat mulai membuat game dari sekarang! Tetapi agar pembuatan game Anda jauh lebih mudah, silakan melanjut ke tutorial yang selanjutnya, "Tutorial Objek Game".



Referensi : com.golden.gamedev.engine Package
http://www.goldenstudios.or.id/forum/showthread.php?tid=156 »

1 komentar:

  1. kalo aku perhatiin, kayaknya GTGE ntu paka java yah??
    koreksi klo aq salah...
    ^^
    artikelnya keren bang....

    BalasHapus