Попытка заставить взрыв исчезнуть после пересечения лазера с прямоугольным объектом.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Попытка заставить взрыв исчезнуть после пересечения лазера с прямоугольным объектом.

Сообщение Anonymous »

Я пытаюсь создать небольшую игру на Java, в которой космический корабль стреляет лазером в прямоугольник, прямоугольник удаляется и появляется взрыв .png. Проблема, с которой я столкнулся, заключается в том, что я пытаюсь удалить анимацию взрыва через несколько секунд. (Не могу это сделать... анимация взрыва не удаляется).
Вот код, любая помощь очень ценится...
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class MovingObject extends JPanel implements KeyListener {

private ArrayList rects = new ArrayList();
private final int MAX_X = 400;
private final int SPEED = 7;
private BufferedImage image, image2, image3;
private boolean visible = false;

public MovingObject() {

rects.add(new Rectangle(20, 50, 128, 128));
rects.add(new Rectangle(80, 75, 32, 32));
rects.add(new Rectangle(130, 25, 128, 128));
rects.add(new Rectangle(200, 50, 50, 50));
rects.add(new Rectangle(300, 50, 50, 50));
try {
image = ImageIO.read(new File("C:/Users/hm_08/OneDrive/Desktop/ship3.png"));
image2 = ImageIO.read(new File("C:/Users/hm_08/OneDrive/Desktop/shot.png"));
image3 = ImageIO.read(new File("C:/Users/hm_08/OneDrive/Desktop/expl.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bgColor();

this.setFocusable(true);
addKeyListener(this);
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (visible) {
g.drawImage(image3, rects.get(2).x, 25, 128, 128, this);
}
g.fillRect(rects.get(3).x, 50, 50, 50);
if (!visible) {
g.drawImage(image2, rects.get(1).x, 75, 32, 32, this);
}
g.drawImage(image, rects.get(0).x, 20, 128, 128, this);
g.fillRect(300, 50, 50, 50);

}

private void bgColor() {
setBackground(Color.BLACK);
}

public static void main(String[] args) {
JFrame frame = new JFrame("Moving Object");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 500);
frame.add(new MovingObject());
frame.setVisible(true);
}

@Override
public void keyPressed(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_SPACE) {
Thread animationThread = new Thread(() -> {

while (rects.get(1).x < MAX_X) {
if (!rects.isEmpty()) {
rects.get(1).x += SPEED;
repaint();
if (rects.get(1).intersects(rects.get(3))) {
visible = !visible;
rects.remove(3);
repaint();
break;
}
removeKeyListener(this);
}

try {
Thread.sleep(50); // Delay for smooth movement
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});
animationThread.start();
}

}

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

}

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

}

}


Подробнее здесь: https://stackoverflow.com/questions/798 ... ngle-objec
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»