19. September 2012
Es sind ein paar Monate vergangen seitdem ich Processing das letzte Mal öffnete, das den Eindruck einer zum experimentieren gut geeigneten, jedoch nicht so performanten Sprache hinterliess. Nach Resonanz, einem Livemusikvisualisierungstool, steckte ich noch etwas Arbeit in eine webcambasierte Farbtrackingsoftware, die über OSC verarbeitete Daten an andere Software weitergeben konnte. Da ich also bereits etwas Erfahrung in Processing gesammelt habe Betrachtete ich Ext.Lextion 1 genauer, wobei ich es sich im wesentlichen um ein klassenbasiertes Particle System handelte. Wie in Objective-C (und anderen Programmiersprachen sicherlich auch), kann einem das Verwenden von Klassen erheblichen Arbeitsaufwand sparen. Klassen ähneln prinzipiell Funktionen, sie können (mit Parametern) Aufgerufen werden, führen irgendwas aus und geben unter Umständen etwas zurück. Allerdings kann eine Klasse als Unterklasse einer anderen Klasse definiert werden, die neue Klasse hat somit alle Eigenschaften der übergeordneten Superclass, kann diese allerdings nach belieben erweitern. Im gegebenen Beispiel konnte so eine Subclass der gegebenen Klasse "Particles" erstellt werden, um den prinzipielle Funktionsweise der Particle brauchte ich mich somit nicht mehr zu kümmern, konnte aber leicht eigene, z.B. explodierende Partikel integrieren. source:// ParticleExplosion, extend the Particles class ParticleExplosion extends Particle { PVector _color; float _size; float _explosion; ParticleExplosion(PVector pos,PVector dir,int lifeTime,PVector objClr,float objSize, float explosion) { super(pos,dir,lifeTime); _color = objClr.get(); _size = objSize; //int explosion=1; _explosion = explosion; } void draw() { stroke(256); // _pos.y=_pos.y+(5/_normTime); if(_normTime>0.2){ ellipse(_pos.x,_pos.y, _normTime * _size, _normTime * _size); println(_normTime); fill(255,255,0,255.0 * _normTime); }else{ _explosion+=1; fill(_color.x,_color.y,_color.z,255.0 * _normTime *4/_normTime); ellipse(_pos.x+4/_normTime,_pos.y, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); ellipse(_pos.x+4/_normTime*0.66,_pos.y+4/_normTime*0.66, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); ellipse(_pos.x+4/_normTime*0.66,_pos.y-4/_normTime*0.66, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); ellipse(_pos.x,_pos.y+4/_normTime, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); ellipse(_pos.x-4/_normTime,_pos.y, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); ellipse(_pos.x-4/_normTime*0.66,_pos.y-4/_normTime*0.66, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); ellipse(_pos.x-4/_normTime*0.66,_pos.y+4/_normTime*0.66, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); ellipse(_pos.x,_pos.y-4/_normTime, _normTime * _size *4/_normTime, _normTime * _size *4/_normTime); } } }