Разработка игры. Многократное копирование изображения - Java
Формулировка задачи:
Доброго времени суток.
Проблема следующая: при перемещении изображения оно оставляет след из своих многочисленных копий наложенных друг на друга. При этом вместе с этим компонентом перемещаются все изображения на экране и также оставляют за собой многочисленные копии наложенные друг на друга. Ниже привожу код:
Перемещаю я вот этот компонент:
делает обновление компонента не из swing потока. Переписал так:
Однако проблемы остались, ничего не изменилось. Скажите пожалуйста - что я ещё не учёл?
Листинг программы
- package viewPG;
- import java.awt.image.*;
- import java.awt.*;
- import javax.swing.*;
- import java.io.File;
- import javax.imageio.ImageIO;
- import modelPG.mapPG.MapObject;
- import modelPG.Model;
- class Map extends JPanel{
- private int width;
- private int height;
- private int countCellInRow;
- private int countCellInColumn;
- private Image[][] images;
- private Model model;
- Map(Model model) {
- this.model = model;
- this.width = model.getWidthMap();
- this.height = model.getHeightMap();
- this.countCellInRow = model.getCountCellInRow();
- this.countCellInColumn = model.getCountCellInColumn();
- setSize(width, height);
- images = new Image[countCellInColumn][countCellInRow];
- assembleMap();
- }
- //Часть кода пропущена
- public void paintComponent(Graphics g) {
- for(int y = 0; y < countCellInColumn; y++) {
- for(int x = 0; x < countCellInRow; x++) {
- if(images[y][x] != null) {
- int pozX = model.getCellInRowAndColumn(x, y).CENTER_X
- - images[y][x].getWidth(null) / 2;
- int pozY = model.getCellInRowAndColumn(x, y).CENTER_Y
- - images[y][x].getHeight(null);
- g.drawImage(images[y][x], pozX, pozY, null);
- }
- }
- }
- }
- }
Листинг программы
- package viewPG;
- import java.awt.image.*;
- import java.awt.*;
- import javax.swing.*;
- import java.io.File;
- import javax.imageio.ImageIO;
- import modelPG.IMove;
- import modelPG.Model;
- class Person extends JPanel implements IMove{
- private Image image;
- Person(Model model) {
- try {
- image = ImageIO.read(new File(View.path + "wizard.png"));
- } catch(Exception e) {
- }
- setSize(model.getWidthPerson(), model.getHeightPerson());
- model.addMoveListener(this);
- }
- public void paintComponent(Graphics g) {
- g.drawImage(image, 0, 0, null);
- }
- //метод ниже вызывается из другого потока. Он и ответственен за перемещение компонента.
- public void newPoz(int x, int y) {
- setLocation(x, y);
- }
- }
Листинг программы
- package viewPG;
- import java.awt.image.*;
- import java.awt.*;
- import javax.swing.*;
- import java.io.File;
- import javax.imageio.ImageIO;
- import modelPG.Model;
- public class View extends JPanel{
- private Model model;
- private Container container;
- private Map map;
- private Person person;
- static String path = "D:/JAVA/myExperiments/graphicsPG/mapPG/src/graphicsPG/";
- public View(Model model, Container container) {
- this.model = model;
- this.container = container;
- map = new Map(model);
- person = new Person(model);
- container.add(map);
- container.add(person);
- }
- }
Думал, что причина ошибки в в том, что метод
Листинг программы
- public void newPoz(int x, int y) {
- setLocation(x, y);
- }
Листинг программы
- public void newPoz(int x, int y) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- setLocation(x, y);
- }
- });
- }
Решил проблему с перемещением всех объектов: убрал менеджер компоновки. Теперь перемещается только экземпляр класса Person. Однако проблема с остающимся после него следа из наслоенных копий осталась.
Решение задачи: «Разработка игры. Многократное копирование изображения»
textual
Листинг программы
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- g.drawImage(image, 0, 0, null);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д