Salut, j'ai un problème de base mais je ne comprends pas très bien le mécanisme à adopter, si quelqu'un pouvait me guider. J'ai par exemple, 3 classes :
Comment on fait pour récupérer et appeler la fonction adéquate dans le cas suivant, j'ai donc un vecteur qui contient des SolidRectangle et des SolidCircle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class SolidCircle extends Solid { public boolean collideWith(SolidCircle circle) {...} } public class SolidRectangle extends Solid { public boolean collideWith(SolidRectangle circle) {...} }
J'ai pensé définir une méthode abstraite collideWith(Solid s) dans Solid mais ensuite il faut que j'en implémente une aussi dans SolidRectange et dans SolidCircle, ce qui n'a aucune utilité. Ma question est donc, comment appeler les bonnes méthodes collideWith et computeCollisionResponse, en fonction des types réels des instances, j'imagine qu'il y a moyen de faire ca sans instanceof ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public Vector movableSolids; // D'ailleurs il me semblait que Vector était pas trop optimisé pourtant c'est la seule structure que propose le CLDC 1.1 du J2ME static public void computeCollisions() { for (int i = 0, solidsSize = PEngine.movableSolids.size(); i < solidsSize; i++) { Solid solid1 = ((Solid) (PEngine.movableSolids.elementAt(i))); for (int j = i + 1, solidsSize2 = PEngine.movableSolids.size(); j < solidsSize2; j++) { Solid solid2 = ((Solid) (PEngine.movableSolids.elementAt(j))); if (solid1.collideWith(solid2)) { PEngine.computeCollisionResponse(solid1, solid2); } } } } static public void computeCollisionResponse(SolidCircle circle1, SolidCircle circle2) {..} static public void computeCollisionResponse(SolidRectangle rectangle1, SolidRectangle rectangle2) {...}
Merci d'avance ^^
Partager