Pengantar

Bab ini adalah awal dari "Tutorial Objek Game". Tetapi sebelum kita masuk ke dalam isi dari tutorial ini, agar Anda lebih mudah mengerti keseluruhan dari tutorial ini, kami akan memberikan sedikit prolog terlebih dahulu mengenai bagaimana sebenarnya GTGE memanage objek-objek dalam game atau yang kami sebut dengan sprite tersebut.

GTGE memanage sprite dalam 3 pendekatan :
(semakin ke bawah, semakin memudahkan kondisi yang kompleks)

  • Pendekatan pertama adalah dimana sprite secara langsung digunakan. Tiap-tiap sprite dimanage secara tersendiri, diupdate, dan ditampilkan ke layar di saat yang diinginkan.
  • Pendekatan kedua adalah dimana setiap sprite dikumpulkan ke dalam grup-grup, yang kemudian tiap-tiap grup dimanage, diupdate, dan ditampilkan ke layar secara tersendiri.
  • Pendekatan ketiga adalah dimana setiap sprite, yang telah dikumpulkan ke dalam grup-grup tersebut, diletakkan di dalam suatu arena bermain. Di dalam arena bermain ini semua hal berlangsung secara otomatis (update sprite, menampilkan sprite ke layar, mendeteksi tubrukan antara sprite, mengeluarkan sprite dari arena bermain, dll).

Tutorial ini akan menjelaskan setiap pendekatan secara berurutan. Baik, ayo kita mulai!

Catatan : Setiap contoh kode program diasumsikan berada di dalam class game.

Tutorial 7

SPRITE

Sprite.java [view online]
Bab ini menjelaskan apa itu sprite, kapan digunakan, inisialisasinya, serta cara menggunakannya di dalam suatu game.
Tujuan : Mengerti pengertian sprite dan bagaimana cara menggunakannya.
collapse/expand

Pengertian Sprite

Istilah sprite, dalam GTGE, digunakan untuk mendeskripsikan setiap objek dalam game yang memiliki gambar dan karakteristik.

Anda dapat membayangkan sprite sebagai suatu gambar yang terletak di suatu tempat di layar, yang mana gambar tersebut dapat bergerak, beranimasi, dan memiliki karakteristiknya masing-masing.

Objek sprite ini, dalam GTGE, diwakili oleh Sprite class yang berada dalam package com.golden.gamedev.object.

Inisialisasi Sprite

Tutorial7_1.java [view online]

Inisialisasi sprite terdiri atas 3 langkah :

  • Membuat objek sprite baru :
    class :: Sprite
    
    Syntax:
       public Sprite(BufferedImage image,
                     double x,
                     double y);
    
    dimana :
    image = citra yang menggambarkan sprite
    x     = kordinat x sprite di layar
    y     = kordinat y sprite di layar
    
    
    Misal:
    membuat sprite dengan citra "player.png" pada posisi 100, 200 di layar
    
       BufferedImage image = getImage("player.png");
       double x = 100;
       double y = 200;
    
       Sprite hero = new Sprite(image, x, y);
    
  • Mengupdate sprite tersebut :
    class :: Sprite
    
    Syntax:
       public void update(long elapsedTime);
    
    dimana :
    elapsedTime = waktu yang terlewat semenjak update terakhir
                  nilai ini didapat dari Game class
    
  • Merender (menggambar ke layar) sprite tersebut :
    class :: Sprite
    
    Syntax:
       public void render(Graphics2D g);
    
    dimana :
    g = objek grafis tempat sprite akan digambar
    

Contoh :

file :: YourGame.java

// JFC
import java.awt.*;
import java.awt.image.*;

// GTGE
import com.golden.gamedev.*;
import com.golden.gamedev.object.*;


public class YourGame extends Game {


    Sprite  hero;


 /****************************************************************************/
 /**************************** GAME SKELETON *********************************/
 /****************************************************************************/

    public void initResources() {
        BufferedImage image = getImage("player.png");
        double x = 100;
        double y = 200;

        hero = new Sprite(image, x, y);
    }


    public void update(long elapsedTime) {
        hero.update(elapsedTime);
    }


    public void render(Graphics2D g) {
        hero.render(g);
    }


 /****************************************************************************/
 /***************************** START-POINT **********************************/
 /****************************************************************************/

    public static void main(String[] args) {
        GameLoader game = new GameLoader();
        game.setup(new YourGame(), new Dimension(640,480), false);
        game.start();
    }

}

Cara Pemakaian Sprite

Meletakkan Sprite

Untuk meletakkan sprite pada kordinat tertentu gunakan :

class :: Sprite

Syntax:
   public void setLocation(double xs, double ys);

dimana :
xs = kordinat x sprite yang baru
ys = kordinat y sprite yang baru

Menggerakkan Sprite

Terdapat dua fungsi untuk menggerakkan sprite :

class :: Sprite

Syntax:
   public void setSpeed(double vx, double vy);
   public void move(double dx, double dy);

dimana :
vx = kecepatan terhadap sumbu x
vy = kecepatan terhadap sumbu y
dx = perpindahan terhadap sumbu x
dy = perpindahan terhadap sumbu y
Perbedaan antara setSpeed(double vx, double vy) dengan move(double dx, double dy) adalah :
setSpeed(double vx, double vy) menggerakkan sprite secara terus menerus sampai kecepatannya dijadikan 0; sedangkan
move(double dx, double dy) menggerakkan sprite sekali saja.

Contoh :

file :: YourGame.java

// JFC
import java.awt.*;
import java.awt.event.*;

// GTGE
import com.golden.gamedev.*;
import com.golden.gamedev.object.*;


public class YourGame extends Game {


    Sprite  hero;


 /****************************************************************************/
 /**************************** GAME SKELETON *********************************/
 /****************************************************************************/

    public void initResources() {
        hero = new Sprite(getImage("player.png"), 100, 200);

        hero.setLocation(50, 50);
        hero.setSpeed(0.1, 0);
    }


    public void update(long elapsedTime) {
        hero.update(elapsedTime);

        if (keyDown(KeyEvent.VK_DOWN)) {
           hero.move(0, 0.1*elapsedTime);
        }
    }


    public void render(Graphics2D g) {
        hero.render(g);
    }


 /****************************************************************************/
 /***************************** START-POINT **********************************/
 /****************************************************************************/

    public static void main(String[] args) {
        GameLoader game = new GameLoader();
        game.setup(new YourGame(), new Dimension(640,480), false);
        game.start();
    }

}

Jenis-Jenis Sprite

Tutorial7_2.java [view online]

Terdapat beberapa jenis sprite, salah satunya adalah AnimatedSprite class. AnimatedSprite adalah turunan dari Sprite class yang dapat beranimasi. Sprite jenis ini memerlukan kumpulan citra (array of images) yang digunakan untuk animasi sprite tersebut. Gunakan engine citra untuk memotong sebuah citra untuk membentuk suatu animasi.

Inisialisasi AnimatedSprite adalah sebagai berikut :

class :: AnimatedSprite

Syntax:
   public AnimatedSprite(BufferedImage[] image,
                         double x,
                         double y);

dimana :
image = kumpulan citra yang menggambarkan sprite
x     = kordinat x sprite di layar
y     = kordinat y sprite di layar


Misal:
membuat sprite dengan citra "player.png"
yang dipotong 4 kolom 2 baris

   BufferedImage[] images = getImages("player.png", 4, 2);
   double x = 100;
   double y = 200;

   AnimatedSprite hero = new AnimatedSprite(images, x, y);

Contoh :

file :: YourGame.java

// JFC
import java.awt.*;

// GTGE
import com.golden.gamedev.*;
import com.golden.gamedev.object.*;


public class YourGame extends Game {


    AnimatedSprite  hero;


    public void initResources() {
        hero = new AnimatedSprite(getImages("player.png", 4, 2), 100, 200);

        hero.setAnimate(true);
        hero.setLoopAnim(true);
    }

    public void update(long elapsedTime) {
        hero.update(elapsedTime);
    }

    public void render(Graphics2D g) {
        hero.render(g);
    }


    public static void main(String[] args) {
        GameLoader game = new GameLoader();
        game.setup(new YourGame(), new Dimension(640,480), false);
        game.start();
    }

}

Hal-Hal Penting Lainnya

Tutorial7_3.java [view online]
Timer.java [view online]

Untuk membuat suatu game / sprite tidak tergantung pada kecepatan komputer dimana game dimainkan (frame rate independent), selalu gunakan Timer class. Timer class adalah class yang menghitung waktu sebenarnya.

Inisialisasi dan penggunaan Timer class :

class :: Timer

Syntax:
   public Timer(int delay);
   public boolean action(long elapsedTime);

dimana :
delay       = waktu dalam milliseconds yang akan dihitung (1 detik=1000 ms)
elapsedTime = waktu yang terlewat semenjak update terakhir

Contoh membuat sebuah sprite untuk menembak setiap 1 detik :

file :: YourGame.java

// JFC
import java.awt.*;

// GTGE
import com.golden.gamedev.*;
import com.golden.gamedev.object.*;


public class YourGame extends Game {


    Sprite  hero;

    Timer   fireRate;


    public void initResources() {
        hero = new Sprite(getImage("player.png"), 100, 200);

        fireRate = new Timer(1000);
    }

    public void update(long elapsedTime) {
        hero.update(elapsedTime);

        if (fireRate.action(elapsedTime)) {
           // fire!!
           playSound("fire.wav");
        }
    }

    public void render(Graphics2D g) {
        hero.render(g);
    }


    public static void main(String[] args) {
        GameLoader game = new GameLoader();
        game.setup(new YourGame(), new Dimension(640,480), false);
        game.start();
    }

}

AnimatedSprite juga menggunakan Timer class untuk mengontrol kecepatan animasi agar tidak tergantung kepada kecepatan komputer.


Kesimpulan :

  • Sprite adalah setiap objek dalam game yang memiliki gambar dan karakteristik.
  • Sprite dalam GTGE diwakili oleh Sprite class.
  • Inisialisasi sprite terdiri atas 3 langkah, membuat objek sprite baru, mengupdate sprite tersebut, dan menampilkannya ke layar.
  • Untuk meletakkan sprite dikordinat tertentu gunakan Sprite.setLocation(x, y), sedangkan untuk menggerakkan sprite gunakan Sprite.move(dx, dy) atau Sprite.setSpeed(vx, vy).
  • AnimatedSprite class adalah turunan dari Sprite class yang dapat beranimasi.
  • Timer class digunakan untuk mengontrol karakteristik sprite / game agar tidak tergantung kepada kecepatan komputer.

Referensi : Sprite class, AnimatedSprite class, Timer class

Copyright © 2003-2005 Golden T Studios. All rights reserved. Use is subject to license terms.
GoldenStudios.or.id
Halaman 7 dari 12