По сути, я пытаюсь создать игру-стрелялку, в которой изображение случайным образом появляется на панели, и после щелчка по нему счет обновляется, а pi c меняет положение, однако я хочу разместить другое изображение сверху мишени после стрельбы (щелчка) забрызгал помидор. Для этого я создал оператор if в компоненте рисования, чтобы проверить, должно ли отображаться изображение или нет, затем в прослушивателе, щелкнувшем мышью, я меняю статус tom_visible на true, перерисовываю, жду, меняю на false и снова перерисовываю, но видимо, это не работает. Есть ли способ заставить это работать или какой-либо другой способ сделать это? Вот он код: Спасибо
public Gameplay(){
addMouseListener(this);
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
timer = new Timer(delay, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
count++;
}
});
timer.setInitialDelay(0);
timer.start();
}
@Override
public void paintComponent(Graphics g){
if (!play && !win){
g.setFont(new Font("serif", Font.BOLD, 20));
g.drawString("Press Enter to Start", 265,300);
}
g.setFont(new Font("serif", Font.BOLD, 20));
g.drawString("Kills: "+ score, 600,40);
g.drawString("Level: "+level, 40, 40);
if (score >=maxScore){
play = false;
win = true;
level++;
squareWidth -= 10;
squareHeight -= 10;
a = (int)(Math.random() * (600/squareWidth));
b = (int)(Math.random() * (600/squareHeight));
timer.stop();
g.setColor(Color.black);
g.setFont(new Font("serif", Font.BOLD, 20));
g.drawString("Time: " + (double)count/100, 310,300);
g.drawString("Press Enter to play again: ", 250, 350);
}
//Target image
if (play){
BufferedImage villano_image = null;
try {
villano_image = ImageIO.read(new File("/Users/davidarias/IdeaProjects/Shoot/src/Villano.png"));
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(villano_image.getScaledInstance(squareWidth,squareHeight,Image.SCALE_DEFAULT),a*squareWidth, b*squareHeight, null);
}
if (tomato_visible){
BufferedImage tomato_img = null;
try {
tomato_img = ImageIO.read(new File("/Users/davidarias/IdeaProjects/Shoot/src/tomato.png"));
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(tomato_img.getScaledInstance(squareWidth,squareHeight,Image.SCALE_DEFAULT),shot.x, shot.y, null);
}
//Sets the new cursor with pointer
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image cursor_image = toolkit.getImage("/Users/davidarias/IdeaProjects/Shoot/src/gameplay pointer.png");
Cursor c = toolkit.createCustomCursor(cursor_image.getScaledInstance(25,25, Image.SCALE_SMOOTH) , new Point(this.getX()+12,
this.getY()+12), "img");
this.setCursor (c);
}
@Override
public void actionPerformed(ActionEvent e) {
timer.start();
repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
shot = new Point(e.getX(),e.getY());
hitBox = new Rectangle(a*squareWidth, b*squareHeight, squareWidth, squareHeight);
if(play){
if (score < maxScore){
if (hitBox.contains(shot)){
score++;
a = (int)(Math.random() * (600/squareHeight));
b = (int)(Math.random() * (600/squareWidth));
}
tomato_visible = true;
repaint();
try {
TimeUnit.MILLISECONDS.sleep(300);
} catch (InterruptedException interruptedException) {
interruptedException.printStackTrace();
}
tomato_visible = false;
}
}
repaint();
}