Salut,
ca me paraît impossible mais je me demandais s'il y avait un moyen de connaître toutes les classes filles d'une classe mère ?
Merci d'avance.
Version imprimable
Salut,
ca me paraît impossible mais je me demandais s'il y avait un moyen de connaître toutes les classes filles d'une classe mère ?
Merci d'avance.
En effet, il n'y a pas de moyens simples de déterminer les sous classes d'une classe donnée. Néanmoins, il semble que ce soit possible en parcourant toutes les classes ; ce qui n'est vraiment pas optimisé...
tu peux lire ceci : http://forum.java.sun.com/thread.jsp...sageID=9680662
et cela :
http://forum.java.sun.com/thread.jsp...sageID=1816373
Salut,
tu as une idee derriere la tete? je suis curieux, quel est le besoin?
Hello,
merci bien pour les liens ^^. Effectivement sans avoir tout détaillé ca me paraît très laborieux et peu efficace.
Le but est d'éviter des tests de collision/intersection dans un moteur physique entre certaines classes.
Ex pour un shoot'em up : classes :
Shot <- PlasmaShot
Shot <- LaserShot
Shot <- MissileShot
Shot <- etc.
Les tests ne doivent pas être évalués entre les différentes instances de ces classes. La soluce que j'utilise pour l'instant est de stocker une liste de classes à ne pas évaluer le souci et que je dois le faire pour chaque classe et ce n'est pas très pratique en plus ca implique une recherche dans les listes à chaque cycle qui peut être relativement coûteuse.
ex, pour les constructeurs :
et dans le cycle du moteur :Code:
1
2
3
4
5
6
7
8
9
10
11 PlasmaShot() { this.addUncollidableClass(LaserShot.class); this.addUncollidableClass(MissileShot.class); this.addUncollidableClass(etc.); } LaserShot() { this.addUncollidableClass(PlasmaShot.class); this.addUncollidableClass(MissileShot.class); this.addUncollidableClass(etc.); }
Je fonctionne également avec un test d'exclusivité plutôt qu'un test d'exclusion mais le problème est le même (addCollidableClass()).Code:
1
2
3 if(!solid1.isUncollidableClass(solid2)) { // Tests d'intersections }
Il y a sans doute un problème de conception mais je n'ai pas trouvé mieux pour l'instant.
(D'ailleurs je m'aperçois qu'il faut que je stocke cette liste en statique plutôt que dans chaque instance)
Pourquoi ne pas utiliser un fichier de configuration qui ferait tout ça ?
Un zouli petit fichier XML genre :
Après, tu peux même gérer les autres données directement dans ton fichier de configuration (les dégâts, l'ampleur) et délaisser la partie de gestion de ces données à la classe liée.Code:
1
2
3
4
5
6
7
8
9
10
11 <shot type="plasma" class="my.package.PlasmaShot"> <uncollides type="laser" /> <uncollides type="missile" /> ... </shot> <shot type="laser" class="my.package.LaserShot"> <uncollides type="plasma" /> <uncollides type="missile" /> ... </shot>
Salut,
Comment gères tu tes collisions ?
J'avais fait un jeu de shoot et on avait utilisé des instanceof tout simplement, si c'est un shoot ca peut pas entrer en collision avec un autre shoot
donc j'avais une fonction collide(Element e) et tout dérivait d'élément (acteurs, tirs, bonus), et je faisais :
F.Code:
1
2
3
4
5
6 if(e instanceof Shoot); // ne rien faire else { // traiter la collision selon les autres instanceof }
Effectivement ca peut être une idée de gérer ca dans un fichier externe, merci pour la réponse, en revanche je devrai stocker ca dans une liste de String comme pour les Class et je ne suis pas sur que cela ait un intérêt flagrant.
Au sujet de la gestion j'utilise à peu près le même principe j'appelle un onCollideWith(Solid solid) dans le moteur physique, méthode abstraite qui doit être implémentée dans chaque classe mais quand la méthode est appelée les tests d'intersection on déjà été fait donc c'est trop tard.
Finalement j'ai causé un peu vite je peux en effet utiliser ce système. J'ajoute seulement les classes mères, Shot par exemple et plutôt que de tester comme je le faisais pour la liste des classes à exclure avec uncollidableClasses.contains(Classe), je parcours toute la liste en testant les types avec instanceof.
Merci pour la soluce ^^
Salut,
De rien ;)
Au passage pour tes collisions, la classe Rectangle2D a une fonction intersects(Rectangle2D) toute faite, y'a plus qu'à mettre des rectangles invisibles autour de tes sprites et utiliser la fonction dans tes collide ;)
F.