bonjour
je souhaiterais faire apparaître une balle aléatoirement qui touche le centre et qui reparte sur les bords.
j'ai fait un programme qui fonctionne normalement quant la fonction random n'est pas utilisée ,mais quant je
l'utilise sa clignote de partout et je ne comprend pas pourquoi.
merci
float deplacementX;
float deplacementY;
float x;
float y;
void setup() {
size(400,400);
deplacementX = 1;
deplacementY = 1;
fill(0,0,0,255);
}
void draw() {
background(255);
rect(400/2,400/2,20,20);
x=random(0,200);
y=random(0,200);
x =x+deplacementX;
y=y+deplacementY;
if (x >200||y>200) {
deplacementX = -1;
deplacementY=-1;
}
if (x < 0||y<0) {
deplacementX = 1;
deplacementY = 1;
}
ellipse(x,y,15,15);
}
Hors ligne
Bonjour,
Le problème, c'est que tu initialise à chaque frame la position de ta balle avec le random.
Je te propose de le faire dans le setup() :
float deplacementX; float deplacementY; float x; float y; void setup() { size(400, 400); deplacementX = 1; deplacementY = 1; fill(0, 255); x = random(0, 200); y = random(0, 200); } void draw() { background(255); rect(width / 2, height / 2, 20, 20); x += deplacementX; y += deplacementY; if ((x > 200) || (y>200)) { deplacementX = -1; deplacementY = -1; } if ((x < 0) || (y < 0)) { deplacementX = 1; deplacementY = 1; } ellipse(x, y, 15, 15); }
Cela te convient-il ?
Hors ligne
bonjour
merci pour tes corrections ,mais il me semble que j’avais testez ce système et la balle apparaît toujours au même endroit donc elle fait toujours la même trajectoire,avec ce générateur de positions aléatoire je voulais faire apparaître la balle sur d'autres endroits dans l’écran ,mais à première vue ça ne fonctionne pas ,et je ne sais pas pourquoi ,pourtant cala parait logique .Par contre si on enlève la trajectoire de la balle le générateur fonctionne on vois bien les balles aparaitres à différentes positions c'est pour ça que je ne comprend pas .enfin si tu as une idée elle serai la bienvenue.
remerciements
fabrice
Hors ligne
Genre ceci :
PVector centre; PVector position; PVector deplacement; void setup() { size(400, 400); fill(0, 255); rectMode(CENTER); position = new PVector(random(0, width), random(0, height)); centre = new PVector(width / 2, height / 2); deplacement = PVector.sub(centre, position); deplacement.normalize(); } void draw() { background(255); rect(width / 2, height / 2, 20, 20); position.add(deplacement); if ((position.x > width) || (position.y > height) || (position.x < 0) || (position.y < 0) || (PVector.dist(centre, position) < 15) ) { deplacement.mult(-1); } ellipse(position.x, position.y, 15, 15); }
Hors ligne
bonjour
merci pour le programme,je viens de le tester,mais la balle apparaît à différentes positions si tu relance le programme sinon elle reste toujours au même endroit,c'est pour cela que j'avais mis les random dans draw,
j'ai donc changez les fonctions random de ton programme les balles apparaissent bien dans des positions différentes
mais il n'y a plus de rebonds c'est pourquoi je ne comprends pas pourquoi ça fonctionne sans le rebond et pas avec?
Je pense avoir compris en testant un autre programme il faudrait mettre la fonction random dans un sous programme et appeler ce sous programme à la fin du rebond de la balle et ainsi changer sa position,ce qui permettrai au cycle de se finir,enfin ce n'est pas très clair ce que je raconte mais je pense que tu as compris d'ou venais le problème.Je vais essayer de tester ce truc,maintenant i ne me reste plus qu'à regarder comment faire un sous-programme avec processing.
remerciements
fabrice
Hors ligne
Bonjour,
Je n'ai pas compris ce que tu souhaites. Il faut décrire précisément le déroulement de ton idée, mais peut-être est-ce encore confus dans ton esprit.
PVector centre; PVector position; PVector deplacement; void setup() { size(400, 400); fill(0, 255); rectMode(CENTER); position = new PVector(random(0, width), random(0, height)); centre = new PVector(width / 2, height / 2); deplacement = PVector.sub(centre, position); deplacement.normalize(); deplacement.mult(2); } void draw() { background(255); rect(width / 2, height / 2, 20, 20); position.add(deplacement); if ((position.x > width) || (position.y > height) || (position.x < 0) || (position.y < 0)) { position.set(random(0, width), random(0, height)); deplacement = PVector.sub(centre, position); deplacement.normalize(); deplacement.mult(2); } if (PVector.dist(centre, position) < 15) { deplacement.mult(-1); } ellipse(position.x, position.y, 15, 15); }
Hors ligne
bonjour
en fin de compte je souhtais faire apparaître des balles qui bougent en même temps,j'ai fait un programme mais une seule balle bouge.
int deplacementX, deplacementY;
float x, y,dx,dy;
int i;
void setup() {
size(800,800);
deplacementX = 5;
deplacementY = -3;
noStroke();
fill(0,0,0,255);
}
void draw() {
dessin_balles();
bouger();
rebondir();
dessiner();
}
void dessin_balles()
{
if(i<20)
{
x=random(0,400);
y=random(0,400);
i=i+1;
}
ellipse(x,y,15,15);
}
void rebondir() {
if (x > width) {
deplacementX = -5;
}
if (x < 0) {
deplacementX = 5;
}
if (y > width) {
deplacementY = -3;
}
if (y < 0) {
deplacementY = 3;
}
}
void bouger() {
x = x + deplacementX;
y = y + deplacementY;
}
void dessiner() {
ellipse(x,y,15,15);
}
la les balles apparaissent de façon alleatoire
Hors ligne
Juste une petit remarque sur la forme...
Il est possible d'afficher du code sympathiquement en utilisant les balises "code" ET
d'afficher du code JAVA sympathiquement en utilisant la syntaxe "code=p5" dans la première balise...
Ce qui donne quelque chose de formidable comme :
void draw() { for (int i=0; i<10; i++) { print("C'est formidable"); }
Et il y a plein de couleurs...
Et les indentations sont respectées...
Et c'est la fête...
Bon courage pour le reste...
Dernière modification par Olivier (2013-09-17 14:23:35)
Hors ligne
C'est plus clair.
Pour cela il faut utiliser un tableau "Array" pour pouvoir traiter l'ensemble des balles avec une boucle. Comme une balle a une position et une direction, on peut structurer cela avec une classe "class".
Balle[] balles; void setup() { size(400, 400); balles = new Balle[20]; for (int i = 0; i < balles.length; i++) { balles[i] = new Balle(random(0, 400), random(0, 400), 8); } } void draw() { background(255); for (int i = 0; i < balles.length; i++) { balles[i].mettreAJour(); balles[i].afficher(); } } class Balle { PVector position; PVector direction; int rayon; Balle(float _posX, float _posY, int _rayon) { position = new PVector(_posX, _posY); rayon = _rayon; direction = PVector.random2D(); direction.mult(2); } void mettreAJour() { position.add(direction); if ((position.x < 0) || (position.x > width)) { direction.x *= -1; } if ((position.y < 0) || (position.y > height)) { direction.y *= -1; } } void afficher() { fill(0); ellipse(position.x, position.y, 2 * rayon, 2 * rayon); } }
Hors ligne