Hampir semua komponen grafis 2 dimensi Java terletak dalam package java.awt dan javax.swing. Bahkan untuk event dari mouse dan keyboard pun terletak dalam package java.awt.event. Sedangkan untuk threading, terletak pada package java lang yang otomatis digunakan oleh seluruh program Java.
1.Sebelum memulai membuat program, Anda harus mendeklerasikan library apa saja yang dipakai dalm program Anda, melalui, statement import yang ditulis di luar deklarasi class public. Berikut ini beberapa library yang dibutuhkan dalam dasar pembuatan animasi Java.
.
import Java.awt.Dimensions;
import Java.awt.Graphics;
import Java.awt.Graphics2D;
import Java.awt.event.MouseAdapter;
import Java.awt.event.MouseEvent;
import Java.awt.event.BufferedImage;
import Java.awt.io.IOException;
import Java.imageio.ImageIO;
import Java.swig.JPanel;
2.Dalam animasi, hal paling penting adalah Container dari animasi tersebut. Container bisa diasumsikan sebagai kanvas tempat animasi tersebut ditampilkan. Ada banyak cara menampilkan gambar dengan Java, antara lain dengan class java. Awt.Panel, javax.swing.Jpanel, java.awt.Canvas, dan beberapa class lainnya. Namun, pada umumnya, konsep pemakaiannya sama saja. Untuk membuat bidang gambar sendiri, Anda cukup membuat class baru turunan dari salah satu class di atas. Simpan dengna nama file PanelClickable.java.
.public class PanelClickable extends JPanel {
public PanelClickable() {
//mengatur ukuran
setPreferredSize(new Dimension(400, 300));
}
@Override
protected voide paintComponent (Graphics g) {
super.paintComponent(g);
// tempat penggambaran
}
}
3.Karena tujuan utamanya adalah membuat media penggambaran sendiri, maka method paintComponent (Graphics g) harus di-override. Maksudnya adalah agar class tersebut melakukan penggambaran sesuai dengan program tersebut, Anda bisa membuat main program sederhana dengan menggunakan Jframe. Jika tidak muncul error dan jendela tampil tepat di tengah layar, langkah berikutnya siap dikerjakan.
import javax.swing.JFrame;
public class Demo {
public static coid main(String[] args) {
JFrame frame = new JFrame ("Demo animasi");
frame.add(new PanelClickable());
frame.pack();
frame.setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
4.Siapkan class untuk objek yang akan digambar. Contoh sederhananya adalah membuat class Ball yang merepresentasikan sebuah bola. Pada pembuatan sebenarnya, property dan method harus dibuat sedemikian rupa, agar dapat benar-benar merepresentasikan perilaku objek yang sesungguhnya.
class Ball {
public BufferedImage image;
public int x, y;
public int nextX, nextY;
public Ball(int x, int y) {
this.x = x;
this.y = y;
nextX = x;
nextY = y;
try {
image =ImageIO.read (getClass ().
getResource ("ball.png"))'
} catch (IOException ex) {}
}
public void drawBall (Graphics2D gd) {
gd.drawImage(image, x, y, null);
}
public void update() {
if (x != nextX) {
x = x> nextX ? x - 1 : x + 1;
}
if (y != nextY) {
y = y> nextX ? y - 1 : y + 1;
}
}
}
Pembuatannya dapat dilakukan sebagai class tersendiri, atau inner class yang ada di dalam class public. Terdapat 2 pasang variabel yang merepresentasikan koordinat. Pasanan pertama adlaah koordinat asli dari bola, sedangkan pasangan kedua adlaah koordinat tujuan pergerakan bola.
Constructor akan mendefinisikan letak awal bola,s erta mengambil gambar dari file “ball.png” menggunakan class ImageIO. Class ImageIO merupakan class bantu yang berfungsu untuk melakukan input/output file bertipe image. Karena merupakan class input output, maka ImageIO akan “throws” IOException jika terjadi suatu error.
Metode drawBall adalah method yang diguanka untuk menggambar bola tersebut. Perhatikan bahwa parameter yang digunakan adalah Graphics2D, yaitu class yang berfungsi untuk melakukan penggambaran pada kanvas (lihat kembali methode painComponent pada Jpanel). Method update () nantinya akan dipanggil pada loop animasi, yang akan menggerakkan bola menuju koordinat tujuan.
5.Tahap berikutnya adalah membuat inner class yang akan mendeteksi event dari mouse. Class tersebut cukup extend class MouseAdapter yang mengimplementasikan interface MouseListener. Sebagai langkah awal yang sederhana, Anda cukup meng-override methode mouseClicked saja. Event tersebut akan mengubah nilai koordinat tujuan bola.
class ClickDetector extends MouseAdapter {
PanelClickable parent;
publick ClickDetector(PanelClickable
parent) (
this.parent = parent;
}
@Overriede
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
parent.ball.nextX = e.getX();
parent.ball.nextY = e.getY();
}
}
6.Tambahkan kedua inner clas yang telah dibuat sebelumnya ke dalam class PanelClickable. Cara paling mudah adalah mendeklarasikannya dalam constructor.
public class PanelClickable extends JPanel {
Ball ball;
public panelClickable() {
setPrefferedSize(new Dimension (400, 300);
addMouseListener(new ClickDetector (this));
ball = new Ball (0, 0);
}
// kode lainnya
7.Tahap terakhir adalah membuat naimasi untuk kanvas tersebut. Konsep dari animasi adalam membuat thread yang berbeda. Maksud dari thread yang berbeda adlaah membuat suatu garis proses baru sehingga proses animasi akan berbeda dari proses thread untuk program utama. Konsep ini dikenal dengan nama multithreading. Dalam Java, multithreading dapat dilakukan dengan cara membuat object thread baru. Anda bisa membuatnya secara sederhana dalam constructor PanelClickable.
Thread t = new Thread(new Runnabe() {
public void run() {
while(true) {
ball.update();
repaint();
try {
Thread.sleep(15);
} catch (InterruptedException ex) {}while(true) {
}
}
});
t.start();
Perhatikan bahwa terdapat endless loop atau loop yang akan selalu berputar dengan cara membuat while (true). Pada baris awal akan melakukan pemanggilan pada method update () milik object ball. Setelah lokasi berubah, maka harus dilakukan pemanggilan methode repain () yang akan menggmbar ulang kanvas dengan nilai property yang baru tadi. Setelah itu, thread diberhentikan sementara selama 15 mildetik untuk memperlihatkan animasi secara cepat. Jika dihitung secara kasar, maka akan ada 1000/15 frame per detik, atau 66,6 penggambaran ulang setiap detiknya.
8.Program telah selesai, Anda bisa mencobanya dengan mengklik suatu area pada kanvas. Jika berjalan lancar, maka bola akan bergerak menutu titik yang Anda klik.
No comments:
Post a Comment