2016-09-14 4 views
2

Ich mache eine Sprite-basierte Bibliothek für Processing, in dem ich ein System zum Hinzufügen von Bildern zum Programm habe. Ich habe eine Methode in einer Sprite-Klasse, die nach einem PImage als Parameter fragt.Schreiben Verarbeitung Mini-Bibliothek, muss Variablenname aus Zeichenfolge machen?

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

Ich frage mich, ob es möglich wäre, die PImage Variable den Namen der Datei zu nennen, die ich als „img“ gespeichert. Ich möchte diese Bibliothek so zugänglich machen, dass Leute mit Sprites experimentieren können, ähnlich wie das MIT Scratch Programm.

Antwort

1

Nein, Sie können keine Variablen wie diese erstellen. Aber Sie können ein HashMap verwenden, um Ihr Ziel zu erreichen.

Grundsätzlich können Sie mit HashMap Schlüssel zu Werten zuordnen. Sie könnten String Schlüssel verwenden, die PImage Werte, so etwas wie diese Karte:

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

Wenn Sie eine Bibliothek erstellen wollten, die Bilddateien verfolgt, könnten Sie den Benutzer den Schlüsselwert zusammen mit der PImage Instanz angeben. Etwas wie folgt aus:

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

Oder Sie einfach die imageLocation als Schlüssel verwenden könnten.

Weitere Informationen finden Sie in the reference.

0

Java ist nicht so dynamisch, um tatsächliche Java-Variablen im laufenden Betrieb zu erstellen, und Ihr Benutzer müsste die Namen im Voraus kennen, um sie verwenden zu können.

Eine HashMap würde die Funktionalität bieten. Mit Apache filenameUtils (oder Ihrem Code) extrahieren Sie den Namen des Bildes aus seinem Dateinamen/URL/etc und speichern das geladene Bild in einer HashMap mit diesem Basisnamen als Schlüssel. In diesem Beispiel wird der Basisname verwendet, Sie können jedoch aus dem Namen der Eingabe den gewünschten Schlüssel erstellen.

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