Perubahan hanya dilakukan pada class Bounce. Class Ball tidak berubah. Perubahan akan ditandai dengan comment (keterangan).
Class Ball :
import java.awt.*;Class Bounce :
class Ball {
public float x, y, dx, dy;
private Color warna;
private int ukuran;
Ball(float x, float y, float dx, float dy, int ukuran, Color warna) {
this.x = x;
this.y = y;
this.dx = dx;
this.dy = dy;
this.warna = warna;
this.ukuran = ukuran;
}
public void pindah(Rectangle kotak) {
// mengubah koordinat bola
x += dx;
y += dy;
//collision detection dg sisi kiri
if (x < kotak.x && dx < 0) { dx = -dx; x -= 2 * (x - kotak.x); } //collision detection dg sisi kanan else if ((x + ukuran) > (kotak.x + kotak.width) && dx > 0) {
dx = -dx;
x -= 2 * ((x + ukuran) - (kotak.x + kotak.width));
}
//collision detection dg sisi atas
if (y < kotak.y && dy < 0) { dy = -dy; y -= 2 * (y - kotak.y); } //collision detection dg sisi bawah else if ((y + ukuran) > (kotak.y + kotak.height) && dy > 0) {
dy = -dy;
y -= 2 * ((y + ukuran) - (kotak.y + kotak.height));
}
}
public void lukis(Graphics g) {
g.setColor(warna);
g.fillOval((int) x, (int) y, ukuran, ukuran);
}
}
import java.awt.*;Class Bounce yang diubah menjadi Frame (AWT) (Untuk diubah menjadi JFrame ada beberapa tambahan perintah) :
import java.applet.Applet;
public class Bounce extends Applet implements Runnable {
private Image gambarLayar;
private Graphics layar;
private Thread mesin;
private boolean jalan = false;
private Rectangle kotak;
private Ball bola;
private int lebar, tinggi;
@Override
//otomatis jalan saat applet dimuat ke browser
public void init() {
lebar = size().width; //lebar sesuai lebar applet
tinggi = size().height; //tinggi sesuai tinggi applet
kotak = new Rectangle(lebar, tinggi); //membuat kotak sesuai ukuran applet
bola = new Ball(lebar / 3f, tinggi / 4f, 1.5f, 2.3f, 12, Color.blue); //membuat bola
}
@Override
//otomatis jalan setelah init() selesai
public synchronized void start() {
if (mesin == null || !mesin.isAlive()) {
jalan = true;
mesin = new Thread(this);
mesin.setPriority(Thread.MIN_PRIORITY + 1);
mesin.start();
}
}
//otomatis jalan saat thread dibuat
public void run() {
while (jalan) {
repaint(); //memanggil method update()
try {
mesin.sleep(1000 / 30); //pengatur jeda waktu (mempengaruhi kecepatan bola)
} catch (InterruptedException e) {
//kalau ada error
}
}
}
@Override
// otomatis dijalankan saat tampilan berubah
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
if (layar == null) {
gambarLayar = createImage(lebar, tinggi);
layar = gambarLayar.getGraphics();
}
// menggambar background
int x2 = lebar >> 1;
int y2 = tinggi >> 1;
layar.setColor(Color.gray);
layar.fillRect(0, 0, x2, y2);
layar.fillRect(x2, y2, lebar - x2, tinggi - y2);
layar.setColor(Color.white);
layar.fillRect(x2, 0, lebar - x2, tinggi - y2);
layar.fillRect(0, y2, x2, y2);
bola.pindah(kotak);
bola.lukis(layar);
g.drawImage(gambarLayar, 0, 0, null);
}
@Override
public synchronized void stop() {
jalan = false;
}
}
import java.awt.*;
//import java.applet.Applet;
//public class Bounce extends Applet implements Runnable {
public class Bounce extends Panel implements Runnable {
private Image gambarLayar;
private Graphics layar;
private Thread mesin;
private boolean jalan = false;
private Rectangle kotak;
private Ball bola;
private int lebar, tinggi;
private static int lbr = 500, tng = 500; //tambahan
//@Override
//otomatis jalan saat applet dimuat ke browser
public void init() {
//lebar = size().width; //lebar sesuai lebar applet
lebar = lbr;
//tinggi = size().height; //tinggi sesuai tinggi applet
tinggi = tng;
kotak = new Rectangle(lebar, tinggi); //membuat kotak sesuai ukuran applet
bola = new Ball(lebar / 3f, tinggi / 4f, 1.5f, 2.3f, 12, Color.blue); //membuat bola
//}
//@Override
//otomatis jalan setelah init() selesai
//public synchronized void start() {
if (mesin == null || !mesin.isAlive()) {
jalan = true;
mesin = new Thread(this);
mesin.setPriority(Thread.MIN_PRIORITY + 1);
mesin.start();
}
}
//otomatis jalan saat thread dibuat
public void run() {
while (jalan) {
repaint(); //memanggil method update()
try {
mesin.sleep(1000 / 100); //pengatur jeda waktu (mempengaruhi kecepatan bola)
} catch (InterruptedException e) {
//kalau ada error
}
}
}
@Override
// otomatis dijalankan saat tampilan berubah
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
if (layar == null) {
gambarLayar = createImage(lebar, tinggi);
layar = gambarLayar.getGraphics();
}
// menggambar background
int x2 = lebar >> 1;
int y2 = tinggi >> 1;
layar.setColor(Color.gray);
layar.fillRect(0, 0, x2, y2);
layar.fillRect(x2, y2, lebar - x2, tinggi - y2);
layar.setColor(Color.cyan);
layar.fillRect(x2, 0, lebar - x2, tinggi - y2);
layar.fillRect(0, y2, x2, y2);
bola.pindah(kotak);
bola.lukis(layar);
g.drawImage(gambarLayar, 0, 0, null);
}
//@Override
public synchronized void stop() {
jalan = false;
}
public static void main(String[] args) {
Frame f = new Frame();
f.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
;
});
Bounce ut = new Bounce();
ut.setSize(lbr, tng); //diubah
f.add(ut);
f.pack();
ut.init();
f.setSize(lbr + 8, tng + 34); //diubah
//f.show();
f.setVisible(true);
}
}
Dari contoh konversi perubahan Java applet menjadi Java non applet (Frame), perubahan yang dilakukan tidak terlalu banyak dan relatif mudah. Namun proses konversi akan menjadi sulit jika program Java applet bergantung pada HTML
Tidak ada komentar:
Posting Komentar