Salut à tous!
too long, will not read -> J'ai une chute de FPS lorsque j'affiche des texture2D avec SpriteBatch.Draw en recouvrant d'autres textures. Cela quelque soit les textures concernées. Cela ne se produit néanmoins pas lorsque la texture du dessus est identique à celle du dessous.
Ok voila toute l'histoire: je suis en train de programmer un rogue-like (Monogame DirectX), le joueur pouvant se déplacer sur l’axe z.
Si il est au niveau z et qu'il n'y a rien, il voit alors z-1 ou même z-2. J’applique alors une texture supplémentaire fog1 ou fog2 pour marquer l'altitude.
Il y a donc soit 1 soit 2 textures (texture2 sur texture1) d'affichées sur une même case.
Voila la partie de code où se situe le problème:
Je vous met des images pour mieux vous rendre compte, voyez en haut à gauche le nombre de FPS et de sprites affichés.
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 public override void Draw() { base.Draw(); Globals.SpriteBatch.Begin(); int spy = 0; for (int drawY = 0; drawY <= mapBounds.Height / TileSize; drawY++) { for (int drawX = 0; drawX <= mapBounds.Width / TileSize; drawX++) { int x = drawX + MapX; int y = drawY + MapY; List<Texture2D> DrawTexture; // Récupère les texture2D de la case DrawTexture = GiveTiles(x, y); // Affiche les texture2D de la case une par une int i = 0; while (i < DrawTexture.Count) { Globals.SpriteBatch.Draw(DrawTexture[i], new Rectangle(drawX * TileSize + mapBounds.X, drawY * TileSize + mapBounds.Y, TileSize, TileSize), Color.White); i++; } // Pour afficher le nombre de sprites spy += i;
En altitude:
Au sous-sol (1 seule texture par case):
Vous voyez le problème je pense, même nombre de sprites affichés et deux fois moins de FPS.
J'ai effectué 3 essais:
Essai 1: J’ai remplacé DrawTexture[i] par DrawTexture[0]:
Résultat: Par de chute de fps là où il en aurait normalement une! Donc le problème vient bien de SpriteBatch.Draw et ne se produit pas lorsque la texture 2 est la même que la 1.
Essai 2: J’ai rendu fog1 et fog2 opaques (donc noirs).
Résultat: Chute de FPS donc le problème ne vient pas de la transparence de la texture 2!
Essai 3: J’ai remplacé int i = 0 par int i = 1.
Résultat: Pas de chute de FPS. Le problème n'a donc pas pour origine qu’il faille aller chercher dans la deuxième case du tableau DrawTexture, ni de la transparence (encore une fois).
Voila donc si quelqu'un a une idée pour régler ce problème ce serait vraiment cool de m'en faire part
Partager