Schriftzeichen verbinden #1 in Processing

Zu Beginn des draws werden zwei float Variablen x und lastEx festgelegt. x steht für die aktuelle Zeichenposition an welcher nacheinander die einzelnen Buchstaben positioniert werden. lastEx steht für die Position des letzten e's – welche wir mit einer Bezierkurve verbinden.
float x = 0; float lastEx = -1;Im nächsten Schritt gehen wir mit einer for-Schleife durch alle Zeichen im Text und überprüfen, ob das aktuelle ein gesuchtes 'e' ist oder nicht.
for (int i=0; i < myText.length (); i++) {
if (c == searchChar) {
Ist dies der Fall, Zeichnen wir eine Bezierkurve zur letzten lastEx-Position (bzw. wenn nicht, merken wir uns die aktuelle als Start). Anderenfalls wird der Buchstabe im letzten Schritt einfach dargestellt und der Wert von x für die Position den nächsten Buchstabens um die Breite des Aktuellen erhöht.Der Sketch
// String für den Text
String myText;
// PFont für die Schriftart
PFont font;
// Schriftgröße als Integer
int fontSize = 16;
// Breite des Randes
float margin = 14;
// Gesuchter Buchstabe
char searchChar = 'e';
void setup () {
// Grundlegende Sketch-Einstellungen
size (550, 200);
smooth ();
// Generiere die Schrift 'Arial';
// muss dafür im System aktiv sein
font = createFont ("Arial", fontSize);
// Setze 'font' als Standardschrift
// für alle Aufrufe von 'text()'
textFont (font);
// Befülle die Variable 'myText' mit Inhalt
myText = "So perhaps a \"luck\" gene that somehow confers a quantum mechanical";
}
void draw () {
// Hintergrund mit grau füllen
background (76);
// Positionierungsvariablen
// initialisieren...
float x = 0;
float lastEx = -1;
// Variable 'base' zur y-Positionierung
float base = height / 2 - fontSize;
// Für jeden einzelnen Buchstaben im Text...
for (int i=0; i < myText.length (); i++) {
// Wähle Zeichen an Position 'i' aus
char c = myText.charAt (i);
// Wenn Zeichen ein 'e' ist...
if (c == searchChar) {
// Wenn dies nicht das erste 'e' ist...
if (lastEx > -1) {
// Berechne die Entfernung zwischen
// diesem und dem vorigen 'e'
float space = x + margin - lastEx;
space = space / 2;
// Zeichne Kurve zwischen beiden 'e's
stroke (138, 170, 178);
strokeWeight (2);
noFill ();
bezier (
lastEx,
base + 3,
lastEx,
base + 3 + space,
x + margin,
base + 3 + space,
x + margin,
base + 3
);
}
// Merke die Position des akuellen
// 'e's als 'lastEx'
lastEx = margin + x;
}
// Füllfarbe abhängig vom Buchstaben
if (c == searchChar) {
fill (229, 90, 38);
}else{
fill (239);
}
noStroke ();
// Buchstaben darstellen
text (c, margin + x, base);
// Den Zeichen-'cursor' nach
// rechts verschieben...
x = x + textWidth (c);
}
}
void keyReleased () {
searchChar = key;
}