Java 圆碰撞检测
我已经创建了一个程序,在屏幕上画两个圆圈,并使用键盘ASWD和箭头键移动。下面是代码Java 圆碰撞检测,java,Java,我已经创建了一个程序,在屏幕上画两个圆圈,并使用键盘ASWD和箭头键移动。下面是代码 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; } BallObje
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) {}
}
现在我需要测试碰撞。一旦两个球相互接触。它将显示一条消息“碰撞检测到”。请帮助…这不是很简单:如果两个中心点的距离小于或等于半径之和,则存在碰撞吗?可能是GameDev的问题?球不是圆,这是一个球体,碰撞公式是不同的,所以你应该在swing应用程序中覆盖
paintComponent
,而不是paint
。检查这个答案@OngPek如果你自己编写了这个代码,那么你可以很好地计算两点之间的距离并进行比较。我们无法为您编写代码。@OngPek只是非常简单的逻辑或数学运算。这个代码是我的讲师给我的。他让我在其中添加碰撞检测功能。他只是教我碰撞检测的公式。我不知道如何添加到其中=(我知道要计算的公式..但我不知道如何应用到java中..请帮助=(