Réponse acceptée !
Rebonjour à tous !
Après 2 jours d'intenses réflexions et de test divers et variés sur mon programme, j'ai réussit à isoler le problème dans la partie affichage, puis, là encore après de multiple test, je me suis rendu compte que le problème venait de ma procédure d'affichage de texte. En effet, lorsque je mettait toute ma sub en commentaire et que je laissait le code:
Public Sub Afficher()
Device.BeginScene() AfficherTexte(String.Format("FPS : {0}", FPS), New Point(0,0),MFrm.Font, Color.Black) Device.EndScene() Device.Present()
End Sub Mon problème persistait. J'ai donc rétablit tout l'affichage puis j'ai enlevé la ligne AfficherTexte et là, par miracle, je n'avais mon problème de mémoire. Après quelques minutes de réflexions, j'ai quelque peu condensé mon code et j'ai surtout remplacé DrawTexte = Nothing par DrawTexte.Dispose() et là ça marche nickel! Voici donc mes nouvelles subs AfficherTexte:
Public Sub AfficherTexte(ByVal Texte As String, ByVal Pos As Point, ByVal Police As System.Drawing.Font, ByVal Couleur As System.Drawing.Color, Optional ByVal Centrer As Boolean = False)
Dim DrawTexte As Font = New Font(Device, Police)
If Centrer = True Then 'Dim p As System.Drawing.Font = MFrm.Font
'MFrm.Font = Police Dim g As Graphics = MFrm.CreateGraphics Dim Taille As SizeF = g.MeasureString(Texte, Police) 'récupère la taille Dim tmpPos As Point = New Point(CInt(Pos.X - (Taille.Width / 2)), CInt(Pos.Y - (Taille.Height / 2))) Pos = tmpPos
'MFrm.Font = p 'p.Dispose() g.Dispose() Taille = Nothing tmpPos = Nothing End If
Sprite.Begin(SpriteFlags.AlphaBlend) DrawTexte.DrawText(Sprite, Texte, Pos, Couleur) Sprite.End()
DrawTexte.Dispose()
End Sub Public Sub AfficherTexte(ByVal Texte As String, ByVal Pos As Point, ByVal Police As System.Drawing.Font, ByVal Couleur As System.Drawing.Color, ByVal CouleurContour As System.Drawing.Color, Optional ByVal Centrer As Boolean = False)
Dim DrawTexte As Font = New Font(Device, Police)
If Centrer = True Then 'Dim p As System.Drawing.Font = MFrm.Font
'MFrm.Font = Police Dim g As Graphics = MFrm.CreateGraphics Dim Taille As SizeF = g.MeasureString(Texte, Police) 'récupère la taille Dim tmpPos As Point = New Point(CInt(Pos.X - (Taille.Width / 2)), CInt(Pos.Y - (Taille.Height / 2))) Pos = tmpPos
'MFrm.Font = p 'p.Dispose() g.Dispose() Taille = Nothing tmpPos = Nothing End If
Sprite.Begin(SpriteFlags.AlphaBlend) For i As Integer = -1 To 1 For j As Integer = -1 To 1 DrawTexte.DrawText(Sprite, Texte, Pos.X + i, Pos.Y + j, CouleurContour) Next Next DrawTexte.DrawText(Sprite, Texte, Pos.X, Pos.Y, Couleur) Sprite.End()
DrawTexte.Dispose()
End Sub
Je vais maintenant refaire ma classe MsgBx et je vous reposterait tout mon code! Merci à tout ceux qui ont cherché. Cordialement, Passylmat.
|