Salut à toutes et tous,
Je voudrais créer une instance d'une class B avec les coordonnées de la dernière instance d'une class A (pour info, les coordonnées en question sont présentées sous forme d'un PVector(_x, _y) et sont créées dans une méthode). Mon problème est que je ne sais pas comment récupérer, dans la méthode draw, une variable de la dernière instance d'un objet dans la première instance d'un autre objet.
Ci-joint mon code (peut-être pas très propre, j'ai bidouillé un exemple d'Emoc - désolé!)
Hors ligne
Oups, j'allais oublier: merci beaucoup par avance!
Alex
Hors ligne
// pollens.add(new Pollen(width/2, height/2));//ici je veux récupérer les coordonnéess x et y
var lastPollen = pollens.get(pollens.size()-1);
pollens.add(new Pollen(lastPollen.posP.x,lastPollen.posP.y));
moi je ferrais ça pour créer un pollen à la place du dernier pollen créé
si c'est pour le tendrill tu peux faire comme ça :
var lasttendril = lasttendril.get(lasttendril.size()-1);
pollens.add(new Pollen(lasttendril.posP.x,lasttendril.posP.y));
Hors ligne
Bonjour,
Je n'ai pas regardé le détail de ton code mais, d'une façon générale, pour pouvoir agir sur la dernière instance crée d'une classe A, tu peux créer une variable de type A au début du programme et mettre à jour cette variable dans le constructeur de la classe A.
Comme ça, elle pointe toujours vers le dernier objet "A" crée.
Comme ça tu peux l'utiliser pour t'adresser aux méthodes de cette dernière instance.
Exemple : (Remarque : ici, les objets crées deviennent candidats au ramasse-miettes au fur et à mesure !)
A objetA;
int n=0;
void setup() {
size(300,300);
frameRate(3);
}
void draw() {
n++;
new A(n);
objetA.display();
}
class A {
int nombre;
A(int nb) {
nombre=nb;
objetA=this;
}
void display() {
println(nombre);
}
}
Hors ligne
Effectivement, comme Turboconnard, je te conseille de gérer ça avec une liste ordonnée de tes objets...
[Les attributs de classe sont des variables partagées par toutes les instances d'une même classe, il faut utiliser le mot clé static pour en déclarer un :
exemple classique d'utilisation d'un attribut de classe, le nombre d'instance d'une classe
class MaClasse{
static int nombreInstanceClasse = 0;
public MaClasse(){
nomrbeInstanceClasse++;
}
}
]
Hors ligne
Oui... la solution d'Eric est trop limpide pour que mon esprit tordue ait pu y penser...
Hors ligne
Je ne conseille pas du tout l'utilisation de variables static pour ce genre de code...
Effectivement la méthode de EricRG focntionne dans ce cas mais c'est pas très "Objet". Dans le cas de Ars Robota on a déjà des Arraylists avec les instances et c'est plus "Objet" de passer des coordonnées au constructeur plutôt que d'utiliser une variables static.
Ex : si on devait avoir deux fenetres distinctes dans l'appli avec les pollens... les positions ne seraient pas bonnes
Hors ligne
"Je ne conseille pas du tout l'utilisation de variables static pour ce genre de code... "
On est d'accord... je mettais juste un exemple d'attributs de classe pour qu'Ars comprenne de quoi il en retournait quand il parlait de variables de classe.
Hors ligne
Waouh! Merci beaucoup les codelaborantins pour vos réponses, je vais jeter un coup d'oeil atentif à tout ça.
aR
Hors ligne
citation :
var lasttendril = lasttendril.get(lasttendril.size()-1);
@turboconnard: Ca m'a l'air intéressant mais je ne sais pas quel type de variable utiliser pour déclarer lasttendril... processing me renvoi une erreur si j'utilise var.
Une idée?
Merci beaucoup,
aR
Dernière modification par Ars Robota (2012-01-21 16:38:23)
Hors ligne
OK, j'ai réussi à insérer la suggestion de turboconnard tout en me débarrassant des messages d'erreur... seulement la première instance de ma class Pollen continue de suivre la première instance de la class Tendril...
Hors ligne
et faudrait qu'elle fasse quoi la premiere instance de pollen ?
(désolé pour le var, des habitudes d'autres langages)
Hors ligne
J'ai un peu retoucher ton code mais je sais pas si c'est ce que tu veux :
La fonction add ajoutes un dernier element a la liste, j'initie un element pollen, en prenant les valeurs x et y du premier element de tendril
J'ai un peux otimiser ton code, c'est aexpliquer dans les commentaires
En gros j'ai typer les classes, pour rendre le code plus simple, ajoutez une nouvelle initiation d'instance pour pollen, et changer ta façon de générer le mouvement aléatoire, en utilisant le noise, test tu verras
Hors ligne
Et bien la première instance de Pollen devrait apparaître aux mêmes coordonnées que la dernière instance de Tendril, puis partir vers le haut de la fenêtre (style évaporation).
Merci de ton aide.
aR
Dernière modification par Ars Robota (2012-01-21 20:07:42)
Hors ligne
@cgiles: Je n'avais pas vu ton post. C'est exactement ça, merci beaucoup de ton aide je suis en train d'étudier ça.
citation :
Je comprends mieux le fonctionnement des objets (grâce à tes commentaires). Il me semblait bien que ça devait donner quelque chose comme ça mais je ne savais pas comment créer une instance de Pollen correspondant à la première instance (et non pas la dernière comme je le pensais) de Tendril, ni où placer les lignes de code supplémentaires.
Dernière modification par Ars Robota (2012-01-22 17:51:39)
Hors ligne