Я пытаюсь создать небольшую игру на 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
}
}
Обновлено добавлением таймера для стрельбы лазером, но он по-прежнему работает так же, как и раньше, с индексом 3 за пределами границ для длины 3 (обновленный код приведен ниже:
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 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) {
Timer timer = new Timer(25, e -> {
if (!rects.isEmpty()) {
rects.get(1).x += SPEED;
repaint();
System.out.println(rects.size());
if (rects.get(1).intersects(rects.get(3))) {
visible = !visible;
rects.remove(3);
repaint();
}
removeKeyListener(this);
}
});
timer.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
Попытка заставить взрыв исчезнуть после пересечения лазера с прямоугольным объектом. ⇐ JAVA
Программисты JAVA общаются здесь
1772186770
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
}
}
Обновлено добавлением таймера для стрельбы лазером, но он по-прежнему работает так же, как и раньше, с индексом 3 за пределами границ для длины 3 (обновленный код приведен ниже:
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 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) {
Timer timer = new Timer(25, e -> {
if (!rects.isEmpty()) {
rects.get(1).x += SPEED;
repaint();
System.out.println(rects.size());
if (rects.get(1).intersects(rects.get(3))) {
visible = !visible;
rects.remove(3);
repaint();
}
removeKeyListener(this);
}
});
timer.start();
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79897120/trying-to-get-explosion-to-disappear-after-laser-intersects-with-rectangle-objec[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия