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
reagirClicSourisavec 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