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 yPerbedaan 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; sedangkanmove(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.