2013-02-03 127 views
-2

我創建了一個程序,繪製2圈在屏幕上,並使用鍵盤ASWD和箭頭鍵移動around..here是代碼圈的碰撞檢測

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 


class BallObject { 
    private int x; 
    private int y; 
    private int radius; 
BallObject() { 
    x=0; 
    y=0; 
    radius=0; 
} 

BallObject (int x,int y,int radius) { 
    this.x=x; 
    this.y=y; 
    this.radius=radius; 
} 
public void setX(int x) {this.x=x;} 
public void setY(int y) {this.y=y;} 
public void setRadius(int r) {radius=r;} 

public int getX() {return x;} 
public int getY() {return y;} 
public int getRadius() {return radius;} 

} 

class Ball extends JFrame implements KeyListener { 
BallObject ball1; 
BallObject ball2; 

Ball() { 
    super("Simple Ball"); 

    setSize(800,600); //set screen resolution 
    ball1 = new BallObject(getWidth()/2,getHeight()/2,20); 
    ball2 = new BallObject(40,40,20); 
    addKeyListener(this); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
} 

public void paint(Graphics g) { 
    Graphics2D g2d = (Graphics2D)g; 

    g2d.setColor(Color.BLACK); 
    g2d.fill(new Rectangle(0,0,800,600)); 

    //drawing ball1 
    g2d.setColor(Color.RED); 
    g2d.fillOval(ball1.getX(),ball1.getY(),ball1.getRadius()*2,ball1.getRadius()*2); 
    //drawing ball2 
    g2d.setColor(Color.GREEN); 
    g2d.fillOval(ball2.getX(),ball2.getY(),ball2.getRadius()*2,ball2.getRadius()*2); 
} 

public static void main (String args[]) { 
    new Ball(); 
} 

public void keyPressed(KeyEvent e) { 
    if(e.getKeyCode()==KeyEvent.VK_LEFT) 
     ball1.setX(ball1.getX()-2); 

    if(e.getKeyCode()==KeyEvent.VK_RIGHT) 
     ball1.setX(ball1.getX()+2); 

    if(e.getKeyCode()==KeyEvent.VK_UP) 
     ball1.setY(ball1.getY()-2); 

    if(e.getKeyCode()==KeyEvent.VK_DOWN) 
     ball1.setY(ball1.getY()+2); 


    if(e.getKeyCode()==KeyEvent.VK_A){ 
      ball2.setX(ball2.getX()-2); 
      //System.out.println("Hello"); 
    } 


    if(e.getKeyCode()==KeyEvent.VK_D) 
     ball2.setX(ball2.getX()+2); 

    if(e.getKeyCode()==KeyEvent.VK_W) 
     ball2.setY(ball2.getY()-2); 

    if(e.getKeyCode()==KeyEvent.VK_S) 
     ball2.setY(ball2.getY()+2); 


     repaint(); 
} 


      //redraw the screen to show the updated ball location 
public void keyTyped(KeyEvent e) {} 
public void keyReleased(KeyEvent e) {} 

} 

現在我需要測試衝突..一旦兩個球相互接觸,它會顯示一條消息「COLLISION DETECTED」..請幫助...

+1

也許GameDev的問題? – maffo

+1

一個球不是一個圓,它是一個球體,碰撞公式是不同的 –

+0

你也應該在swing應用中重寫'paintComponent',而不是'paint'。 –

回答

2

是不是簡單:如果兩個中心點的距離小於或等於半徑,那麼就有碰撞?

+0

我需要這個編碼...我是java的新手...請幫助.. –

+0

@OngPek如果你自己寫這個代碼,那麼你可以很好地計算兩點之間的距離並做一個比較。我們無法爲您編寫代碼。 – mostruash

+0

@OngPek只是非常簡單的邏輯或數學運算。 – shuangwhywhy