Selasa, 31 Mei 2011

Penggunaan Thread pada Mobile

Thread sering kita butuhkan dalam membuat program aplikasi/game nantinya. misalnya untuk menjalan operasi perhitungan skor game.
Kita buat 2 class, yang pertama class canvas untuk menggambar background , object, dan lain - lain, dan kedua class midlet untuk menjalankannya.

Inilah script class canvasnya :



import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class ThreadObjectCanvas extends GameCanvas implements Runnable{
    private boolean isPlay; // gambar akan berjalan apabila bernilai true
    private long delay; // di beri nilai konstanta
    private int currentX, currentY; // Pergerakan untuk koordinat 'X’ dan ‘Y'
    private int width; // untuk lebar screean
    private int height; // untuk tinggi screean
    private int x=0;
    private int sw=0;
    //Konstruktor dan inisialisasinya
    public ThreadObjectCanvas() {
        super(true);
        width = getWidth();
        height = getHeight();
        currentX = width / 2;
        currentY = height / 2;
        delay = 20;
    }
    // Method start dijalankan awal peggunaan thread dan di ulang-ulang
    public void start() {
        isPlay = true;
        Thread t = new Thread(this);
        t.start();
    }
    public void stop() {
        isPlay = false;
    }
    // method run abstrak dari Runnable Mejalankan pertamakali pada graphics
    public void run() {
        Graphics g = getGraphics();
        while (isPlay == true) {
            x++;
            if(x<-120) {
                x=0;
            }else{
                x=x-5;
            }
            sw=1-sw;
            drawScreen(g);
            try { Thread.sleep(delay); }
            catch (InterruptedException ie) { }
        }
    }
    // Method drawScreen untuk menggambar Graphics
    private void drawScreen(Graphics g) {
        try {
            g.setColor(255,255,255);
            g.fillRect(0,0,getWidth(),getHeight());
            Image image = Image.createImage("/gbr-bg.png");
            g.drawImage(image, x, (getHeight()-image.getHeight())/2,
                    Graphics.TOP | Graphics.LEFT);
            String oby="";
            if(sw==0) {oby="/obyek1.PNG";
            }else{oby="/obyek2.PNG";
            }
            Image image2 = Image.createImage(oby);
            g.drawImage(image2, 40, (getHeight()-image.getHeight())/2,Graphics.TOP | Graphics.LEFT);
        }catch(Exception e){ }
        flushGraphics();
    }
}

dan ini script class midletnya :

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class MidletThreadObject extends MIDlet {
    private Display display;
    private ThreadObjectCanvas threadCanvas = new ThreadObjectCanvas();

    public void startApp() {
        display = Display.getDisplay(this);
        threadCanvas.start();
        display.setCurrent(threadCanvas);
    }
    public Display getDisplay() {
        return display;
    }

    public void pauseApp() {
    }

   public void destroyApp(boolean unconditional) {
       exit();
   }
   public void exit() {
       threadCanvas.stop();
       System.gc();
       notifyDestroyed();
   }
}

Tampilannya akan seperti ini :


Pada gambar di atas seakan - akan objectnya yang bergerak , padahal backgroundnya yang bergerak.

Tidak ada komentar:

Posting Komentar