Kamis, 22 Januari 2015

CG[LWJGL0011] || Input Melalui Keyboard dan Mouse

Table of contents
LWJGL telah menyediakan class untuk menangani input melalui Keyboard dan Mouse. Class Keyboard dan Mouse akan menangani input yang diberikan melalui Keyboard dan mouse selanjutnya inputan itu akan dilempar (red: polled) dan akan ditangkap secara otomatis saat method Display.update() dipanggil.

Mouse
Posisi pointer mouse pada Display dapat diketahui dengan cara memanggil method berikut:

int x = Mouse.getX(); // will return the X coordinate on the Display.
int y = Mouse.getY(); // will return the Y coordinate on the Display.



titik (x,y)=(0,0) menyatakan titik sudut Display kiri bawah (dalam style OpenGL tradisional)

untuk menangani aksi klik pada mouse digunakan perintah Mouse.isButtonDown(int button). Method Mouse.isButtonDown(int button) akan mengembalikan nilai boolean dan akan bernilai true jika tombol di klik. Int button menyatakan nomor tombol mouse, nomor 0 untuk klik kiri dan nomor 1 untuk klik kanan. contoh:
boolean leftButtonDown = Mouse.isButtonDown(0); // is left mouse button down.
boolean rightButtonDown = Mouse.isButtonDown(1); // is right mouse button down.


Keyboard
Method Keyboard.isKeyDown(int key)akan mengembalikan nilai true jika tombol keyboard yang bersesuaian ditekan. contoh penggunaannya adalah sebagai berikut:
boolean keyDown = Keyboard.isKeyDown(Keyboard.KEY_X);  // is x key down.

Event Buffer
Penggunaan method isKeyDown(int key) maupun isButtonDown(int button) ada kalanya tidak bekerja sesuai apa yang diharapkan (terjadi kehilangan event akibat event yang gagal ditangkap saat update dipanggil) jika proses polling tidak dilaksanakan dengan cepat. Untuk mengatasi masalah ini dapat dilakukan menggunakan Event Buffer.Event buffer akan menangani semua input melalui keyboard maupun mouse yang diterima oleh Display. Event di dalam buffer ini akan diakses melalui method getEvent*(). Method next( ) digunakan untuk melakukan scroll ke event selanjutnya yang ada di dalam buffer. jika sebuah event telah discroll menggunakan method next( ) maka nilainya akan dikembalikan menjadi false.

sebagai contoh buffer keyboard dapat di-scroll dengan cara berikut:

while (Keyboard.next()) {
    // get event key here
}

selanjutnya untuk menagkap event keyboard dapat dilakukan dengan cara berikut:

if (Keyboard.getEventKey() == Keyboard.KEY_A) {
    System.out.println("A Key Event");
}

Untuk menandai kondisi on-press atau on-release pada keyboard kita dapat menggunakan method Keyboard.getEventState(). Method Keyboard.getEventState() akan bernilai true jika key sedang ditekan (on-press) dan akan bernilai false saat key dilepaskan (on-release). berikut ini contoh kondisi on-press dan on-release:

if (Keyboard.getEventKey() == Keyboard.KEY_A) {
    if (Keyboard.getEventKeyState()) {
        System.out.println("A Key Pressed");
    }
    else {
        System.out.println("A Key Released");
    }
}

contoh untuk menangkap event key-A:

while (Keyboard.next()) {
    if (Keyboard.getEventKeyState()) {
        if (Keyboard.getEventKey() == Keyboard.KEY_A) {
        System.out.println("A Key Pressed");
        }
    }
    else {
        if (Keyboard.getEventKey() == Keyboard.KEY_A) {
        System.out.println("A Key Released");
        }
    }
}

Berikut ini contoh lengkap Input pada Display:
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
 
public class TutorialLWJGL0011 {
 
    public void start() {
        try {
     Display.setDisplayMode(new DisplayMode(800, 600));
     Display.create();
 } catch (LWJGLException e) {
     e.printStackTrace();
     System.exit(0);
 }
 
 // init OpenGL here
 
        while (!Display.isCloseRequested()) {
 
     // render OpenGL here
 
     pollInput();
     Display.update();
 }
 
 Display.destroy();
    }
 
    public void pollInput() {
 
        if (Mouse.isButtonDown(0)) {
     int x = Mouse.getX();
     int y = Mouse.getY();
 
     System.out.println("MOUSE DOWN @ X: " + x + " Y: " + y);
 }
 
 if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
     System.out.println("SPACE KEY IS DOWN");
 }
 
 while (Keyboard.next()) {
     if (Keyboard.getEventKeyState()) {
         if (Keyboard.getEventKey() == Keyboard.KEY_A) {
      System.out.println("A Key Pressed");
  }
  if (Keyboard.getEventKey() == Keyboard.KEY_S) {
      System.out.println("S Key Pressed");
  }
  if (Keyboard.getEventKey() == Keyboard.KEY_D) {
      System.out.println("D Key Pressed");
  }
     } else {
         if (Keyboard.getEventKey() == Keyboard.KEY_A) {
      System.out.println("A Key Released");
         }
      if (Keyboard.getEventKey() == Keyboard.KEY_S) {
      System.out.println("S Key Released");
  }
  if (Keyboard.getEventKey() == Keyboard.KEY_D) {
      System.out.println("D Key Released");
  }
     }
 }
    }
 
    public static void main(String[] argv) {
        TutorialLWJGL0011 inputExample = new TutorialLWJGL0011();
 inputExample.start();
    }
}


Referensi:
http://wiki.lwjgl.org/

Tidak ada komentar:

Posting Komentar

/*SYNTAX HIGHLIGHTER*/