我目前正在创建一个对象,该对象总共包含12个精灵。每个列表都在主列表spriteList的内部定义。
我的问题是,遍历目录中的所有文件时,我为该列表中的每个索引设置了我抓取的图像。
出于某种原因,它取决于首先显示哪个文件。有人知道为什么,我在某处做永久性引用吗?
public class EntitySprites {
//A list containing 4 linkedlist, the first one is for up sprites, second is for right
//third is for down, 4th is for left. Each sub list contains 3 sprites, at index 0 is the standing or idle
//sprite, the first corespond to the first frame of the walking animation and the 2nd index is for the
//2nd frame of animation
LinkedList<LinkedList<BufferedImage>> spriteList;
public EntitySprites(String path) {
File directory = new File(path);
spriteList = new LinkedList<LinkedList<BufferedImage>>();
LinkedList<BufferedImage> temp;
for(int k = 0; k < 4; k++) {
spriteList.add(new LinkedList<BufferedImage>());
}
BufferedImage ret = null;
for(File f : directory.listFiles()) {
String fName = f.getName();
//Filters out all sprites that do not corespond to a walking or standing
if(fName.indexOf("walk") != -1 || fName.indexOf("stand") != -1) {
try {
ret = ImageIO.read(f);
} catch (Exception e) {
e.printStackTrace();
}
spriteList.get(getDirect(fName)).add(ret);
}
}
}
答案 0 :(得分:1)
我假设LinkedList
仅包含最后获取的图像。
原因是您在列表中添加了参考:BufferedImage ret
,并更改了
添加后的参考。
换句话说就是mutable:
变量值在程序执行期间可以更改
每次您通过
更新LinkedList
时创建一个新引用
在BufferedImage ret = null;
循环内移动for(File f : directory.listFiles())
或
try {
spriteList.get(getDirect(fName)).add(ImageIO.read(f));
} catch (Exception e) {
e.printStackTrace();
}
应该解决它。