Создать перечисление обработки с существующей переменной

Я хотел бы создать перечисление со значениями, которые используют существующие переменные. Я использую Обработка, поэтому ширина и высота, которые я определяю, являются глобальными java и могут быть доступны из любого места без контекста. Возможно ли то, что я делаю? Должен ли я сделать что-то еще?

public enum WaterDirection {
  NORTH(width / 2, 0);
  SOUTH(width / 2, height);
  WEST(0, height / 2);
  EAST(width, height / 2);

  public int x;
  public int y;
  WaterDirections(int x, int y) {
    this.x = x;
    this.y = y;
  }
}

Я получаю сообщение о том, что не могу найти ширину. Я мог бы жестко закодировать это, но я бы не хотел.

РЕДАКТИРОВАТЬ: Это перечисление работает отлично:

public enum TrinketTypes {
  COINS("coins", 0.50f);

  public String fileName;
  public float worth;
  TrinketTypes(String fileName, float worth) {
    this.fileName = fileName;
    this.worth = worth;
  }
}

2 ответа

Это то, как вы можете это сделать, хотя было бы более целесообразно сначала определить параметры, которые вы вводите в размер (x,y), в качестве статических конечных целых чисел, а затем с помощью них создать перечисление, а не проходить через статическую ссылку на ваш экземпляр PApplet.

static PApplet p;

public enum WaterDirection {
  NORTH(p.width / 2, 0), 
  SOUTH(p.width / 2, p.height), 
  WEST(0, p.height / 2), 
  EAST(p.width, p.height / 2);

  private final int x, y;

  private WaterDirection(int x, int y) {
    this.x = x;
    this.y = y;
  }
  public int getX() {
    return x;
  }
  public int getY() {
    return y;
  }
}

void setup() {
  p = this;
  size(500, 500);
  println(WaterDirection.NORTH.getX());
}

void draw() {
}

Prints 250.

При обработке, по крайней мере, это невозможно. Ширина и высота java глобалов нестатичны, а перечисления требуют статических ссылок или значений.

Другие вопросы по тегам