Código de Processing
Para ver su funcionamiento, descargar Processing, la librería JMyron y el archivo “archivo MiCu.zip” en descargas, en el cuadro de la derecha; luego de ésto, ubicar la carpeta en el directorio de processing (se debe tener conectada la cámara en resolución 320 x 480 y tener un Blob de luz de tamaño constante).
Luego de ubicar la librería en el directorio de Processing, ejecutar.
A continuación, el código generado para hacer la simulación del MiCu
import JMyron.*;
PImage processinglab;
PImage processinglab2;
PImage personaje;
PImage cambio1;
PImage cambio2;
int contpasadasp1=0;
int contpasadasp2=0;
int tx = 0;
int ty = 0;
int valor;
float accelx;
float accely;
float posx = 0;
float posy = 0;
float velx = 0;
float vely = 0;
JMyron cam;
void setup(){
size(320,240);
cam = new JMyron();
cam.start(width,height);
cam.findGlobs(1);
personaje= loadImage(“personaje.png”);
cambio1= loadImage(“tranf12.png”);
cambio2= loadImage(“tranf13.png”);
processinglab= loadImage(“processinglab.png”);
processinglab2= loadImage(“processinglab2.png”);
//cam.adapt();
cam.adaptivity(0.5);
}
void draw(){
//cam.adapt();
cam.update();//update the camera view
int[] img = cam.image(); //get the normal image of the camera
loadPixels();
for(int i=0;i<width*height;i++){ //loop through all the pixels
pixels[i] = img[i]; //draw each pixel to the screen
}
updatePixels();
noStroke();
int c = cam.average(mouseX-20,mouseY-20,mouseX+20,mouseY+20);
rect(mouseX-20,mouseY-20,40,40);
// Para saber los niveles de color del elemento que se quiere trackear, colocar el mouse sobre el elemento para saber el color
/* print(“rojo: “);
println(red(c));
print(“verde: “);
println(green(c));
print(“azul: “);
println(blue(c));
*/
int[][] a;
int[][] x;
cam.trackNotColor(95,101,80,255);
cam.trackColor(46,147,206,205);
x = cam.globBoxes();
stroke(0,0,255);
for(int n=0; n<x.length;n++){
int[] cuad = x[n];
if(n == 0){
fill(255);
rect(cuad[0],cuad[1],cuad[2],cuad[3]);
float anx = cuad[2];
float any = cuad[3];
//println(“q0:”+cuad[0]+” q1:”+cuad[1]+” q2:”+cuad[2]+” q3:”+cuad[3]);
// println(“pos X: “+posx+” pos Y: “+posy);
anx = constrain(anx, 0, 21);
any = constrain(any, 0, 20);
//println(“anx: ” + anx);
//println(“any: ” + any);
accelx = map(anx, 0, 31, 0.5, 0);
accely = map(any,0,25,0.5,0);
//println(“q2 :”+cuad[2]);
if(cuad[2]<18){
accelx*=-1;
}
// println(“q3 :”+cuad[3]);
if(cuad[3]<17){
accely*=-1;
}
}
velx = velx+accelx;
vely = vely+accely;
velx = constrain(velx, -3, 3);
vely = constrain(vely, -3, 3);
// println(“velx: “+ velx);
// println(“vely: “+vely);
//println(“accelx: ” + accelx);
//println(“accely: ” + accely);
posx = posx + velx;
posy = posy + vely;
if(posx>320){
posx = 0;
}
if(posx<0){
posx=width;
}
if(posy<0){
posy = height;
}
if(posy>240){
posy = 0;
}
//posx = constrain(posx, 0, 320);
//posy = constrain(posy, 0, 240);
//———————–COMIENZO COLISIONES————————————————
if(posx < 106.6){ //ZONA 1
// println(“ZONA 1″);
posy=constrain(posy,160,240);
contpasadasp1++;
}
if(posx>=106.6 && posx<213.2){//ZONA 2
println(“ZONA 2″);
if((posx>140&&posx<180)&&(posy>10&&posy<50)){//cambio 1 del personaje
if(contpasadasp1==0);
personaje=cambio1;
if(contpasadasp1>0 && contpasadasp2>0); //condición pa cambiar el personaje2
personaje=cambio2;
}
}
if(posx >=213.2 && posx < 320){//ZONA 3
println(“ZONA 3″);
posy= constrain(posy, 80,160);
if ((posy>95&&posy<140)&&(posx>290&&posx<315)){
println(“Cambio de nivel”);
contpasadasp2++;
posx=30;
println(“pasadas :”+contpasadasp2);
}
}
image(processinglab,0,0);
if(contpasadasp2>0){
image(processinglab2,0,0);
}
image(personaje, posx,posy);
// println(“accel X =”+ accelx);
//println(“accel Y =”+ accely);
}
}
void mousePressed(){
cam.settings();//click the window to get the settings
}
public void stop(){
cam.stop();//stop the object
super.stop();
}
Elaborado por: Camilo González
