2016-09-14 8 views
2

Processingのスプライトベースのライブラリを作成しています。プログラムに画像を追加するシステムがあります。私はパラメータとしてPImageを求めるSpriteクラスの中にメソッドを持っています。書き込みミニライブラリ、文字列から変数名を作る必要がありますか?

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」として保存したファイルの名前に名前を付けることが可能であるならば、私は思ったんだけど。私はこのライブラリを、MITのScratchプログラムと同様に、スプライトを実験する人々ができるだけアクセスしやすいものにしたいと考えています。

答えて

1

いいえ、そのような変数を作成することはできません。しかし、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にあります。

0

Javaは、実際のJava変数をオンザフライで作成するほどダイナミックではないため、使用するには事前に名前を知っておく必要があります。

ハッシュマップは機能を提供します。 ApacheのFilenameUtils(またはあなたのコード)を使用して、ファイル名/ 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); 
} 
関連する問題