编写处理迷你库,需要从字符串中创建变量名?
Writing Processing mini-library, need to make variable name from string?
我正在为 Processing 制作一个基于 sprite 的库,其中我有一个用于向程序添加图像的系统。我在 Sprite class 中有一个方法要求 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 程序。
不,您不能那样创建变量。但是您可以使用 HashMap
来实现您的目标。
基本上,HashMap
允许您将键映射到值。您可以使用映射到 PImage
值的 String
键,如下所示:
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 中找到更多信息。
Java 并不是动态地动态创建实际的 Java 变量,您的用户必须提前知道名称才能使用它们。
HashMap 将提供该功能。使用 Apache 的 FilenameUtils(或您的代码),您从其 filename/URL/etc 中提取图像的名称,并使用该基本名称作为键将加载的图像存储在 HashMap 中。此示例使用基本名称,但您可以根据输入的名称创建任何您喜欢的键。
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);
}
我正在为 Processing 制作一个基于 sprite 的库,其中我有一个用于向程序添加图像的系统。我在 Sprite class 中有一个方法要求 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 程序。
不,您不能那样创建变量。但是您可以使用 HashMap
来实现您的目标。
基本上,HashMap
允许您将键映射到值。您可以使用映射到 PImage
值的 String
键,如下所示:
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 中找到更多信息。
Java 并不是动态地动态创建实际的 Java 变量,您的用户必须提前知道名称才能使用它们。
HashMap 将提供该功能。使用 Apache 的 FilenameUtils(或您的代码),您从其 filename/URL/etc 中提取图像的名称,并使用该基本名称作为键将加载的图像存储在 HashMap 中。此示例使用基本名称,但您可以根据输入的名称创建任何您喜欢的键。
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);
}