Salut à tous !
Je ne sais pas si le titre est très évocateur de ce que je veux faire, mais je vais développer tout ça!
Je m'amuse actuellement avec la librairie standard et plus précisément avec les Swing et AWT ! Ce que je cherche à faire est de dessiner une Map grâce à un fichier texte et un tileset, une tiled Map en gros. Cette étape est déjà fait et voilà ce que ça donne :
Jusqu'ici pas de problème ! Mais dés que je redimensionne la fenêtre, il se passe la chose suivante :
Tout disparaît, ce que je comprends parfaitement car je rends ma map de la façon suivante :
Ma classe Main:
Ma classe MapRender qui permet le rendu de ma map:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import fr.ds.display.Display; import fr.ds.map.MapParser; import fr.ds.map.MapRenderer; public class Main { public static void main(String[] args) { Display display = new Display("Map tests"); display.create(); MapRenderer renderer = new MapRenderer(new MapParser("test.map").createMap()); renderer.render(display.getContentPanel()); } }
Voilà donc je sais pourquoi ça ne reste pas lors de "l'actualisation" de la fenêtre et je me doute que ce n'est pas la bonne solution du tout. Ce problème ma amené à me demander comment je pourrais, depuis n'importe ou dans le code, ajouter un élément dans mon JPanel ou alors dessiner sur mon JPanel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 import javax.swing.JPanel; public class MapRenderer { private Map map; private Tile tileset; private final int tileSize = 32; public MapRenderer(Map map){ this.map = map; this.tileset = new Tile(map.getTileset()); } public void render(JPanel mapView){ for(int x = 0; x < map.getMapContent().size(); x++){ for(int y = 0; y < map.getMapContent().get(x).size(); y++){ int element = map.getMapContent().get(x).get(y); mapView.getGraphics().drawImage(tileset.getImg(), x * this.tileSize, y * this.tileSize, (x * this.tileSize) + this.tileSize, (y * this.tileSize) + this.tileSize, element * this.tileSize, 0, (element * this.tileSize) + this.tileSize, this.tileSize, null); } } } }
J'ai donc tenter de redessiner le tout dans une boucle mais ce n'est pas très beau ! En effet lors du "resize" de la fenêtre j'observe des glitchs visuelles qui ne sont pas plaisant !
J'espère que j'ai été assez clair, dans le cas contraire n'hésitez pas à me demander des précisions !![]()
Partager