Tutoriel: ajouter des effets et des animations #
-
Dans
Palette2d
, ajouter ce codeimport javafx.scene.effect.InnerShadow; public class Palette2d extends ObjetPong2d { // ajouter private static final double SECONDES_UN_EFFET = 0.4; // ajouter private double secondesRestantesPourEffet = 0; private InnerShadow innerShadow = new InnerShadow(); // ... // ajouter public void onTimePasses(double secondsElapsed) { super.onTimePasses(secondsElapsed); if(secondesRestantesPourEffet > 0) { secondesRestantesPourEffet -= secondsElapsed; } } @Override public void drawOnWorld(GraphicsContext gc) { gc.save(); if(selectionnee) { gc.setFill(Color.CYAN); } // ajouter if(secondesRestantesPourEffet > 0) { innerShadow.setOffsetX(getWidth() * secondesRestantesPourEffet / SECONDES_UN_EFFET); innerShadow.setOffsetY(0); innerShadow.setColor(Color.DARKBLUE); gc.setEffect(innerShadow); } gc.fillRect(getTopLeftX(), getTopLeftY(), getWidth(), getHeight()); gc.restore(); } // ajouter public void insererEffet() { secondesRestantesPourEffet = SECONDES_UN_EFFET; } // ... }
-
Dans
Balle2d
, ajouter ce codepublic class Balle2d extends ObjetPong2d { // ajouter private static final double DUREE_ANIMATION = 2.5; // ajouter private double secondes_restantes_animation = 0; @Override public void onTimePasses(double secondsElapsed) { super.onTimePasses(secondsElapsed); // ajouter if(secondes_restantes_animation > 0) { secondes_restantes_animation -= secondsElapsed; } // ... } // modifier private void balleRebondiSurPalette(Palette2d palette) { // ... // ajouter palette.insererEffet(); } @Override public void drawOnWorld(GraphicsContext gc) { // ajouter double echelonnage = 1.0; if(secondes_restantes_animation > 0) { double pourcentage_ecoule_animation = secondes_restantes_animation / DUREE_ANIMATION; echelonnage = 1 + 2*Math.sin(Math.PI * pourcentage_ecoule_animation); } // ajouter la multiplication *echelonnage gc.drawImage(image, getTopLeftX(), getTopLeftY(), getWidth() * echelonnage, getHeight() * echelonnage); } // ajouter public void demarrerAnimation() { secondes_restantes_animation = DUREE_ANIMATION; } // ...
-
Dans
MondePong2d
ajouter ce codepublic class MondePong2d extends World2dFx<ObjetPong2d, MondePong2d> { // ... @Override protected void onMouseEventNotConsumed(MouseEvent evtFx, double x, double y) { paletteGauche.deselectionner(); paletteDroite.deselectionner(); // ajouter balle.demarrerAnimation(); }
-
Vérifier que ça fonctionne