/* UPF-IUA Màster d'Arts Digitals joan soler-adillon (www.joan.cat) Hacia un PONG, II... */ float posX, posY, velX, velY; int sz = 50; int obstacleX, obstacleY; boolean tocandoObstaculo = false; boolean tocandoObstaculoPrev = false; int szOfObstacle = 50; void setup(){ size(400,250); posX = width/2; posY = height/2; velX = random(1,5); velY = random(1,5); fill(255,255,192); strokeWeight(3); smooth(); frameRate(60); noCursor(); } void draw(){ background(0); //comprobamos la posición X if((posX-sz/2<=0)||(posX+sz/2>=width)){ velX = -velX; } //comprobamos la posición Y if((posY-sz/2<=0)||(posY+sz/2>=height)){ velY = -velY; } //actualizamos el booleano "tocandoObstaculo": if(abs(posX-obstacleX) <= sz/2){ //ahora comprobamos en el eje Y: if((dist(posX,posY,obstacleX,obstacleY-szOfObstacle/2) <= szOfObstacle/2)||(dist(posX,posY,obstacleX,obstacleY+szOfObstacle/2) <= szOfObstacle/2)){ tocandoObstaculo = true; } } else { tocandoObstaculo = false; } //COMPROBAMOS OBSTÁCULO: if(tocandoObstaculo == true){ if(tocandoObstaculoPrev != true){ //con esto evitamos que se "enganche" la bola al obstáculo velX = -velX; } } //println(abs(posX-obstacleX)); //actualizamos tocandoObstaculoPrev para el siguiente ciclo del bucle tocandoObstaculoPrev = tocandoObstaculo; //actulizamos obstáculo, según el mouse: obstacleX = mouseX; obstacleY = mouseY; //actualitzamos las posiciones posX = posX+velX; posY = posY+velY; //dibujamos noStroke(); ellipse(posX,posY,sz,sz); //dibujamos obstaculo: stroke(255,192,192); line(obstacleX,obstacleY-szOfObstacle/2,obstacleX,obstacleY+szOfObstacle/2); }