Praktek 4 Game Pimpong : Collision Detection

18.48 Diposting oleh Gunawan

Seperti janji saya pada praktek 3 : Menambahkan Image Menggunakan Sprite, kali ini saya akan mencoba Menggerakan gambar hasil praktek 3. Perhatikan gambar berikut :


Perhatikan gambar di atas, kita akan membuat 4 jalur pergerakan dari bola yaitu :

Jalur 0 bergerak ke atas miring ke kiri rumus :

X -- ( posisi X selalu di kurangi 1 sehingga bergerak ke kiri)

Y -- ( posisi Y selalu di kurangi 1 sehingga bergerak ke atas)

Karena kita mengurangi nilai x dan y bersamaan maka pergerakan ke atas miring ke kiri, lihat pada gambar arah pergerakan 0.

Jalur 1 bergerak ke atas miring ke kanan rumus :

X ++ ( posisi X selalu di kurangi 1 sehingga bergerak ke kanan)

Y -- ( posisi Y selalu di tambah 1 sehingga bergerak ke atas)

Karena kita menambah nilai x dan mengurangi nilai y bersamaan maka pergerakan ke atas miring ke kanan, lihat pada gambar arah pergerakan 1.

Jalur 2 bergerak ke bawah miring ke kanan rumus :

X ++ ( posisi X selalu di tambah 1 sehingga bergerak ke kanan)

Y ++ ( posisi Y selalu di tambah 1 sehingga bergerak ke bawah)

Karena kita menambah nilai x dan y bersamaan maka pergerakan ke bawah miring ke kanan, lihat pada gambar arah pergerakan 2.

Jalur 3 bergerak ke bawah miring ke kiri rumus :

X -- ( posisi X selalu di kurangi 1 sehingga bergerak ke kiri)

Y ++ ( posisi Y selalu di kurangi 1 sehingga bergerak ke bawah)

Karena kita mengurangi nilai x dan menambah nilai y bersamaan maka pergerakan ke bawah miring ke kiri, lihat pada gambar arah pergerakan 3

Langkah – Langkah yang perlu di lakukan :

  1. Penamaan Variabel atau pendifinisian Variabel
  2. Pembatasan arah pergerakan bola dengan mengimplementasikan fungsi logika

Penamaan Variabel

Misalnya nama variable untuk ke empat arah pergerakan bolla adalah ballDirection dengan nilai default = 1, maka kita harus mendifinisikan variable seperti berukut :

Private int ballDirection = 1;

Pembatasan Pergerakan

Pada kasus ini kita akan membatasi arah pergerakan bola sampai X bernilai 0 ( berada pada posisi 0) atau X bernilai getWidth() dan atau Y bernilai 0 (Y berada pada posisi 0) atau Y bernilai getHieght(), artinya saat bola menyentuh garis pinggir layar maka akan terpantul kembali.

Info :

getWidth() dan getHeight() merupakan pendifinisian dari nilai maksimal dari X dan Y.

Ok..kita langsung saja merubah methode mobeBall() pada class PongCanvas :

/* -------------------------------------

* Nama File : PongCanvas.java

* by Gunawan

* jagungodak@yahoo.com

*--------------------------------------

*/

import java.io.IOException;

import javax.microedition.lcdui.Graphics;

import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.game.GameCanvas;

import javax.microedition.lcdui.game.Sprite;

public class PongCanvas extends GameCanvas implements Runnable {

private int sleepTime=30;

private Image ballImg;

private Sprite ballSprite;

private int ballX = getWidth()/2;

private int ballY = getHeight()/2;

Private int ballDirection = 1;

private final static int ballXVel=3;

private final static int ballYVel=1;

public PongCanvas() {

super(false);

}

public void run(){

while(true){

updateScreen(getGraphics());

try{

Thread.sleep(sleepTime);

}catch(Exception ex){

}

}

}

public void start(){

try{

ballImg=Image.createImage("/face.png");

}catch(IOException ioex){

System.out.println("Kesalahan Pada Image"+ioex);

}

ballSprite=new Sprite(ballImg);

ballSprite.defineReferencePixel(2, 2);

ballSprite.setRefPixelPosition(ballX, ballY);

Thread runner=new Thread(this);

runner.start();

}

private void createBackground(Graphics g){

g.setColor(0x000000);

g.fillRect(0, 0, getWidth(), getHeight());

}

private void updateScreen(Graphics g){

createBackground(g);

moveBall;

ballSprite.setRefPixelPosition(ballX , ballY);

ballSprite.paint(g);

flushGraphics();

}

public void moveBall(){

if (ballDirection == 0) {

ballX -= ballXVel;

ballY -= ballYVel;

} else if (ballDirection == 1) {

ballX += ballXVel;

ballY -= ballYVel;

} else if (ballDirection == 2) {

ballX += ballXVel;

ballY += ballYVel;

} else if (ballDirection == 3) {

ballX -= ballXVel;

ballY += ballYVel;

}

if (ballDirection == 0 && ballX <>

ballDirection = 1;

} else if (ballDirection == 0 && ballY <>

ballDirection = 3;

} else if (ballDirection == 1 && ballY <>

ballDirection = 2;

} else if (ballDirection == 1 && ballX > getWidth()) {

ballDirection = 0;

if (sleepTime > 5) sleepTime--;

} else if (ballDirection == 2 && ballY > getHeight()) {

ballDirection = 1;

} else if (ballDirection == 2 && ballX > getWidth()) {

ballDirection = 3;

if (sleepTime > 5) sleepTime--;

} else if (ballDirection == 3 && ballY > getHeight()) {

ballDirection = 0;

} else if (ballDirection == 3 && ballX <>

ballDirection = 2;

}

}

}

Untuk mengetes jangan lupa klik Build pada WTK2.5.


Selanjutnya kita akan menambahkan gambar yang akan di gerakan oleh user dan gambar yang di gerakan oleh hp sehingga terbentuk sebuah permainan. Silahkan ke Praktek 5 Game Pimpong : User Input

0 komentar:

Posting Komentar