我正在为Processing创建一个基于sprite的库,其中我有一个用于向程序添加图像的系统。我在Sprite类中有一个方法,要求PImage
作为参数。
ArrayList<String> images = new ArrayList<String>();
Iterator<String> i = images.iterator();
void addImage(String img) {
images.add(img);
}
void loadImages() {
while(i.hasNext()) {
String img = i.next();
PImage ??? = loadImage(img);
}
}
我想知道是否可以将PImage
变量命名为文件名,我将其保存为“img”。我想让这个库尽可能地访问,以便人们尝试精灵,类似于麻省理工学院的Scratch计划。
答案 0 :(得分:1)
不,你不能创建那样的变量。但您可以使用 HashMap
来实现目标。
基本上,HashMap
允许您将键映射到值。您可以使用映射到String
值的PImage
个键,如下所示:
HashMap<String, PImage> imageMap = new HashMap<String, PImage>();
imageMap.put("imageOne", loadImage("giraffe.jpg"));
imageMap.put("imageTwo", loadImage("elephant.jpg"));
image(imageMap.get("imageOne"), 0, 0);
如果要创建跟踪图像文件的库,可以让用户指定键值以及PImage
实例。像这样:
HashMap<String, PImage> imageMap = new HashMap<String, PImage>();
void addImage(String key, String imageLocation) {
imageMap.put(key, loadImage(imageLocation));
}
PImage getImage(String key){
return imageMap.get(key);
}
或者您可以使用imageLocation
作为密钥。
可以在the reference找到更多信息。
答案 1 :(得分:0)
Java不像动态创建实际的Java变量那样动态,并且您的用户必须事先知道名称才能使用它们。
HashMap将提供功能。使用Apache的FilenameUtils(或您的代码),从文件名/ URL / etc中提取图像的名称,并使用该基本名称作为密钥将加载的图像存储在HashMap中。此示例使用basename,但您可以从输入名称创建任何您喜欢的键。
import org.apache.commons.io.FilenameUtils;
HashMap<String, PImage> images = new HashMap<String, PImage>();
public String addImageURI(String imageURI) {
String basename = FilenameUtils.getBaseName(imageURI);
images.put(basename, loadImage(imageURI);
}
public PImage getImage(String imageKey) {
return images.get(imageKey);
}