编写处理迷你库,需要从字符串中创建变量名?

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);
}