0

私が持っていた複数のスケッチを組み合わせて、それらを単一のスケッチのクラスとして持ち、キーを押してそれらを通過しようとしています。

正しい方法に従っているかどうかはわかりませんが、基本的にはそれぞれにブール値を使用してオンとオフを切り替えています。私は次のようなものを持っています:

package combiner;

public class Combiner extends PApplet {
    //...
    ClassNameOne s1;
    ClassNameTwo s2;
    //...
    ClassNameNine s9;

    // AllSketches //
    boolean[] sketches;
    int totalSketches = 9;
    String str_ts = String.valueOf(totalSketches);
    char char_ts = str_ts.charAt(0);

    public void setup() {
            size(1920, 1080);

            sketches = new boolean[totalSketches];
            for (int i = 0; i < sketches.length; i++) {
            sketches[i] = false;
            }

            s1 = new ClassNameOne(this);
            s2 = new ClassNameTwo(this);
            //...
            s9 = new ClassNameNine(this);
    }

    public void draw() {
            //drawingEachSketchIfItsBoolean==True
            if (sketches[0] == true) {
            s1.run();
            } else if (sketches[1] == true) {
            s2.run();
            //....
            }
    }

    public void keyPressed() {
            if (key >= '1' && key <= char_ts) {
                    String str_key = Character.toString(key);
                    int KEY = Integer.parseInt(str_key);

                    for (int i = 0; i < sketches.length; i++) {
                    sketches[i] = false;
                    }
                    sketches[KEY - 1] = true;

                    //initializingEachClassIfKeyPressed
                    if (KEY == 0) {
                    s1.init();
                    } else if (KEY == 1) {
                    s2.init();
                    }
                    //....
            }
    }

ご覧のとおり、各クラスには .init および .run メソッドがあります (以前はセットアップ + 描画でした)。何とかして .init または .run にループして、それぞれに 1 回書き込む必要がないかどうかを考えていました。次のようなものです。

for(int i=0;i<sketches.length;i++){
    if(sketches[i]==true){
        String str = String.valueOf(i+1);
        str="s"+str; //str becomes the Object's name
        ??? str.run(); ???
    }
}
4

2 に答える 2

1

最もクリーンな解決策は、インターフェイス Sketchを作成することです。これは、スケッチ クラスに実装する必要があります。

Sketch[] sketches;
int activeSketch = 0;

void setup(){
  sketches = new Sketch[2];
  sketches[0] = new SketchRed();
  sketches[1] = new SketchGreen();
  sketches[activeSketch].init();
}

void draw(){
  sketches[activeSketch].draw();
}

interface Sketch{
  void init();
  void draw();
}

class SketchRed implements Sketch{
  void init(){}

  void draw(){
    fill(255, 0, 0);
    ellipse(width/2, height/2, 30, 30);
  }
}

class SketchGreen implements Sketch{
  void init(){}

  void draw(){
    fill(0, 255, 0);
    ellipse(width/2, height/2, 30, 30);
  }
}

void keyPressed(){
  activeSketch++;
  if(activeSketch >= sketches.length){
    activeSketch = 0;
  }
  sketches[activeSketch].init();
}
于 2013-07-30T09:28:16.950 に答える
0

新しいスケッチで異なるスケッチをクラスとして表現するというアイデア全体が本当に良いかどうかはわかりませんが、いずれにせよ、Java には String からクラスを取得する可能性があるようです! ここで説明されているように探しClass.forName()ます: http://docs.oracle.com/javase/tutorial/reflect/class/classNew.htm

インスタンスではなく、これからクラスを取得することに注意してください。

于 2013-07-26T14:39:59.833 に答える