le bout de code que j'ai modifié et qui a changé le comportement est celui ci :
pollens.add(new Pollen(tendrils.get(0)));
on prend le premier element de la liste trendrill ( donc la queue de l'objet ) comme référence pour le dernier élément de la liste pollen ( soit la tête ).
Quand tu trouves pas la solution a un problème, hésites pas a consulter les docs des fonctions utilisés, tu peux y trouver poruquoi ça ne marche pas.
Hors ligne
OK, ok... je comprends mieux... Et si, par exemple, je voulais qu'après être apparus à la position de la dernière instance les objets Pollen partent dans leur propre direction, où devrais-je placer le code pour modifier posP? directement dans draw() ou dans l'update de la class Pollen?
Merci de votre aide,
aR
Hors ligne
Si tu veux rester objet c'est à tes instances de se déplacer "seules" donc dans oui, dans l'update de Pollen.
Hors ligne
Et si tu veux allez plus loin dans l'objet, tu peux créer un objet Pollens, qui contiendra tes instances Pollen...
Hors ligne
citation :
tu peux créer un objet Pollens, qui contiendra tes instances Pollen...
Un objet qui contient des instances? Tu m'intéresses! Mais je ne vois pas trop ce que ça peut donner... Est-ce que je pourrais créer un objet qui ne contiendrait que certaines instances de mon objet Pollen (en fait, toutes les instances sauf la première créée, qui aurait les même coordonnées que la première instance de Tendril)?
Merci beaucoup à tous de votre aide,
aR
Dernière modification par Ars Robota (2012-01-24 11:07:18)
Hors ligne
Je pense que ce que veux dire cgiles (tu me dis si je me trompe) c'est qu'une classe "PollenManager" ou "Pollens" (peu importe) te permettrait de créer des Pollens facilement, où tu veux et peut être pour un autre projet.
Une des idée de l'objet est de supprimer les "liens forts" entre les classes. Aujourdh'ui ton projet fonctionne mais ta classe principale "connait" tous les pollens, ce qui n'est pas forcément intéressant car si tu voulais recréer un autre départ de pollens il faudrait que tu ais un autre tableau avec tous tes autres pollens, que tu les updates un après l'autre etc...
Si tu fais une classe "PollenManager" ou plutôt "PollenEmiter" qui gère ça pour toi, tu pourrais créer facilement plusieurs départs de pollen en faisant :
PollenEmiter p1 = new PollenEmiter(250,350); //départ de pollen en x250,y350
PollenEmiter p2 = new PollenEmiter(12,84);//départ de pollen en x12,y84
plus facile que de recréer un tableau, faire des boucles etc... et surtout bien plus lisible !
Hors ligne
Turboconnard explique mieux que je ne l'aurais fait. Et tu pourrais ajouter dans ton manager une fonction dédié uniquement a la première instance de ta liste
Hors ligne
D'aaaaacord!... En fait, le truc consisterait à créer une class avec une fonction dédiée à la création des instances (un équivalent à pollens.add) et une autre à la mise à jour des coordonnées (ce qui, si je ne me trompe pas, existe déjà avec update)?
Donc: une fonction qui crée les instances, une fonction qui met à jour la première instance et une dernière qui met à jour les autres, le tout appelé dans une boucle for à l'intérieur de draw. J'ai bon, m'sieur?
Hors ligne
Je crois que t'es pas mal !
Hors ligne
Et tu peux aller plus loin en créant deux méthode update uune pour le premier, une pour les suivant, et les mettre dans ta fonction update principale. et tu peux directement faire ta boucle for dans l'update de pollenManager, ainsi ton code draw se résumera a la création d'un pollenManager, son update et son display.
Dernière modification par cgiles (2012-01-25 15:13:28)
Hors ligne
... Le problème va être de mettre tout ça en pratique et c'est loin d'être gagné! Si vous avez des suggestions je suis pas contre...
Hors ligne
Il suffit simplement de reporter dans une classe ce que tu fais actuellement en setup et draw.
Ensuite tu peux utiliser un algorythme :
//creer les listes
//intialisaer les listes
//modifier la première valeur
//copier les valeurs en suivant
//ect...
Hors ligne
Bon alors ceci est un premier modèle (volontairement sommaire et incomplet, histoire de résumer):
Pollen p1; int nbr; void setup() { p1=new Pollen(x, y); nbr=20; } void draw() { for(int i=0;i<nbr;i++) { p1.emitter(x, y); p1.update(); p1.update(); p1.ink(); } } class Pollen { PVector posP; Pollen(float _x, float _y) { posP=new PVector(_x, _y); } Pollen(Tendril lastTendril) {// superflue? posP=new PVector(lastTrendil.posT.x, lastTrendil.posT.y); } void emitter(float x, float y) { posP.set(lastTendril.posT.x, lastTendril.posT.y);// possible? } void update1() { } void update2() { } void ink() { noFill(); stroke(0, 255, 0); ellipse(posP.x, posP.y, 8, 8); } }
Voyez-vous de grosses erreurs pour l'instant, ormis le fait que les fonctions update ne sont pas écrites?
Merci beaucoup.
Dernière modification par Ars Robota (2012-01-25 17:17:27)
Hors ligne
a rajouté a la fin de ton code , la classe pollenManager :
et voila a quoi peut ressembler ton code principal avec ça :
PollenManager pollenManager; void setup() { size(400, 400); frameRate(30); smooth(); pollenManager=new PollenManager(); } void draw() { background(255); pollenManager.update(); pollenManager.display(); }
Dernière modification par cgiles (2012-01-25 17:38:45)
Hors ligne
Merci cgiles, je vais essayer ça mais processing me dit, à propos de p1, que "field Component.x is not visible"... et si je supprime les paramètres x et y, il me dit que Pollen n'est pas défini. J'ai beau ré-examiner le code de long en large, je ne vois pas de quoi il s'agit.
Dernière modification par Ars Robota (2012-01-25 18:18:07)
Hors ligne