我正在Java建立游戏,我需要在游戏中的随机绘制图像中添加一个鼠标。
我使图像每x秒出现在随机位置,当我单击图像时,我想在记分板上添加1点。
我的随机图像添加代码是:
Random rand = new Random();
private int x = 0;
private int y = 0;
Timer timer = new Timer(700, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
x = rand.nextInt(400);
y = rand.nextInt(330);
repaint();
}
});
public void mousePressed (MouseEvent me) {
// Do something here
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(achtergrond, 0, 0, this.getWidth(), this.getHeight(), null);
//g.drawImage(muisje, 10, 10, null);
g.drawImage(muisje, x, y, 100, 100, this);
}
我在Google上看了看,发现我需要与鼠标事件添加一个新课程,但是如何添加?这还不够清楚,因为我只是Java的初学者。
您知道绘制图像的位置(x,y),并且您知道图像的大小(100,100),因此要告诉鼠标是否在图像中,您可以做一些事情这样:
public void mousePressed (MouseEvent me) {
int clickX = me.getXOnScreen();
int clickY = me.getYOnScreen();
if(clickX > x && clickX < x+100 && clickY > y && clickY < y+100) {
//the image has been clicked
}
repaint();
}
您正在写的课程可以实现MouseListener
。
编辑评论:
您不需要将代码链接到图像,您所编写的组件应实现鼠标侦听器,因为这要维护状态并知道绘制图像的位置。我将首先查看此链接并实现基本的MouseListener,以打印出鼠标的X和Y坐标。
http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html
示例组件实现鼠标侦听器:
public class TestComponent extends JComponent implements MouseListener {
public TestComponent() {
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
int clickedX = e.getX();
int clickedY = e.getY();
System.out.println("User Clicked: " + clickedX + ", " + clickedY);
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
}
您需要为Gamevenster
类注册MouseListener
。而不是让类实现MouseListener
,只需使用MouseAdapter
即可,您只需要实现方法mouseClicked
即可。因此,在您的构造函数中,您像这样
private JLabel scoreLabel = new JLabel("Score: " + score);
private int score = 0;
public Gamevenster() {
scoreLabel.setFont(new Font("impact", Font.PLAIN, 30));
scoreLabel.setForeground(Color.WHITE);
add(scoreLabel);
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
Point p = e.getPoint();
int clickX = (int)p.getX();
int clickY = (int)p.getY();
if(clickX > x && clickX < x + 100 && clickY > y && clickY < y + 100) {
score++;
scoreLabel.setText("Score: " + score);
}
}
});
}