Переходные свойства - PullRequest
       20

Переходные свойства

0 голосов
/ 18 ноября 2018

Я создаю игру в шахматы, и одна из функций, которую я хотел, заключалась в том, что если игра будет закрыта, то в следующий раз, когда она откроется, все будет в том же положении.Проблема, с которой я столкнулся, связана с сериализацией данных и изображений.Я понимаю, что Изображения не реализуют Сериализуемый, поэтому я сделал свой ArrayList of Images и само поле Image кратковременным.Всякий раз, когда я запускаю игру, я получаю NullPointerExceptionError, заявляя, что Изображения никогда не загружались.Я знаю, что переходный процесс остановит их сериализацию, но я все еще хочу, чтобы изображения были загружены в игру, и мне очень тяжело завершить это.

Класс ресурса:

public class Asset {
private transient ArrayList<Image> assets;

public Asset() {
    assets = new ArrayList<Image>(13);
    loadImages();
}

private void loadImages() {
    assets.add(Loader.loadImage("/White/WhitePawn.png"));           //Index 0
... removed code...
}

Класс платы У меня возникли проблемы с:

public class Board implements Serializable{
private static final long serialVersionUID = 6818852943765948280L;
... removed code...
private final transient Asset assets;

Фактический объект, который я хочу загрузить:

public abstract class Piece extends Entity{
private static final long serialVersionUID = -535748959779200884L;

/**
 * Images are used to render the graphical representation 
 * of the Piece. The Image is used in conjunction with the
 * overridden render method.
 */
private transient Image image;

private int offsetX;

private int offsetY;

private boolean canMoveOnCheck = false;
/**
 * A Blank Piece is created with default values.
 */
public Piece() {
    super();
}
/**
 * Constructor of Piece with normal variables.
 * @param x the X location of Piece
 * @param y the Y location of Piece
 * @param width the Width of Piece
 * @param height the Height of Piece
 * @param type the Type of Piece
 * @param image the Image of Piece
 * 
 * @throws IllegalFormatException when width or height are less than 0
 */
public Piece(int x, int y, int width, int height, Type type, Image image) {
    super(x, y, width, height, type);
    this.image = image;
}

РЕДАКТИРОВАТЬ: Хорошо, поэтому я просто возился с загрузкой изображений, чтобы понять, почему это не работает, и я понял это.Поэтому, когда я использую класс Asset, чтобы загрузить все изображения одновременно и сохранить их, он работает нормально.Проблема заключается в том, что при сериализации данных актив не создается первым.То, что я сделал, - это прямой доступ к классу Loader и обход этого актива, и все работало нормально.После начальной загрузки с использованием класса Loader программа возвращается к использованию класса Asset.

...