2014-09-22 43 views
1

我一一列举了所有这些。有没有一种方法占用更少的空间?什么是更清洁,更优雅的方式来初始化所有这些?

public class Matt{ 
    PImage matt, 
    imgLS1, imgLS2, imgLS3, imgRS1, imgRS2, imgRS3, 
    imgLSB1, imgLSB2, imgLSB3, imgRSB1, imgRSB2, imgRSB3, 
    imgLW1, imgLW2, imgLW3, imgRW1, imgRW2, imgRW3, 
    imgLWB1, imgLWB2, imgLWB3, imgRWB1, imgRWB2, imgRWB3; 
    public Matt(){  
     imgLS1 = loadImage("./Images/Matt/MattLS1.png"); 
     imgLS2 = loadImage("./Images/Matt/MattLS2.png"); 
     imgLS3 = loadImage("./Images/Matt/MattLS3.png"); 
     imgRS1 = loadImage("./Images/Matt/MattRS1.png"); 
     imgRS2 = loadImage("./Images/Matt/MattRS2.png"); 
     imgRS3 = loadImage("./Images/Matt/MattRS3.png"); 
     imgLSB1 = loadImage("./Images/Matt/MattLSB1.png"); 
     imgLSB2 = loadImage("./Images/Matt/MattLSB2.png"); 
     imgLSB3 = loadImage("./Images/Matt/MattLSB3.png"); 
     imgRSB1 = loadImage("./Images/Matt/MattRSB1.png"); 
     imgRSB2 = loadImage("./Images/Matt/MattRSB2.png"); 
     imgRSB3 = loadImage("./Images/Matt/MattRSB3.png"); 
     imgLW1 = loadImage("./Images/Matt/MattLW1.png"); 
     imgLW2 = loadImage("./Images/Matt/MattLW2.png"); 
     imgLW3 = loadImage("./Images/Matt/MattLW3.png"); 
     imgRW1 = loadImage("./Images/Matt/MattRW1.png"); 
     imgRW2 = loadImage("./Images/Matt/MattRW2.png"); 
     imgRW3 = loadImage("./Images/Matt/MattRW3.png"); 
     imgLWB1 = loadImage("./Images/Matt/MattLWB1.png"); 
     imgLWB2 = loadImage("./Images/Matt/MattLWB2.png"); 
     imgLWB3 = loadImage("./Images/Matt/MattLWB3.png"); 
     imgRWB1 = loadImage("./Images/Matt/MattRWB1.png"); 
     imgRWB2 = loadImage("./Images/Matt/MattRWB2.png"); 
     imgRWB3 = loadImage("./Images/Matt/MattRWB3.png"); 
    } 
} 
+1

@M:

final int N_FILES = 3; // files/position -- could also be a variable enum Position { LS, RS, LSB, RSB, LW, RW, LWB, LRB } Map<Position, String[]> files = new EnumMap<>(Position.class); for (Position pos : Position.values()) { String[] posFiles = new String[N_FILES]; files.put(pos, posFiles); for (int i = 1; i <= N_FILES; ++i) { posFiles[i-1] = "./Images/Matt/Matt" + pos.name() + i + ".png"; } } 

然后你可以使用如下代码访问的任何元素akoto不需要粗鲁。只需发布答案。 – 2014-09-22 02:55:07

+0

我想知道是否有没有使用列表的方法,如果不是,我将如何构建这个列表与一个列表中的所有这些不同的图像文件的循环 – 2014-09-22 02:55:50

+0

你将如何处理图像? LS,RS,LSB,RSB,LW,RW,LWB和RWB是什么意思? – 2014-09-22 02:56:23

回答

3

将图像放在Map<String,PImage>中,按图像后缀组织地图。至于访问的图像而言,这种做法可能会稍微不太方便/不是直接使用变量有效,但是它会为你节省大量的空间:

static final String[] suffixes = new String[] {"LS1", "LS2", "LS3", ..., "RWB3"}; 
Map<String,PImage> images = new HashMap<String,PImage>(); 
public Matt() { 
    for (String suffix : suffixes) { 
     PImage image = loadImage("./Images/Matt/Matt"+suffix+".png"); 
     images.put(suffix, image); 
    } 
} 
+0

似乎可以进一步分解后缀的“1”,“2”,“3”部分以减小“后缀”数组的大小 - 在内循环的成本。 – 2014-09-22 02:59:26

+0

@TedHopp这是真的。但是,我认为OP很可能会为每个后缀创建字符串常量,所以我在示例中保留了1,2,3末端的硬编码。 – dasblinkenlight 2014-09-22 03:02:23

+0

这实际上是完美的,正是我想要的 – 2014-09-22 03:02:42

1

由于“LS”等,似乎有语义,我建议的solution by @dasblinkenlight的变化是采用了enum

Position p = RS; // or any other value 
int index = 0; // 0..(N_FILES-1), corresponding to suffixes 1..N_FILES 
String fileName = files.get(p)[i]; 
+0

这看起来很有前途,但是我从来没有使用枚举函数,其他人有没有想过哪一个会更好(请原因)? – 2014-09-22 03:26:10

+0

我现在在想,我可能不想将每个动画限制为3张图片 – 2014-09-22 03:28:27

+0

扩大图片数量不是问题:只需参数化每个“位置”映射到的数组大小。我会编辑我的答案以显示(无论如何,这是很好的风格)。有关'enum'类型的更多信息,请参阅[Java主题](http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。 – 2014-09-22 03:37:55

相关问题