Schriftzeichen verbinden #2 in Processing

Um diese Funktionalität nicht nur auf eine Zeile anzuwenden, müssen wir uns nicht nur die aktuelle x, sondern ebenfalls die y-Position merken. Innerhalb jedes draw()-Blocks legen wir dafür zwei Variablen an:
float x = 10; float y = 10;Die Werte 10 stehen dabei für die Startposition des imaginären Textes. Mittels einer for-Schleife laufen wir durch den gesamten Text und halten nach dem gewünschten Zeichen token Ausschau. Wir verändern Zeichen für Zeichen den Wert von x, indem wir die Breite des aktuellen Zeichens auf x addieren:
x = x + charWidth;Wird der Wert von x zu groß, setzen wir dies auf die Startposition zurück und verschieben die aktuelle Zeile um 20 Pixel nach unten:
if (x + charWidth > width - margin) {
x = margin;
y = y + 20;
}Der Sketch
String txt;
PFont font;
float margin = 10;
// Gesuchtes Zeichen
char token = 'a';
void setup () {
size (590, 250);
smooth ();
// Laden des Textes aus einem Textdokument
String[] fileContent = loadStrings ("my text file.txt");
// Zusammenfügen der Zeilen (mit Umbruch)
txt = join (fileContent, "\n");
// Festlegen der Schrifteinstellungen
font = createFont ("Arial", 10);
textFont (font);
}
void draw () {
background (76);
// Variablen zum Ablegen des letzten
// Vorkommens vom gesuchten Buchstaben
float xPrevious = 0;
float yPrevious = 0;
// Variablen zum Ablegen der Position
// vom aktuellen Buchstaben
float x = 10;
float y = 10;
// Für jeden Buchstaben im Text...
for (int i=0; i < txt.length (); i++) {
// Buchstaben an Position 'i' im
// Text auswählen
char c = txt.charAt (i);
// Ermittlung der Buchstabenbreite
float charWidth = textWidth (c);
// Sicherstellung das die Position
// des aktuellen Buchstabens nicht das
// Sketchfenster verlassen würde
if (x + charWidth > width - margin) {
x = margin;
y = y + 20;
}
// Wenn Buchstabe der Gesuchte ist...
if (c == token) {
// Zeichne einen Kreis an dessen Position
fill (138, 170, 178);
noStroke ();
ellipse (x, y, 6, 6);
noFill ();
stroke (239);
// Verbinde aktuelles mit vorherigem
// Vorkommen des gesuchten Buchstabens
curve (xPrevious, yPrevious - 40, xPrevious, yPrevious, x, y, x, y - 40);
// Merke die aktuelle als vorherige Position
// für nächstes Vorkommen
xPrevious = x;
yPrevious = y;
}
x = x + charWidth;
}
}
void keyPressed () {
// Wenn Taste gedrückt, ändere
// den Wert des gesuchten Buchstabens
token = key;
}