PlayField dapat dibayangkan sebagai suatu arena bermain dimana semua hal, baik sprite, latar, dan lainnya diletakkan, yang mana seluruh aktivitas di arena bermain ini berlangsung secara otomatis.
Alasan dibuatnya class PlayField sama seperti alasan dibuatnya class SpriteGroup, yakni untuk memudahkan pengorganisasian banyak hal, dimana SpriteGroup dibuat untuk memudahkan pengorganisasian banyak sprite, sedangkan PlayField memudahkan pengorganisasian SpriteGroup, Background, dan CollisionManager.
Jadi class PlayField menangani otomatisasi dari :
- Latar (
Background) : update, dan render latar. - Kumpulan sprite (
SpriteGroup) : update, render, dan peletakan kumpulan sprite ke suatu latar. - Tubrukan : register grup tubrukan, dan pendeteksian tubrukan.
Class PlayField inilah pendekatan ketiga atau yang terakhir dalam manajemen sprite dalam GTGE.
Inisialisasi PlayField
Inisialisasi PlayField sama seperti inisialisasi class SpriteGroup ataupun class Sprite :
class :: PlayField Syntax: public PlayField(); public void update(long elapsedTime); public void render(Graphics2D g); dimana : elapsedTime = waktu yang terlewat semenjak update terakhir nilai ini didapat dari Game class g = objek grafis tempat arena bermain digambar
Asosiasi Latar ke Arena Bermain
Untuk mengasosiasikan arena bermain dengan suatu latar, sama juga seperti pada SpriteGroup dengan menggunakan PlayField.setBackground(Background) :
class :: PlayField Syntax: public void setBackground(Background backgr); dimana : backgr = latar arena bermain
Menambah Grup ke dalam Arena Bermain
Untuk menambah kumpulan sprite atau SpriteGroup ke arena bermain gunakan fungsi PlayField.addGroup(SpriteGroup) :
class :: PlayField Syntax: public SpriteGroup addGroup(SpriteGroup group); dimana : group = SpriteGroup yang akan dimasukkan ke arena bermain SpriteGroup = referensi dari grup yang dimasukkan ke arena bermain tersebut Misal: menambah grup player ke arena bermain SpriteGroup PLAYER_GROUP; PlayField playfield; PLAYER_GROUP = new SpriteGroup("Player Group"); playfield.addGroup(PLAYER_GROUP); atau dalam 1 langkah : SpriteGroup PLAYER_GROUP; PlayField playfield; PLAYER_GROUP = playfield.addGroup(new SpriteGroup("Player Group"));
Register Pendeteksian Tubrukan
PlayField juga mengotomatisasi pendeteksian tubrukan, cukup registerkan jenis tubrukan dan grup-grup yang akan dideteksi dengan menggunakan PlayField.addCollisionGroup(SpriteGroup, SpriteGroup, CollisionManager) :
class :: PlayField Syntax: public void addCollisionGroup(SpriteGroup group1, SpriteGroup group2, CollisionManager collisionGroup); dimana : group1 = grup 1 yang akan diregister untuk sistem tubrukan ini group2 = grup 2 yang akan diregister untuk sistem tubrukan ini collisionGroup = jenis dan implementasi tubrukan yang diinginkan Misal: meregister tubrukan antara grup tembakan player dengan grup musuh PlayField playfield; SpriteGroup PLAYER_SHOT_GROUP, ENEMY_GROUP; CollisionManager collisionType; playfield.addCollisionGroup(PLAYER_SHOT_GROUP, ENEMY_GROUP, collisionType);
Contoh Lengkap
Tutorial11.java [view online]Contoh penggunaan class PlayField untuk menangani otomatisasi latar, kumpulan sprite, dan deteksi tubrukan :
file :: YourGame.java // JFC import java.awt.*; // GTGE import com.golden.gamedev.*; import com.golden.gamedev.object.*; import com.golden.gamedev.object.background.*; import com.golden.gamedev.object.collision.*; public class YourGame extends Game { PlayField playfield; Background background; SpriteGroup PLAYER_GROUP, ENEMY_GROUP; public void initResources() { background = new ColorBackground(Color.BLUE, 1024, 768); playfield = new PlayField(background); PLAYER_GROUP = playfield.addGroup(new SpriteGroup("Player Group")); ENEMY_GROUP = playfield.addGroup(new SpriteGroup("Enemy Group")); PLAYER_GROUP.add(new Sprite(getImage("player.png"))); PLAYER_GROUP.add(new Sprite(getImage("player.png"))); playfield.addCollisionGroup(PLAYER_GROUP, ENEMY_GROUP, new PlayerEnemyCollision()); } public void update(long elapsedTime) { playfield.update(elapsedTime); } public void render(Graphics2D g) { playfield.render(g); } public static void main(String[] args) { GameLoader game = new GameLoader(); game.setup(new YourGame(), new Dimension(640,480), false); game.start(); } } class PlayerEnemyCollision extends BasicCollisionGroup { public void collided(Sprite s1, Sprite s2) { // make both sprites to vanish! s1.setActive(false); s2.setActive(false); } }Perhatikan : Latar dan sprite tidak perlu diupdate dan dirender lagi,
PlayField telah otomatis mengupdate dan merender latar (Background) serta seluruh kumpulan sprite (SpriteGroup) yang ada di dalam arena bermain, serta pendeteksian tubrukan juga tidak perlu dipanggil lagi, PlayField otomatis mengecek tubrukan dari seluruh tubrukan yang diregisterkan ke arena bermain.
Persamaan Dari Setiap Pendekatan Manajemen Sprite
Persamaan dari objek-objek game (Sprite, SpriteGroup, PlayField) adalah bahwa setiap objek game tersebut sama-sama tetap harus melakukan 3 hal, yakni :
- Meletakkannya pada suatu latar;
- Mengupdate; dan
- Merendernya ke layar.
Sprite, sprite-sprite mesti diletakkan di latar, diupdate, dan dirender satu per satu.Pada level
SpriteGroup, sprite-sprite tersebut dimasukkan ke dalam grup, lalu grupnya saja yang mesti diletakkan di latar, diupdate, dan dirender.Dan terakhir pada level
PlayField, grup-grup sprite tersebut dimasukkan ke suatu arena bermain yang telah memiliki latar dan hanya arena bermain atau playfield ini saja yang mesti diupdate dan dirender.