Optionnel: réagir aux clics de souris #
-
Dans
evenements
, ajouter la classe suivantepublic class EvtClicSouris extends Event { private World2dMouseEventFx mouseEvent; public EvtClicSouris setMouseEvent(World2dMouseEventFx mouseEvent) { this.mouseEvent = mouseEvent; return this; } public void appliquerA(DonneesVuePartie donneesVuePartie) { donneesVuePartie.reagirClicSouris(mouseEvent); } }
-
Avec
registrar.registerEvent
, déclarer l’événement dans le frontalpublic class FrontalPong implements FrontendFx { // ... @Override public void registerEvents(EventRegistrar registrar) { // ... registrar.registerEvent(EvtClicSouris.class); }
-
Créer la méthode
reagirClicSouris
avec Ctrl+.Eclipse: Ctrl+1 -
Dans
VuePartie
, ajouter le code suivantpublic class VuePartie extends ViewFx { @Override public void initialize() { // ... installerEvtClicSouris(); } // ... private void installerEvtClicSouris() { canvasPartie.onMouseEvent(mouseEventNtro -> { if(mouseEventNtro.mouseEventFx().getEventType().equals(MouseEvent.MOUSE_CLICKED)) { Ntro.newEvent(EvtClicSouris.class) .setMouseEvent(mouseEventNtro) .trigger(); } }); }
-
Dans
AfficherPartie
, ajouter la tâche suivantepublic class AfficherPartie { public static void creerTaches(FrontendTasks tasks) { creerDonneesVuePartie(tasks); tasks.taskGroup("AfficherPartie") .waitsFor(created(DonneesVuePartie.class)) .contains(subTasks -> { // ... // ajouter reagirClicSouris(subTasks); }); } // ajouter private static void reagirClicSouris(FrontendTasks tasks) { tasks.task("reagirClicSouris") .waitsFor(created(DonneesVuePartie.class)) .waitsFor(event(EvtClicSouris.class)) .executes(inputs -> { DonneesVuePartie donneesVuePartie = inputs.get(created(DonneesVuePartie.class)); EvtClicSouris evtClicSouris = inputs.get(event(EvtClicSouris.class)); evtClicSouris.appliquerA(donneesVuePartie); }); }
-
Dans
DonneesVuePartie
, ajouter le code suivantpublic class DonneesVuePartie implements ViewData { // ajouter public void reagirClicSouris(World2dMouseEventFx mouseEvent) { mondePong2d.dispatchMouseEvent(mouseEvent); }
-
Dans
Palette2d
, ajouter le code suivantpublic class Palette2d extends ObjetPong2d { // ajouter l'attribut private boolean selectionnee; @Override public void drawOnWorld(GraphicsContext gc) { gc.save(); // ajouter if(selectionnee) { gc.setFill(Color.CYAN); } gc.fillRect(getTopLeftX(), getTopLeftY(), getWidth(), getHeight()); gc.restore(); } @Override protected boolean onMouseEvent(World2dMouseEventFx mouseEvent) { selectionnee = !selectionnee; return true; } public void deselectionner() { selectionnee = false; } // ... }
-
Dans
MondePong2d
, ajouter le code suivantpublic class MondePong2d extends World2dFx<ObjetPong2d, MondePong2d> { // ... @Override protected void onMouseEventNotConsumed(World2dMouseEventFx mouseEvent) { paletteGauche.deselectionner(); paletteDroite.deselectionner(); }
-
Vérifier que ça fonctionne