Bonjour à toutes et à tous !
Newbie d'élite sur Processing, je me suis attaquée à un morceau un peu gros pour moi toute seule.
Voici le topo:
J'ai envie de créer une grille dont les cases auraient telle probabilité d'interagir ou non avec le passage de la souris. Emoc m'a d'ailleurs aiguillée à ce propos:
citation :
Ce que tu souhaites faire est tout à fait possible, tu peux tirer une probabilité en tirant un nombre au hasard et en comparant le résultat, vite fait ça donne ça :
float i = random(100);
if (i < 30) {
println ("30 % de chance que ...");
} else if ((i >= 30) && (i < 50)) {
println ("20 % de chance que ...");
} else if ((i >= 50) && (i < 90)) {
println ("40 % de chance que ...");
} else {
println ("10 % de chance que ...");
}
De mon côté, j'ai la génération de grille, j'ai défini les couleurs que je voulais voir afficher, j'ai adapté le tout à la taille de l'écran, etc.
color[] allcolors= {color(0,174,239), color(236,0,140), color(255,242,0), color(0)}; int macouleur=-1; void setup(){ size (screen.width, screen.height); noStroke(); for(int x=0; x<width; x+=50) { for(int y=0; y<width; y+=50){ rect(x, y, 50, 50); macouleur = floor(random(allcolors.length)); fill(allcolors[macouleur]); } } }
Il faut donc:
_Que j'introduise l'interactivité avec le roll-over de la souris (avec mouseX et mouseY ?)
_Que je définisse la condition qui, au passage de la souris sur une case, permet de déclancher une interaction parmi une liste de 4 interactions.
_Que je définisse ces 4 interactions sous forme d'équation: "créer une nouvelle case", "éliminer la case", "permuter avec une autre case (ou changer de couleur"), "ne rien faire".
Et c'est sur ces points que je bloque (forcément, sinon c'est pas drôle)
J'ai trouvé cette réalisation qui utilise un système de boutons sur grille bien que je n'arrive pas encore à décrypter tout le code: http://www.openprocessing.org/visuals/?visualID=43146
En partant de ça je pense pouvoir extraire de quoi impliquer la souris dans mon code, mais je n'ai par contre aucune idée de ce qu'il faut faire pour créer telle ou telle interactivité suite au passage de la souris sur une case.
Y a t-il une bonne âme pour m'aider ? Me filer des liens d'exemples, des sources, des codes, m'expliquer gentillement ce qu'il faut faire, ou m'expliquer où sont installées les cordes pour se pendre ?
Hors ligne
Salut,
Si tu veux créer l'interactivité, le mieux est de créer une classe instancié pour le nombre de carré que tu veux.
C'est d'ailleurs ce qui est fait dans l'exemple d'openProcessing.
Tu feras le code "générique" que tu pourras utiliser, réutiliser autant que tu veux.
Hélas, l'orienté objet, c'est pas ce qu'il a de plus facile pour débuter.
Le mieux pour apprendre est de commencer avec des objets simples et celui que tu veux faire est assez conséquent.
Dans le floss manuel en pdf, il a un chapitre sur le sujet.
@+
Hors ligne
Hello,
C'est une bonne suggestion que de regarder comment fonctionne la programmation objet, par exemple avec ce tutoriel http://processing.org/learning/objects/
Mais pour ce que tu veux faire, tu peux aussi te contenter d'un tableau à 2 dimensions, avec dans chaque case l'état de la case, et modifier cet état en fonction de la position de la souris ou d'évènements liés à la souris (mousePressed(), etc.)
Pour t'avancer un peu, voila le code pour dessiner une grille de 4x4 avec pour chaque case un état différent, cet état fixe la couleur. Il faut que tu ajoutes dans draw() après la double boucle, les tests qui vont définir l'état des cases au prochain parcours de la boucle draw()
int[][] cases = {{0,1,2,3}, {3,2,1,0}, {2,3,0,1}, {1,0,3,2}}; float x_start = 50; float y_start = 50; void setup() { size(500, 500); rectMode(CORNER); } void draw() { background(0); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { int val = cases[i][j]; switch(val) { case 0: fill(255, 0, 0); // rouge break; case 1: fill(255, 255, 0); // jaune break; case 2: fill(0, 255, 0); // vert break; case 3: fill(0, 0, 255); // bleu break; } noStroke(); rect(x_start + (j * 100), y_start + (i * 100), 100, 100); } // rajouter les tests ici! } }
Hors ligne
Salut ! J'attendais d'avoir fini de bidouiller pour vous remercier, vu que je suis proche du but, mais finalement je ne vais pas aussi vite que prévu.
Donc en attendant que le programme soit prêt: merci pour votre aide
PS: Quelqu'un sait comment déclancher une impression (avec une touche du clavier) à partir d'une imprimante reliée au pc ?
Hors ligne
color[] allcolors= {color(0,174,239), color(236,0,140), color(255,242,0), color(0)}; int macouleur=-1; void setup(){ size (screen.width, screen.height); noStroke(); for(int x=0; x<width; x+=50) { for(int y=0; y<width; y+=50){ rect(x, y, 50, 50); macouleur = floor(random(allcolors.length)); fill(allcolors[macouleur]); } } } void draw(){ noStroke(); for (int x=0; x<width; x+=50){ for(int y=0; y<height; y+=50){ if ((mouseX >= x)&&(mouseX <= x+50)){ if ((mouseY >= y)&&(mouseY <= y+50)) rect(x, y, 50, 50); macouleur = floor(random(allcolors.length)); fill(allcolors[macouleur]); } } } }
Hello World !
Voici où j'en suis, il ne me manque plus qu'une façon d'imprimer le résultat obtenu avec une touche du clavier. Si vous voulez tester le programme, l'idéal est de le lancer avec PRESENT au lieu de RUN
Hors ligne
Hell-i a écrit:
(...) il ne me manque plus qu'une façon d'imprimer le résultat obtenu avec une touche du clavier.
Bonjour Hell-i,
Dans un autre fil de discussion, Marion se pose la même question. Il faut arriver à lancer une impression en ligne de commande, ce qui dépend du système d'exploitation que tu utilises. Lequel d'ailleurs ?
Une fois que ça marche tu peux faire lancer la commande par processing, avec un peu de code java
L'autre discussion : http://codelab.fr/2927#p15323
Sinon il y a une autre solution, dont je parle dans l'autre discussion.
Hors ligne
hello,
tu peux aussi utiliser la command open() de processing pour lancer ton impression.
Par ex, si tu es sous linux, ça pourrait donner quelque chose comme ça :
open("cat monImage.jpg > /dev/lp0");
Hors ligne
Bonsoir !
J'utilise windows, mais je peux aussi basculer sur environnement mac, et c'est cet environnement qu'utilise Marion si je ne m'abuse.
Avec ta solution Oyster, il suffit que je trouve la commande java qui lance l'impression à partir d'un dossier dans lequel irait des images stockées, c'est ça ?
Hors ligne
Salut hell-i,
Ce n'est pas spécialement une commande java, c'est une commande bash. Un peu comme si sous windows tu lançais une application en ligne de commande (démarrer -> executer -> cmd, si je ne m'abuse).
Il faut que tu trouves comment lancer une impression de fichier sous win, en ligne de commande, puis tu met cette commande dans la fonction open(), dans processing.
open te permet de lancer une application à partir de processing :
sur la page processing/reference/open, on peut lire :
citation :
On Windows, the parameters are sent to the Windows shell via "cmd /c"
Ça devrait t'aiguiller, je l'espère.
+++
Hors ligne
Merci ! Je vais farfouiller sur mon pc ainsi que sur la toile.
Hors ligne
Bonjour à tous,
J'ai fait une exportation en applet de ma petite application, et j'aimerai la mettre sur mon blog pour permettre à tout le monde de jouer un peu avec. Sauriez-vous comment la mettre en ligne, étant donné que je passe par un hébergeur ?
Hors ligne
Hell-i a écrit:
Sauriez-vous comment la mettre en ligne, étant donné que je passe par un hébergeur ?
Ca dépend de la structure de ton blog :
Peux tu te connecter chez ton hébergeur par ftp ?
oui -> tu uploades tes fichiers dans un dossier. Après avoir exporté depuis processing tu récupères le bout de code html que tu mets dans ton billet de blog (rédigé en html) en prenant bien soin de faire pointer les liens au bon endroit.
non -> je ne sais pas; Il y a tellement de systèmes possibles, il faudrait que tu donnes des détails.
Hors ligne
Pages: 1