Membuat Game Android Avoider Menggunakan Framework Libgdx – Part #3 Base Entity and Multiple enemies

Part #1 – Introduction
Part #2 – Movement
Part #3 – Base Entity and Multiple Enemies

hehe buat part 3 ini kayanya judulnya panjang banget yah :D
saya bikin jadi satu saja karena sebenarnya masing – masing bagian ga terlalu panjang dan bisa dibahas sekaligus.
so let’s get it done!

Base Entity

Apa itu base entity dan mengapa saya membuat yang seperti ini?
saya harap anda sudah memahami Object Oriented Programming (OOP). jadi Base Entity ini adalah kelas induk dari seluruh entity yang ada di dalam game. Tujuannya adalah masing – masing entity dapat saling berbagi common attribute.

mari kita buat kelas Base entity nya.
buatlah kelas baru dengan nama BaseEntity , lalu isikan dengan tiga attribute seperti di bawah ini


package com.gdi.avoider;

import com.badlogic.gdx.math.Vector2;

public class BaseEntity {

    public final Vector2 pos = new Vector2();   //posisi
    public final Vector2 vel = new Vector2();  //kecepatan
    public boolean visible = true;    //penanda render, bila true maka object akan dirender ke layar
}

Dengan adanya BaseEntity ini maka kita dapat memisahkan data logic dengan data render.
segala macam data seperti posisi , kecepatan , logika update dan segala macam hal yang tidak berhubungan dengan rendering process dipisahkan dan ditaruh ke dalam kelas yang diturunkan dari BaseEntity ini.

mari kita ambil contoh dari karakter android.

pertama buatlah kelas AndroidEntity yang meng-extend kelas BaseEntity


package com.gdi.avoider;

public class AndroidEntity extends BaseEntity {

    public AndroidEntity() {
    }
}

lalu kita buat instance dari AndroidEntity ini di kelas GameScreen.


public class GameScreen extends BaseScreen implements InputProcessor {
    AndroidEntity androidEntity;
    public GameScreen(Avoider avoider) {
        super(avoider);
        //.....
        //android.setPosition(100, 100);         androidEntity = new AndroidEntity();
        androidEntity.pos.set(100, 100); //     }
}

kemudian di bagian yang menerima input dan mengubah posisi android menjadi sama dengan posisi mouse/touch juga harus diubah. lihat di method touchDragged di bawah.


    @Override
    public boolean touchDragged(int x, int y, int pointer) {
        inputCamera.unproject(inputPos.set(x, y, 0));
        //dari ini
        //android.setPosition(inputPos.x - android.getWidth()/2, inputPos.y - android.getHeight()/2);
        //ubahlah menjadi seperti ini
        androidEntity.pos.set(inputPos.x, inputPos.y);
        return true;
    }

dan terakhir di method render, sekarang posisi dari sprite menggunakan posisi dari androidEntity sehingga perlu dilakukan sedikit pengaturan. dan juga ingat tentang yang saya bahas kemarin tentang origin dari gambar.


    @Override
    public void render(float delta) {
        super.render(delta);
        update(delta);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        Gdx.gl.glClearColor(255, 255, 255, 255);
        batch.begin();
         //write it like this.
        //it set the android sprite origin is in the middle of image
        android.setPosition(androidEntity.pos.x - android.getWidth()/2, androidEntity.pos.y - android.getHeight()/2);
        android.draw(batch);        //sprite has draw function inside
        //more code below...
        batch.end();
    }

coba jalankan hasilnya.
tapi tentu saja ga akan terlihat bedanya. hahaha. ini hanya untuk memudahkan pemisahan logika dan render saja.

coba lakukan hal yang sama dengan si Honeycomb ;)

monggo kalau mau pencet page 2 :D

fugogugo

undergraduate student at UGM, co-founder and Game Programmer at Amagine Interactive.

More Posts

Stop SOPA