【发布时间】:2014-03-31 16:26:26
【问题描述】:
关于这个基本碰撞检测的短视频:
https://www.youtube.com/watch?v=ptqhnmP8FY0&list=PL6E90696571998DC2
谁能告诉我为什么上边界需要是球的大小?我认为从左上角开始绘制一个椭圆形的边界矩形。如果是这种情况,那么 y==0 似乎是上限,但显然不是这样。
总结问题:如果边界三角形从左上角开始,为什么上边界是 20 而不是 0。
代码如下:
public class JavaGame extends JFrame {
int x,y,sizeX = 350,sizeY=350;
//boolean erase = false;
private Image dbImage;
private Graphics dbg;
public class AL extends KeyAdapter{
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
if (keyCode == e.VK_LEFT){
if(x<= 0)
x=0;
else
x-=5;
}
if (keyCode == e.VK_RIGHT){
if(x==sizeX-20)
x=sizeX-20;
else
x+=5;
}if (keyCode == e.VK_UP){
if(y==20)
y=20;
else
y-=5;
}if (keyCode == e.VK_DOWN){
if(y==sizeY-20)
y=sizeY-20;
else
y+=5;
}
/*if (keyCode == e.VK_S){
erase = true;
}*/
}
public void keyReleased(KeyEvent e){
}
}
public JavaGame(){
addKeyListener(new AL());
x=y=150;
setTitle("Java Game");
setBackground(Color.WHITE);
setSize(sizeX,sizeY);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g){
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g){
g.fillOval(x, y, 20, 20);
/*if(erase){
g.setColor(Color.WHITE);
g.fillRect(0, 0, 500, 500);
erase = false;
}*/
repaint();
}
public static void main(String[] args) {
new JavaGame();
}
}
【问题讨论】: