Part #1 – Introduction
Part #2 – Movement
Part #3 – Base Entity and Multiple Enemies
Yow halo semua 
kembali lagi di seri tutorial game android dengan menggunakan libgdx. ini adalah bagian kedua dari seluruh tutorial, apabila anda belum membaca yang pertama lebih baik selesaikan dulu membaca yang pertama .
Menggerakkan Musuh
Bergerak menurut fisika berarti sebuah benda melakukan perpindahan posisi. Di dalam game pun tidak berbeda, yang kita lihat dalam game sebagai Bergerak sebenarnya adalah posisi benda yang kita lihat telah berubah posisinya karena di update. jadi di dalam game Pergerakan adalah perubahan posisi sebuah benda (x,y,z) tiap satuan waktu/per update cycle
Untuk menggerakkan sebuah benda dibutuhkan kecepatan. Kecepatan adalah besarnya perpindahan posisi sebuah benda tiap satuan waktu/per update cycle . Kecepatan adalah berupa vector karena memiliki besar dan arah.
karena itulah kita akan membuat sebuah object bertipe Vector2 bernama vel (singkatan dari velocity)
public final Vector2 vel = new Vector2();
keyword final artinya menjadikan object tersebut sebagai sebuah constant object. apa artinya constant object akan saya jelaskan di kesempatan lain. just leave it be for now.
lalu di constructor mari kita set nilai vel tersebut menjadi (0,-50) yang artinya kecepatan x adalah 0 dan kecepatan y adalah -50 . sesuai dengan world koordinat libgdx dimana y positif adalah ke atas berarti kecepatan -50 di y adalah menuju ke bawah
public GameScreen(Avoider avoider) {
super(avoider);
//code here....
vel.set(0, -50);
}
selanjutnya untuk dapat menggerakkan sang musuh pada tiap update cycle sebelumnya kita buat dahulu satu method bernama update. di dalam method update ini perpindahan posisi musuh dilakukan
public void update(float delta) {
}
kemudian panggil method update tersebut di bagian paling atas method render()
@Override
public void render(float delta) {
super.render(delta);
update(delta);
.... //more code below
}
taruh kode untuk menggerakkan musuh di dalam method update tadi.
public void update(float delta) {
honeycomb.setPosition(honeycomb.getX() + vel.x * delta, honeycomb.getY() + vel.y * delta);
}
terlihat sedikit rumit , namun bila dirumuskan akan terlihat lebih mudah :
x = x + Vx * delta
y = y + Vy * delta
note: Vx * delta dan Vy * delta merupakan rumus interpolasi yang digunakan untuk menjaga agar pergerakan tetap terlihat smooth tidak terpengaruh oleh FPS game.
oiya perlu juga diatur posisi awal musuh agar dapat bergerak dari atas sampai ke bawah. tuliskan kode ini di dalam constructor
honeycomb.setPosition(100, 480);
tekan Run dan amati hasilnya!
full code
package com.gdi.avoider;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
public class GameScreen extends BaseScreen {
private SpriteBatch batch; //class that will handle 2D rendering task
private Texture androidTexture; //texture as image container
private Texture honeycombTexture;
private Sprite android; //sprite that will be used to draw texture
private Sprite honeycomb;
public final Vector2 vel = new Vector2();
public GameScreen(Avoider avoider) {
super(avoider);
batch = new SpriteBatch();
androidTexture = new Texture(Gdx.files.internal("android.png"));
honeycombTexture = new Texture(Gdx.files.internal("honeycomb.png"));
android = new Sprite(androidTexture, 0, 0, 100, 100);
honeycomb = new Sprite(honeycombTexture, 0, 0, 50, 50);
android.setPosition(100, 100);
honeycomb.setPosition(100, 480);
vel.set(0, -50);
}
//a texture defined must be disposed after unused or application closed
@Override
public void dispose() {
super.dispose();
androidTexture.dispose();
honeycombTexture.dispose();
}
@Override
public void render(float delta) {
super.render(delta);
update(delta);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); //clear screen
Gdx.gl.glClearColor(255, 255, 255, 255); //fill screen with white color
//batch drawing must began with batch.begin() and ended with batch.end()
batch.begin();
android.draw(batch); //sprite has draw function inside
honeycomb.draw(batch);
batch.end();
}
public void update(float delta) {
honeycomb.setPosition(honeycomb.getX() + vel.x * delta, honeycomb.getY() + vel.y * delta);
}
Next ,, menggerakkan karakter 
Click on next page please
undergraduate student at UGM,
co-founder and Game Programmer at Amagine Interactive.
More Posts