2012-11-21 4 views
0

Je fais un jeu où vous passez la souris sur un clic de la cible (tirer). Je voudrais savoir comment savoir si un BufferedImage a été cliqué.Pour savoir si BufferedImage a été cliqué

J'ai un code comme ceci:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.Graphics.*; 
import java.awt.Graphics2D.*; 
import javax.imageio.*; 
import java.io.*; 

public class icon_clicked { 

public static int mouseX; 
public static int mouseY; 
public static BufferedImage background; 
public static BufferedImage cursor; 
public static BufferedImage target; 

public static void main(String[] args) { 

try { 
background = ImageIO.read(new File("background.png")); 
} 
catch(Exception exc) { 
System.err.println("An error has occurred. Error: "+exc); 
} 

try { 
cursor = ImageIO.read(new File("cursor.png")); 
} 
catch(Exception exc) { 
System.err.println("An error has occurred. Error: "+exc); 
} 

try { 
target = ImageIO.read(new File("target.png")); 
} 
catch(Exception exc) { 
System.err.println("An error has occurred. Error: "+exc); 
} 

JFrame frame = new JFrame("Shooting Range"); 
frame.setSize(500, 500); 
frame.setVisible(true); 
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
frame.setLocationRelativeTo(null); 
frame.setAlwaysOnTop(false); 
frame.setResizable(false); 

frame.addMouseMotionListener(new MouseAdapter() { 
@Override 
public void mouseMoved(MouseEvent me) { 
mouseX = me.getX(); 
mouseY = me.getY(); 
} 
}); 

frame.addMouseListener(new MouseAdapter() { 
@Override 
public void mouseClicked(MouseEvent me) { 
//Solution Code goes here 
} 
}); 


JPanel panel = new JPanel() { 
public void paintComponent(Graphics g) { 

Graphics2D g2 = (Graphics2D) g; 
g2.drawImage(background, 0, 0, null); 
g2.drawImage(cursor, mouseX, mouseY, null); 
g2.drawImage(target, 250, 250, null); 

} 
}; 

frame.add(panel); 

    }; 
} 

je pensais il y avait un clic dans la zone où l'icône était. Mais je n'arrive pas à comprendre. Quelqu'un pourrait-il me donner une solution? Merci.

+0

Vous devez appeler super.paitComponent sinon vous souffrez d'artefacts de peinture. Vous devriez également utiliser 'this' comme paramètre d'observateur d'image pour drawImage – MadProgrammer

Répondre

2

Vous pouvez vérifier si le point sur lequel vous avez cliqué se trouve dans le rectangle de l'image.

public void mouseClicked(MouseEvent me) { 
    Point clicked = me.getPoint(); 
    Rectangle bounds = new Rectangle(250, 250, target.getWidth(), target.getHeight()); 
    if (bounds.contains(clicked)) { 
     // target image was clicked 
    } 
} 
+0

Également possible pour tout 'java.awt.Shape'. – trashgod

+0

Merci pour la solution! –

Questions connexes