Bonjour,
C'est normal que trois lettres apparaissent, car tu ne fais pas le tri dans les évènements. Donc tu as un KeyEvent.PRESS, un KeyEvent.TYPE et un KeyEvent.RELEASE. D'ailleurs quand tu appuies sur une touche, il n'y a que deux lettres qui s'affichent la troisième vient quand tu relâches la touche.
Donc, voici ton bout de code :
public void keyEvent(processing.event.KeyEvent evenement) { if (curseur && (evenement.getAction() == KeyEvent.PRESS)) { taper = taper + evenement.getKey(); if (evenement.getKey() == RETURN) { sauvegarder = taper; taper = ""; } } }
Dernière modification par Mushussu (2014-11-11 10:24:57)
Hors ligne
Ah d'accord! J'avais tenté de remédier à ce problème avec le "switch" mais il me paraissait trop complexe pour mon usage. Ceci explique donc cela. Merci pour ton aide.
Hors ligne
Bonsoir,
j'avance prudemment dans la réalisation de mon projet, toujours accaparé par la classe "input", après avoir réalisé un changement de direction toutes les "x" secondes pour un plus grand réalisme (dérisoire pour le moment, mais que je compte entreprendre très bientôt).
J'ai donc réalisé mon premier champ de saisie, avec comme but de permettre à l'utilisateur de rentrer le nombre de balles voulues, et qu'une fois le nombre saisie, qu'il y ait un ajout... Je sais que cela est complexe, car induisant de recréer toutes les balles, mais je pensait que l'ayant mis dans le "draw", cela s’alignerait sur le nouveau nombre de balles.
Je me demande donc par quel moyen je peux faire ce changement de manière dynamique. Dois-je faire un void qui engloberait tous les autres et s'enclencherait à chaque fois que l'utilisateur saisit un nouveau nombre ? Ou une simple redirection de la variable sauvergarder vers le programme principal suffirait ?
Je joins ci-dessous mon nouveau code.
Hors ligne
Bonjour,
Je n'ai pas bien saisi ce que tu souhaites faire. Ce que j'ai cru entrevoir, c'est que ton champ saisi sert à ajouter un nombre de balles, aux balles déjà en place. Pour cela, comme tu as déjà une méthode ajouter() il suffit d'ajouter le nombre de balles correspondant.
J'ai testé ton programme, comme je n'ai pas de pavé numérique, je suis obligé d'appuyer sur la touche shift qui ajoute un caractère étrange à ton champ de saisie.
Hors ligne
Oui, en effet. J'ai déjà la méthode ajouter(), mais le problème est que lorsque je choisis le nombre de balles, le programme s'est déjà lancé. Je pensais, comme toi d'après ce que j'ai compris, que le nombre de balles serait modifié, mais ce n'est pas le cas.
J'ai pensé que le problème venait du fait que j'avais mis "nbInfected = sauvegarder;" dans ma classe, ce qui fait qu'il n'est peut-être pas accessible à la méthode ajouter(). Ou dois-je simplement mettre une nouvelle méthode ajouter() dans la classe qui se produirait lorsque l'utilisateur change la saisie ? Bien sûr, cette nouvelle méthode resterait ancrée sur la première fenêtre.
Sinon, certains caractères ne sont en effet pas reconnus (enter,return,shift....) et j'ai déterminé un nombre maximum de chiffres.
J'ai tenté des modifications, sans succès :
void setup() { time1 = second(); frameRate(100); smooth(); size(1200, 850); infected = new ArrayList<Infection>(); ajouter(nbInfected); ajouter(int(sauvegarder)); c = new Cadre(); c.setTitle("Panneau de configuration"); }
public void keyEvent(processing.event.KeyEvent evenement) { if (curseur && (evenement.getAction() == KeyEvent.PRESS)) { if (taper.length() < 4) { taper = taper + evenement.getKey(); } if (evenement.getKey() == ENTER) { sauvegarder = taper; taper = ""; int(sauvegarder); println(sauvegarder); } } }
Dernière modification par alexis51151 (2014-11-16 08:25:36)
Hors ligne
OK, j'ai compris ton erreur. Effectivement il ne suffit pas de changer la variable pour que le nombre de balles évolue. Quand le la touche ENTER est pressée il faut faire appel à une méthode pour ajouter des balles.
Dans le code ci-dessous, je fais un traitement des caractères entrés.
public void keyEvent(processing.event.KeyEvent evenement) { if (curseur && (evenement.getAction() == KeyEvent.PRESS)) { if (evenement.getKey() == ENTER) { ajouter(Integer.parseInt(taper)); println(taper); taper = ""; return; } if ((taper.length() < 4) && (evenement.getKey() >= 48) && (evenement.getKey() <= 57)) { taper = taper + evenement.getKey(); } } }
Je fais appel à la méthode ajouter(), ce qui n'est pas optimal. Dans ce genre de problème, il est utile de créer une classe qui serait le système de balles avec les méthodes afférentes qui servent à gérer l'ajout et la suppression des balles. On peut ainsi facilement passer l'unique instance de cette en paramètres dans les méthodes des autres classes.
Regarde ici :
http://processing.org/examples/simplepa … ystem.html
Hors ligne
Merci! Je comprends donc que le getKey() entre 48 et 57 correspond aux chiffres, ce que je cherchais depuis longtemps! Je vais désormais utiliser le code que tu m'as conseillé pour enlever des balles, ainsi qu'une rapide recherche pour connaître des correspondances en getKey de certains caractères.
Où puis-je trouver ces correspondances en getKet() ? J'ai cherché sur la documentation de Processing, sans succès hormis les réponses mais pour Java.
Dernière modification par alexis51151 (2014-11-16 11:37:47)
Hors ligne
Oui, pardon, j'ai été un peu vite getKey() renvoie un char. Or les chiffres sont codés dans la table ASCII de 48 à 57 :
http://www.asciitable.com
Hors ligne
J'achève la partie ajouter/enlever des balles de mon programme mais je tombe sur un autre problème : lorsqu'il s'agit d'enlever une balle, si l'on enlève plus de balles qu'il n'y en a, j'ai une erreur (ce qui est logique somme toute).
Pour remédier à cela, j'ai tenté de vérifié dans mes différentes boucles que je n'enlèverai un nombre de balles que si le nbInfected (nb de balles) est supérieur ) 0.
Mais, même en ayant essayé avec l'ensemble des void qui interagissent avec cette partie du programme, je ne parviens pas à faire cesser cette erreur.
J'ajouterai par la suite des boutons pour ajouter/enlever, mais le problème actuel réside dans cette erreur, que je ne parviens pas à résoudre.
Je pense qu'une solution serait de rendre publique taper, qui lui évolue car nbInfected est toujours égal à 4, mais je ne sais pas comment faire.
Je mets le code en .zip ci-dessous.
Hors ligne
Bonsoir,
Tu ne fais pas de test pour savoir si le nombre d'éléments à enlever est inférieur à la taille de ton tableau. Pour connaître la taille actuelle de ton tableau, c'est la méthode size() qu'il faut utiliser.
D'autre part, j'ai constaté que tu faisais à chaque tour appel à la méthode contamination() or il n'est nécessaire qu'une seule fois dans le setup().
Voici la méthode enlever() que je te propose :
Dernière modification par Mushussu (2014-11-23 18:47:42)
Hors ligne