There is a 2D game. It came to taking damage from a character, and I was faced with the problem of touching two pictures. Here there is a picture img and img7, how to make it so that when they touch, the variable healthInteger changes.

public class Main extends JPanel implements ActionListener{ JFrame frame; private int sco = 0; private long t = System.nanoTime(); Player player = new Player(); public Main(JFrame frame) { t1.start(); this.frame = frame; frame.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { player.keyPressed(e); } public void keyReleased(KeyEvent e) { player.keyReleased(e); } }); } Timer t1 = new Timer(20, this); public void paint(Graphics g) { Image img = new ImageIcon("resources/testImage.png").getImage(); Image img1 = new ImageIcon("resources/back.png").getImage(); Image img3 = new ImageIcon("resources/as.png").getImage(); Image img4 = new ImageIcon("resources/chest.png").getImage(); Image img5 = new ImageIcon("resources/helth.png").getImage(); g.drawImage(img1, player.getmapX(), player.getmapY(), 3476, 2168, null); g.drawImage(img, 263, 146, null); g.drawImage(img3, player.getBoxX(), player.getBoxY(), null); g.drawImage(img4, player.getChestX(), player.getChestY(), null); g.drawString("SCORE:" + sco, 10, 20); g.drawImage(img5, 10, 30, null); long tm = System.nanoTime() - t; double angle = tm/300000000.0; double sn = Math.sin(Math.sin(angle) * 0.3); double cs = Math.cos(Math.cos(angle) * 0.3); int x = (int) (200 * sn + 150); int y = (int) (200 * cs + 150); int healthInteger = 100; Image img6 = new ImageIcon("resources/evil.png").getImage(); g.drawImage(img6, x+ player.getmapX() + 800, y + player.getmapY() + 500, 40, 40, null); Image img7 = new ImageIcon("resources/evil.png").getImage(); g.drawImage(img7, x+ player.getmapX() + 500, y + player.getmapY() + 500, 40, 40, null); } public void actionPerformed(ActionEvent action) { repaint(); player.move(); } } 
  • I advise you to read about hitboxes. - user218976

1 answer 1

As I understand it, the images do not rotate, respectively, they can be represented as 2 rectangles. The awt.Rectangle class has a built-in method for defining boolean intersects (Rectangle r) intersections https://docs.oracle.com/javase/7/docs/api/java/awt/Rectangle.html Accordingly, it’s enough to create two rectangles for each of images by writing something like:

 Rectangle imgRect = new Rectangle(263, 146, img.getWidth(), img.getHeight()); Rectangle img7Rect = new Rectangle(x+ player.getmapX() + 500, y + player.getmapY() + 500, 40, 40); ... ... ... (В игровом цикле) if(imgRect.intersects(img7Rect)) { //ваша механика со здоровьем } 
  • You do not quite understand, but it works :) - CoffeeTorch