Part #1 – Introduction
Part #2 – Movement
Part #3 – Base Entity and Multiple Enemies
hehe buat part 3 ini kayanya judulnya panjang banget yah ![]()
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
Pingback: Membuat Game Android Avoider Menggunakan Framework Libgdx – Part #2 Movement « #IDdevblogaday
Pingback: Membuat Game Android Avoider Menggunakan Framework Libgdx – Part #1 Introduction « #IDdevblogaday