Sabtu, 02 Agustus 2014

LibGdx[3] => "Memasukkan Image pada Game"

Image sangat penting dalam sebuah game. Tanpa image, game akan terasa tidak hidup.

Berikut langkah-langkah memasukkan gambar pada game;

1. Buat aplikasi libgdx

2. Untuk diketahui, gambar harus ditempatkan pada folder asset pada project Android sehingga Anda harus membuat project Android untuk setiap project LibGdx. Aset-aset pada project Android ini akan didistribusikan oleh 'LibGdx core' pada project-project lainnya; Desktop, IOS, Web.

3. Masukkan variabel yang akan kita gunakan diantara class dan create

SpriteBatch spriteBatch;
BitmapFont font;
OrthographicCamera camera;


4. Buat objek tersebut
@Override
public void create () {
    spriteBatch = new SpriteBatch();
    font = new BitmapFont(true);
  
    texture = new Texture(Gdx.files.internal("badlogic.jpg"));
  

    camera = new OrthographicCamera();
    camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
  
}


5. Jangan lupa membuang resource yang ada pada memori atau method dispose.

@Override
public void dispose() {
    spriteBatch.dispose();
    font.dispose();
    texture.dispose();
}


6. Menempatkan gambar pada method render
@Override
public void render () {
    camera.update();
    spriteBatch.setProjectionMatrix(camera.combined);
 
    Gdx.gl.glClearColor(0, 0, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
  
    spriteBatch.begin();
    font.draw(spriteBatch, "Ini adalah tulisan", 100, 100);
    spriteBatch.draw(texture, 0, 0);
    spriteBatch.end();
}


7. Sama seperti render tulisan terdahulu, Anda akan mendapati bahwa gambar mempunyai posisi terbalik sehingga kita harus memberikan flip pada gambar tersebut.
Untuk membuat gambar tersebut flip, pada LibGdx, sebaiknya gambar tersebut dibungkus dulu dengan TextureRegion dan baru setelah itu di flip. Cara ini nantinya akan efektif karena kita akan menggunakan TextureRegion untuk mendeteksi area teksture terutama nantinya berhubungan dengan benturan (colision).

Berikut caranya; tambahkan objek TextureRegion pada bagian variabel, buat TextureRegion pada create dan tempatkan TextureRegion pada render.

Bagian Variabel
Texture texture;
TextureRegion textureRegion;

Bagian create method, jangan lupa tambahkan flip sumbu y untuk membuat gambar berdiri;
spriteBatch = new SpriteBatch();
font = new BitmapFont(true);
  
texture = new Texture(Gdx.files.internal("badlogic.jpg"));
textureRegion = new TextureRegion(texture);
textureRegion.flip(false, true); 
  
camera = new OrthographicCamera();
camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());


Bagian render method;
camera.update();
spriteBatch.setProjectionMatrix(camera.combined);
  
Gdx.gl.glClearColor(0, 0, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
  
spriteBatch.begin();
font.draw(spriteBatch, "Ini adalah tulisan", 100, 100);
spriteBatch.draw(textureRegion, 0, 0);
spriteBatch.end();


8. Dispose
spriteBatch.dispose();
font.dispose();
texture.dispose();
Untuk dispose, Anda tidak perlu men-dispose TextureRegion karena TextureRegion tidak memerlukan resource memori. Jika ingin men-dispose TextureRegion, Anda bisa menggunakan kode berikut;

textureRegion.getTexture().dispose();


Yang artinya sama dengan
texture.dispose();


9. Jalankan aplikasi
Anda akan melihat seperti gambar berikut



--------------------------------
Kode komplitnya terlihat seperti ini;
package com.mygdx.game;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;

public class MyGdxGame implements ApplicationListener {
    SpriteBatch spriteBatch;
    BitmapFont font;
    OrthographicCamera camera;
 
    Texture texture;
    TextureRegion textureRegion;
 
    @Override
    public void create () {
        spriteBatch = new SpriteBatch();
        font = new BitmapFont(true);
  
        texture = new Texture(Gdx.files.internal("badlogic.jpg"));
        textureRegion = new TextureRegion(texture);
        textureRegion.flip(false, true);
  
  
        camera = new OrthographicCamera();
        camera.setToOrtho(true, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    }

    @Override
    public void render () {
        camera.update();
        spriteBatch.setProjectionMatrix(camera.combined);
  
        Gdx.gl.glClearColor(0, 0, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
  
        spriteBatch.begin();
        font.draw(spriteBatch, "Ini adalah tulisan", 100, 100);
        spriteBatch.draw(textureRegion, 0, 0);
        spriteBatch.end();
    }

    @Override
    public void resize(int width, int height) {
       // TODO Auto-generated method stub
  
    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub
  
    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub
  
    }

    @Override
    public void dispose() {
        spriteBatch.dispose();
        font.dispose();
        texture.dispose();
    }
}