Théorie: créer un monde 2d #
Le monde 2d #
- Un monde 2d est un rectangle avec une largeur et une hauteur
- Le monde 2d contient des objets 2d
- Un objet 2d occupe un rectangle dans lequel son dessin est contenu
(on peut le changer)
En Ntro
#
- Définir un monde 2d
public class MondePong2d extends World2dFx {
public MondePong2d(){
super();
}
// ...
- Ajouter des objets 2d
public class MondePong2d extends World2dFx {
public MondePong2d(){
super();
//id, z, objet
addObject2d("balle", 2, new Palette2d());
addObject2d("terrain", 1, new Balle2d());
}
// ...
-
zest lezIndex- plus c’est haut, plus l’objet est “par dessus les autres” (dessiné en dernier)
- plus c’est base, plus l’objet est “en dessous des autres” (dessiné en premier)
Décrire les objets #
- Chaque objet 2d a aussi une largeur (
w) et une hauteur (h) - La position de l’objet 2d est indiquée par son coin haut/gauche (
topLeft)
En Ntro
#
- Définir un objet 2d
public class Balle2d extends Object2dFx {
public Balle2d(){
super();
setWidth(10);
setHeight(10);
}
@Override
public void onAddedToWorld() {
setTopLeftX(getWorldWidth() / 2 - getWidth() / 2);
setTopLeftY(10)
}
- On peut donner la largeur/hauteur de l’objet2d dès la création
- Mais pour la position, il faut souvent attendre d’être ajouté dans un Monde2d
Toujour utiliser les setters changer les attributs de base d’un objet2d
setTopLeftXsetTopHeightsetSpeed- etc.
Afficher le monde 2d #
- On va afficher le monde 2d en deux étapes
- (optionnel) dessiner une image de fond
- itérer chaque objet 2d et demander à cet objet de se dessiner
En Ntro
#
- Définir un canvas pour afficher le monde 2d
public class CanvasPartie extends ResizableWorld2dCanvasFx {
}
- Appeler la méthode
drawOn(héritée deWorld2dFx)
public class VuePartie extends ViewFx {
// ...
public void afficherPong2d(MondePong2d mondePong2d) {
mondePong2d.drawOn(canvasPartie);
}
- La méthode
drawOnWorldde chaque objet2d va être appelée:
public class Balle2d extends ObjetPong2d {
// ...
@Override
public void drawOnWorld(GraphicsContext gc) {
gc.fillArc(getTopLeftX(),
getTopLeftY(),
getWidth(),
getHeight(),
0,
360,
ArcType.CHORD);
}
}
- NOTES
- le
CanvasPartieva redimensionner le monde 2d selon le conteneur - le ratio largeur/hauteur est préservé automatiquemen
- le
Détecter les collisions #
- La collision est calculée selon le rectangle qui entoure l’objet
En Ntro
#
- Collision avec un autre objet
public class Balle2d extends ObjetPong2d {
// ...
private boolean balleFrappePalette(Palette2d palette) {
return collidesWith(palette);
}
- Collision avec un rectangle
public class Balle2d extends ObjetPong2d {
// ...
private boolean balleFrappePlancher() {
return collidesWith(0, // x
getWorld2d().getHeight(), // y
getWorld2d().getWidth(), // largeur
1); // hauteur
}