Bonjour,
je tente de créer un petit jeu tout simple, un peu comme TransportTycoon ou SimulTrans.
Actuellement, la fenêtre de jeu possède un JDesktopPane et lors de la création du jeu, un ensemble de JInternalFrame vient s'ouvrir.
J'ai codé les choses de cette manière afin de me permettre d'avancer pas à pas et d'ajouter autant de types de fenêtres que je le souhaiterai par la suite.
Une de ces JInternalFrame a pour but de "montrer le monde", il s'agit en quelque sorte de la fenêtre la plus important.
Or, je me heurte à un petit soucis en ce qui la concerne car je n'arrive pas à déterminer la manière de la concevoir en sachant que:
-le monde est divisé en zone (petit carré si l'on veut)... chaque zone doit être selectionnable via la fenêtre.
-des véhicules se déplacent sur le monde (leur déplacement est géré autre part, pas besoin de s'en occuper. Chaque véhicule doit aussi être selectionnable via la fenêtre.
J'ai déjà essayé de faire une fenêtre composée de ZonePanel écoutant chacun les événements provenant de la zone qu'ils doivent afficher.. cela marche très bien mais comment faire se déplacer d'éventuel VehiculePanel par-dessus ces fameux ZonePanel?
De plus, c'est un peu "lourd" comme manière de procéder... cela fait un bon nombre de composants swing.
J'ai donc aussi essayé via un Canvas possédant son propre thread d'affichage (double-buffering hardware) mais je n'arrivais pas à le faire tenir dans un JScrollPane de manière correcte. Le canvas s'affichait intégralement, en dehors meme du JScrollPane.
Je me suis dit que, vu qu"une zone ne change pas tant que ca (on construit, on détruit... bon, on ne le fait pas en boucle quand même), je pouvais créer l'image a afficher et ne modifier les parties nécessaires que lors de la réception d'un événements... ensuite, je mettrais les véhicules par-dessus....
Mais je me heurte encore au fait de placer des composants les uns au-dessus des autres... et la modification d'image n'est pas trop mon fort.... et je n'ai encore une fois aucune idée de la performance.
Donc force d'essayer une méthode par-ci par-là, je me rends compte que je n'ai actuellement aucune idée quant à la "bonne solution" à mettre en oeuvre.
Si quelqu'un connait une architecture robuste permettant de faire cela, je suis assez preneur.
Partager