Tipps zum Golfen in der Verarbeitung


13

Hat jemand Tipps zum Golfen in Processing ? Es ist eine grafische Erweiterung von Java und ist etwas schwierig zu golfen.


Gute Frage. Ich denke, Tipps sollten im Community Wiki sein. Ich habe es für die Migration markiert.
Level River St

4
Downvote ??? Warum?
TARDIS

Mach dir keine Sorgen um die Ablehnung ... du wirst alle Wiederholungen verlieren, die du von diesem Beitrag bekommen hast, nachdem er sowieso als Community-Wiki markiert wurde ...
user12205

3
@ace: Der Ruf, der gewonnen wird, bevor ein Beitrag als CW markiert wird, wird beibehalten: meta.stackexchange.com/a/11741/229438
ProgramFOX

Antworten:


7
  • Wenn keine Animation erforderlich ist, können Sie die überspringen void draw()und alles in void setup().
  • Das Initialisieren der Größe der Zeichenfläche ist manchmal nicht erforderlich - es wird (100, 100)standardmäßig auf initialisiert .
  • Wenn Sie heightund widthin Ihrem Code verwenden müssen, ist es normalerweise kürzer, stattdessen deren numerische Werte zu verwenden. Zum Beispiel mit einer Zeichenfläche von Größe (100, 100), mit 99zu ersetzen heightund widthkönnen Sie 7 Bytes speichern.

3

Wenn Sie nur Code in der Setup-Methode ausführen, müssen Sie den Methodenumriss nicht schreiben. Zum Beispiel können Sie schreiben:

rect(10,10,90,90);

Anstatt von

void setup {
    rect(10,10,90,90);
}

Und solange Sie keine anderen Methoden verwenden, wird vor dem Ausführen alles in die Setup-Methode gestellt


Dies kann ein bisschen fehlerhaft sein. Mir ist aufgefallen, dass beim Versuch, eine Funktion im statischen Modus zu definieren, die Verarbeitung etwas durcheinander
geraten

@quat Solange Sie keine anderen Methoden definieren, wird alles in die Setup-Methode übernommen. Wenn Sie Methoden definieren müssen, müssen Sie die Setup-Methode explizit benennen.
HEGX64

2

Farben (R, G, B)Notation

Hexadezimalfarben

Die Verarbeitung ist im Farbformat sehr flexibel.

fill(255,255,0); //16 bytes

kann in hexadezimaler Schreibweise als geschrieben werden

fill(#ffff00);   //14 bytes (2 bytes saved)

Graustufen

Hier ist eine spezielle Verwendung für Farben, wenn alle Werte für Rot, Grün und Blau gleich sind (Weiß):

fill(255,255,255); //18 bytes
fill(#ffffff);     //14 bytes
fill(255);         //10 bytes

Alle drei Parameter können zu einem Parameter verkürzt werden, der den Graustufenwert enthält: von 0Schwarz zu 255Weiß.

Dies kann auch für Alpha erweitert werden:

fill(175,175,175,50); //translucent gray
fill(175,50);         //8 bytes shorter

Beide bedeuten die gleiche Farbe, aber der letztere Weg ist um 8 Bytes kürzer.

Alpha

Obwohl dies offensichtlich ist, sollte angegeben werden, dass der Alpha-Parameter beim Festlegen von Farben optional ist, da für Farben standardmäßig der Alpha-Wert 255(100% opak) verwendet wird.

Zusammenfassung: Farbformate

Verwenden Sie das kürzeste Farbformat, um Ihre Farbe auszudrücken (denken Sie daran, unnötige Bits - abhängig vom Kontext des Programms - auszulassen, zum Beispiel: Alpha oder Graustufen).

R: Rot G: Grün B: Blau A: Alpha g: Graustufen

RRR,GGG,BBB
#RRGGBB
ggg
RRR,GGG,BBB,AAA
ggg,AAA

2

Konstanten abkürzen

Wenn Sie jemals eines der All-Caps-Schlüsselwörter in Processing verwenden (wie z. B. DIFFERENCEoder TRIANGLE_FAN), überprüfen Sie, ob die entsprechende Anzahl kürzer ist.

Zum Beispiel DIFFERENCEist nur eine int, die gleich 32 ist. Anstatt zu verwendenDIFFERENCE hier zu verwenden , könnte ich schreiben 32und 8 Zeichen sparen.


2

Kürzere Alternative zu void keyPressed(){}

void draw(){}void keyPressed(){foo;} //36 bytes
void draw(){if(key>0)foo;}           //26 bytes

Das void draw(){}wird standardmäßig benötigt key, um aktualisiert zu werden. Wenn der Benutzer seit dem Start des Programms keine Taste gedrückt hat, keywird ein Wert von angegeben 0. Wenn 0wir prüfen, ob es mehr ist als (dh der Benutzer hat eine Taste gedrückt), haben wir einen Golf-Code und sparen 10 Bytes.


2

Weiß #FFFFFF

Verbunden: Farbnotation

Anstatt dies für Weiß zu verwenden:

color(255)     //10 bytes

du kannst das:

color(-1)      //9 bytes

und 1 Byte speichern.


1

Pixel setzen und festschreiben mit set ()

Es ist effizienter, Pixel über Pixel einzustellen [] :

pixels[0] = color(255)
updatePixels();

Dies erfordert jedoch updatePixels()und auch die Verwendung eines Index, der je nach Szenario die Konvertierung einer x, y-Position in einen Pixelindex erfordert. Um die Dinge kurz zu halten, obwohl es weniger CPU-effizient ist (da jeder Aufruf den gesamten Puffer aktualisiert), ermöglicht set (), dass ein Pixel in einem Aufruf sofort gesetzt und für den Puffer festgeschrieben wird.

set(0,0,color(255));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.