有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing Java方法应该检查图形是否不工作

我的“检查触摸”方法不起作用。假设它改变了圆的位置,并在正方形和圆接触时给你一个点。当它们接触时,它会通过检查位置是否足够靠近来感知。程序的其余部分运行平稳。它有一个与箭头一起移动的正方形

import java.awt.Graphics;

public class RunPaintGUI extends JFrame implements KeyListener{
int x = 30;
int y = 30;
Random randomgenerator = new Random();
int a = randomgenerator.nextInt(1220);
int b = randomgenerator.nextInt(700);
  public static void main(String[] args){
    RunPaintGUI RunPaintGUI = new RunPaintGUI();}

public RunPaintGUI(){
  this.setSize(1275, 775);
this.setResizable(false);
this.setVisible(true);
this.setTitle("game")
this.addKeyListener(this);
}

public void paint(Graphics g){
  super.paint(g);
  g.fill3DRect(x,y, 60, 60, true);
  g.fillOval(a, b, 50, 50);
  g.drawString("score: " + score, 600, 50);

 }
public void checkiftouching(){
   if ((a - x) < 70){
      if ((a -x) > -70){
         if ((b - y) < 70){
            if ((b - y) > -70){
          System.out.println("you win");
          a = randomgenerator.nextInt(1220);
          b = randomgenerator.nextInt(720);
          repaint();
          score = score + 1;
}}}}}
  public void keyPressed(KeyEvent e) {
     if (e.getKeyCode() == KeyEvent.VK_LEFT){
       x = x - 10;
       repaint();
     else if (e.getKeyCode() == KeyEvent.VK_RIGHT){
       x = x + 10;
       repaint();
     else if (e.getKeyCode() == KeyEvent.VK_UP){
       y = y - 10;
       repaint();
     else if (e.getKeyCode() == KeyEvent.VK_Left){
       y = y + 10;
       repaint();
 }
 }

@Override
public void keyTyped(KeyEvent e) {
     // TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e {
     // TODO Auto-generated method stub
}

共 (1) 个答案

  1. # 1 楼答案

    听起来你需要一个智能手机在游戏中常用于检测碰撞的hitbox可以在您的场景中使用。hitbox只是一个矩形,你不画它,但仍然跟踪它的位置。你应该用一个Rectangle作为一个点击框。如果你想用椭圆来表示你的圆环,尽管你可以用Ellipse2D。虽然如果你这样做,你将不得不使用Rectangle2D

    Rectangle hitbox = new Rectangle(x,y,width,height);
    //...
     if (e.getKeyCode() == KeyEvent.VK_LEFT){
       x = x - 10;
       hitbox.x = x;
       repaint();
    // and so on for your various key events
    

    你的checkiftouching()方法在hitbox中变得简单多了

     if (hitbox1.intersects(hitbox)) {
          System.out.println("you win");
          a = randomgenerator.nextInt(1220);
          b = randomgenerator.nextInt(720);
          repaint();
          score = score + 1;
    }
    

    如果选择使用Ellipse2D,则必须这样声明:

    Ellipse2D.Double hitbox = new Ellipse2D.Double(x,y,width,height);
    

    然后设置x坐标:

    hitbox.setFrame(newXCoordinate, hitbox.getY(), hitbox.getWidth(), hitbox.getHeight());
    

    或者y坐标:

    hitbox.setFrame(hitbox.getX(), newYCoordinate, hitbox.getWidth(), hitbox.getHeight());