bonjour
je voudrait savoir est t'il possible de crée une class avec variable comme instruction
je m'explique
ex: class maclass = new class(0.2, 10);
mais es-ce que sa ce fait
ex: class maclass = new class(variable0, variable1);
parce que la variable1 me renvoie toujours 0 dans la class même si elle est a 10
merci d'avance
Hors ligne
Oui, bien sûr :
TestClass test; void setup() { test = new TestClass(30, 25.6); noLoop() ; } void draw() { println("x : " + test.sortieX() + ", y = " + test.sortieY()); } class TestClass { int x; float y; TestClass(int _x, float _y) { x = _x; y = _y; } int sortieX() { return x; } float sortieY() { return y; } }
Hors ligne
bonjour,
Oui vous pouvez créer une instance de classe avec passage de variable.
Il faut créer un constructeur en conséquence.
Hors ligne
re bonjour
desolé Mushussu mais mon but est de faire entrer une variable et non de la faire sortir
si je prend ton exemple
TestClass test; int Xpos, Ypos; void setup() { test = new TestClass(Xpos, Ypos); noLoop() ; } void draw() { Testclass.display(); } class TestClass { int x; int y; TestClass(int _x, int _y) { x = _x; y = _y; } void display() { println(x); } }
mon probleme est que suite a ce code le println(x) renvois 0 alors qu'il devrait me retourner le nombre de la variable Xpos ya t'il quelque chose que je n'ai pas compris ?
merci pour vos reponse
Dernière modification par imdidi (2013-03-28 21:59:39)
Hors ligne
Salut,
C'est pas plustôt test.x que tu veux afficher ?
Dernière modification par Marty (2013-03-28 22:02:28)
Hors ligne
salut non ses pas test.x que je veut afficher
en gros je fait une table avec tuio
j'ai une class pour eviter de tout re ecrire 100 fois
jai un arc quand je tourne mon objet l'arc monte
donc j'ai une variable "rotation0" dans une methode qui recupere l'information de tuio
mais il faut que sa soit diferent pour chaque objet donc rotation0 pour le fid0 rotation1 pour le fid1 etc..
mais quand je met l'instance
class maclass = new class(rotation0); class TestClass { float fidAngle; TestClass(float _fidAngle) { fidAngle = _fidAngle; } void display() { float a = map(fidAngle,0,6.30,1.5,4.8); arc(30,30,70,70,1.5,4.8); arc(30,30,70,70,1.5,(a)%4.8); } }
fidAngle me donne toujours 0 mais si je remplace "rotation0" par 4.0 par exemple sa fonctionne
sauf que il faut que se soit "rotation0" puis que rotation0 est contrôler par mon fid0
Hors ligne
oui, mais fidAngle n'existe pas en dehors de ta classe. Il faut faut récupérer la valeur de fidAngle de chaque objet créé par :
maClass.fidAngle;
En gros il faut déclarer ton objet :
Testclass maClass;
Et dans setup() par exemple initialiser ton objet :
maClass = new Testclass(rotation0);
et dans ta fonction map, récupérer la valeur par :
maClass.fidAngle;
Dans ton exemple la création de ton objet serait plutôt :
Testclass maClass = new Testclass(rotation0);
Dernière modification par Marty (2013-03-28 23:13:51)
Hors ligne
salut
Merci pour ta réponse éclairer maintenant je comprend mais en fesant le changement
fidGui.fidAngle dans ma fonction map
sa me dit :"cannot make a static reference to the non static field fidgui.fidAngle"
sa serais causé par quoi cette erreur ?
Hors ligne
Cette erreur apparaît car tu ne fais pas encore bien la différence entre classe et instance de classe. Dans ton exemple plus haut celui de 21h58, dans la boucle draw tu fais : Testclass.display(); or TestClass est une classe. Tu aurais du faire test.display();
http://fr.flossmanuals.net/processing/ch021_les-objets
Sinon, pour mettre à jour tes données il est d'usage de faire appel à une méthode de ta classe :
TestClass test; int Xpos, Ypos; void setup() { size(200,200); Xpos = 10; Ypos = 20; test = new TestClass(Xpos, Ypos); frameRate(2) ; } void draw() { Xpos = (int)mouseX; test.update(Xpos); test.display(); } class TestClass { int x; int y; TestClass(int _x, int _y) { x = _x; y = _y; } void update(int _x) { x = _x; } void display() { println(x); } }
Hors ligne
Salut
ok Sa marche
merci beaucoup pour votre aide ses tres aprecier
Dernière modification par imdidi (2013-03-29 05:20:38)
Hors ligne
rebonjour tous le monde
grâce a vous j'ai pu résoudre mon problème avec ma variable et se bout la fonctionne
mais parce qu'il y a toujours un mais j'ai un autre problème avec une variable de type boolean toujours dans ma classe
si je met mon curseur par dessus un carrer sa ouvre un carré d'option
si ma variable est déclarer au début de ma classe a minute que je clique a coté du carré le carré disparait
mais si ma variable est déclarer avant le setup () au début du programme quand je clique a coter du carrer d'option. il reste la
j'aimerais bien savoir pourquoi
moi j'ai besoin qu'il reste la et non qu'il disparaisse
il faut que se soit individuel a chaque instance de classe crée
je vous transmet mon code de classe pour ne pas tourner autour du pot
merci d'avance pour vos solution
Hors ligne
Tout d'abord, il est bon d'initialiser toutes les variables de classe dans le constructeur fidGui, car tu fais un test sans être sûr de la bonne initialisation.
Je pense qu'il n'est pas souhaitable d'avoir dans ta classe une méthode avec le même nom que le constructeur. Processing le tolère peut-être, mais il y a risque de confusion. [Edit] je n'avais pas remarqué la différence de casse, mais cela peut être source d'erreur.
Au début de la définition de ta classe, tu déclare/initialise une variable :
float obj_size = object_size*scale_factor;
Tu fais référence à deux variables globales, ce n'est pas glop ! Dans une bonne pratique, il faut que tu passes ces variables dans le constructeur de ta classe. Un objet est sensé pouvoir être réutilisé dans un autre programme sans avoir à le retoucher.
De plus, il est difficile de voir son comportement sans avoir le programme principal qui l'appel, peux-tu nous le faire parvenir ?
Comme tu parles de carré, ton test :
if (dist(tcurposScreenX_(), tcurposScreenY_(), fidposScreenX_()+7, fidposScreenY_()+-29)<10) {
concerne plutôt un dique.
Pour un carré :
if ((curseurX > coinAX) && (curseurX < coinBX) && (curseurY > coinAY) && (curseurY < coinBY)) {
Hors ligne
rebonjour
pour la fonction "dist" je suis au courant mes bouton son des cercle donc la fonction "dist" me paraissais approprier
je voulais savoir avec une classe est t'il possible de changer un array de variable qui est dans une instance
avec une variable dans la classe
ex:
hors class avant setup
class[] maclass = new class[5];
boolean[] test = new boolean[5];
class maclass[0] = new class(test[0]);
class maclass[1] = newclass(test[1];
et dans la class
maclass {
boolean test_;
maclass(boolean _test) {
test_ = _test;
}
if(mousex = screen(height)/2 {
test[0] = true; }
if(test[0]) {
ellipse(20,20,5,5);
}
}
mais comment je fais pour que "test" soit individuel a chaque class
vu que ses test[0] sa va faire apparaitre le même cercle pour les 2 class
mais moi il faut que si ses maclass[0] sa va mettre test[0]
et si ses maclass[1] sa va mettre test[1]
si je met test_ a la place de test[0]
le problème que j' ai ses que ses test_ qui reçois la commande true et non test[0]
alors l' instance na plus raison d' être mais cette méthode donne pas le résultat voulu
je sais pas si je suis asser claire ...
mais bon merci d'avance
Dernière modification par imdidi (2013-04-05 05:18:08)
Hors ligne
Bonjour,
Je pense,qu'il faut que tu prennes du temps de bien comprendre l'utilisation des classes.
As-tu vraiment besoin d'un tableau de boolean ?
Si tu as une variable booléenne dans ta classe et que tu as un tableau d'instances alors tu peux utiliser cette variable.
maClass[] instance; boolean[] test; void setup() { size(400, 400); instance = new maClass[5]; test = new boolean[5]; for (int i = 0; i < 5; i++) { test[i] = false; } instance[0] = new maClass(test[0], 20, 20); instance[1] = new maClass(test[1], 100, 100); } void draw() { background(0); if (mouseX > width / 2) { instance[0].update(true); } else { instance[0].update(false); } if (mouseY > height / 2) { instance[1].update(true); } else { instance[1].update(false); } instance[0].display(); instance[1].display(); } class maClass { boolean test; int x, y; maClass(boolean _test, int _x, int _y) { test = _test; x = _x; y = _y; } void update(boolean _test) { test = _test; } void display() { if (test) { ellipse(x, y, 10, 10); } } }
Hors ligne
salut
oui j'aimerais bien sa etudier les classes comme il faut je me rend bien compte que sa me bloque pour rien
mais avez vous un site qui explique bien les classes parce que le meilleur site que j'ai trouver ses floss manual
mais ya pas beaucoup d'information sur les classes
merci
Hors ligne
Pages: 1 2