int balleX; int balleY; int vitesseX; int vitesseY; int diametre = 20; int rayon; int obstacleX; int obstacleY; int obstacleL; int obstacleH; void setup () { size (800, 600); obstacleL = 100; obstacleH = 100; obstacleX = width / 2 - obstacleL; obstacleY = height / 2 - obstacleH; // Faire apparaître la balle aléatoirement dans la zone supérieur gauche balleX = int (random (diametre, obstacleX - diametre)) + width / 2; balleY = int (random (diametre, obstacleY - diametre)); // Donner une vitesse aléatoire à la balle; vitesseX = int (random (-5, 5)); vitesseY = int (random (-5, 5)); rayon = diametre / 2; } void draw () { background (0); obstacleY = mouseY; // Gestion du rebondissement en X if (balleX < rayon || balleX > width - rayon) { // Rebondissement des murs en X vitesseX = -1 * vitesseX; } else if ((balleY - rayon) > obstacleY && (balleY + rayon) < (obstacleY + obstacleH)) { // Est-ce que la balle est dans l'espace Y de l'obstacle if (vitesseX > 0) { if (balleX + rayon > obstacleX && balleX - rayon < obstacleX) { vitesseX = -1 * vitesseX; } } else { if (balleX + rayon > obstacleX + obstacleL && balleX - rayon < obstacleX + obstacleL) { vitesseX = -1 * vitesseX; } } } // Gestion du rebondissement en Y // Méthode en utilisant un gros IF if ((balleY < rayon || balleY > height - rayon) || // Pour les murs en X (vitesseY > 0 && (balleY + rayon) > obstacleY && balleY - rayon < obstacleY && (balleX - rayon) > obstacleX && (balleX + rayon) < (obstacleX + obstacleL)) || (vitesseY < 0 && (balleY - rayon) < (obstacleY + obstacleH) && (balleY + rayon > obstacleY + obstacleH) && (balleX - rayon) > obstacleX && (balleX + rayon) < (obstacleX + obstacleL))) { vitesseY = -1 * vitesseY; } balleX = balleX + vitesseX; balleY = balleY + vitesseY; ellipse (balleX, balleY, diametre, diametre); fill (255); rect (obstacleX, obstacleY, obstacleL, obstacleH); }
Processing – Rebondissement sur objet
par
Étiquettes :
Laisser un commentaire