我正在创建一个国际象棋游戏,我想要的功能之一是,如果该游戏关闭,则下次打开该游戏时,所有内容都将位于相同的位置。我遇到的问题是数据和图像的序列化。我知道映像不能实现Serializable,因此我将映像的ArrayList和映像字段本身设为瞬态。每当我运行游戏时,我都会收到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类,并绕开了Asset,一切正常。在使用Loader类进行初始加载之后,程序将返回到使用Asset类。