Golden T Studios - GTGE Tutorial 11

Tutorial 11

SAATNYA BERMAIN!

PlayField.java [view online]
Bab ini menjelaskan bagaimana sprite, latar, dan lain-lain dikumpulkan di dalam suatu arena bermain dan mengotomatisasi permainan.
Tujuan : Mengerti kegunaan dan cara menggunakan arena bermain (playfield).
collapse/expand

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.
Pada level 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.
sprite, sprite group, playfield


Kesimpulan :

  • Arena bermain atau PlayField digunakan untuk mengumpulkan dan mengotomisasi semua objek permainan.
  • Hal-hal yang diotomatisasi/ditangani oleh arena bermain adalah latar, kumpulan sprite, dan pendeteksian tubrukan.
  • Sama halnya dengan Sprite dan SpriteGroup, arena bermain atau PlayField perlu untuk diupdate dan dirender.
  • Untuk mengasosiasi suatu latar ke dalam arena bermain digunakan fungsi PlayField.setBackground(Background).
  • Untuk menambah SpriteGroup ke dalam arena bermain digunakan fungsi PlayField.addGroup(SpriteGroup).
  • Untuk meregister pendeteksian tubrukan (CollisionManager) ke dalam arena bermain digunakan fungsi PlayField.addCollisionGroup(SpriteGroup, SpriteGroup, CollisionManager).

Referensi : PlayField class

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