Pocas veces he hablado de Openprocessing. Esta plataforma es la gran galería de proyectos y ejemplos realizados con processing alrededor del mundo. Comenzó aproximadamente 8 años. Cuando la comunidad era muy pequeña y solo soportaba Java. Ahora, las cosas han cambiado.
Lo nuevo de Openprocessing
Openprocessing tiene una serie de mejoras acordes con las nuevas épocas.
- No solo soporta java: Es posible subir archivos java (processing) y javascript (processinjs). Con estos dos lenguajes podemos ampliar el abanico de oportunidades para visualizar nuevas ideas y compartir los elementos que trabajamos con la comunidad.
- Materiales actualizados: Por lo general la antigua plataforma visualiza ejemplos básicos o simples relacionados a los primeros años 2010, pero cada vez se actualizan diferentes temáticas que enriquece la exploración.
- Se agregan clases: Muchas veces nos topábamos con ejercicios de cuadros, lineas o rayas. Nos daba entender que eran alumnos de alguna clase. Toda la información estaba desordenada y no se llegaba a comprender la finalidad de estos ejemplos. Ahora en una sección de clases de processing se podría seguir la secuencia de ideas que tuvo el profesor o los trabajos de los alumnos.
- Los comentarios están vivos: Comentar en la antigua plataforma? Para qué, parecía que nadie aportaba a al conversación. Ahora es una funcionalidad sólida que resalta el verdadero entusiasmo de la comunidad.
- En tiempo real: Sí, ahora editar los códigos desde el navegador permite luego visualizarlos sin problemas. Un lujo!
- Buscador dinámico y especializado: El buscador cobra vida ahora no solo permite «buscar con sentido» sino que tiene una manera más intuitiva de ordenar el resultado.
- Una versión premiun con más sentido: Tener cuenta premiun era raro, pero ahora con la funcionalidades que se le ha agregado nos daremos cuenta que es atractivo para profesores.
Ejemplo
Vamos a utilizar el ejemplo que tiene el nuevo openprocessing
ArrayList poop;
boolean flag=true;
int distance=50;
void setup()
{
size(1000,300);
smooth();
poop = new ArrayList();
for (int i=0;i<100;i++)
{
Particle P = new Particle();
poop.add(P);
}
}
void mousePressed()
{
}
void draw()
{
background(-1);
for (int i=0;i<poop.size();i++)
{
Particle Pn1 = (Particle) poop.get(i);
Pn1.display();
Pn1.update();
for (int j = i + 1; j < poop.size(); j++) {
Particle Pn2 = (Particle) poop.get(j);
Pn2.update();
if (dist(Pn1.x, Pn1.y, Pn2.x, Pn2.y)< distance)
{
for (int k = j + 1; k < poop.size(); k++) {
Particle Pn3 = (Particle) poop.get(k);
if (dist(Pn3.x, Pn3.y, Pn2.x, Pn2.y)< distance) { if (flag) { stroke(255, 10); fill(Pn3.c, 95); // method to access the class property } else { noFill(); strokeWeight(1); stroke(0, 20); } beginShape(TRIANGLES); vertex(Pn1.x, Pn1.y); vertex(Pn2.x, Pn2.y); vertex(Pn3.x, Pn3.y); endShape(); } Pn3.update(); } } } } } void keyPressed() { flag=!flag; } class Particle { float x, y, r; color c; int i=1, j=1; Particle( ) { x = random(0, width); y = random(0, height); r = random(1,5); int j = (int)random(0, 4); if (j==0) { c = color(#05CDE5); } if (j==1) { c = color(#FFB803); } if (j==2) { c = color(#FF035B); } if (j==3) { c = color(#3D3E3E); } } void display() { pushStyle(); noStroke(); fill(c); ellipse(x, y, r, r); popStyle(); } void update() { x = x + j*0.01; y = y + i*0.01; if (y > height-r) i=-1;
if (y < 0+r) i=1; if (x > width-r) j=-1;
if (x < 0+r) j=1;
}
}