Page 1 sur 2

[jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 8:52
par blendman
salut

On a remarqué avec Stombretrooper avec je fais le jeu 3arks que d'un ordinateur à un autre il y avait un problème dans les tailles des polices affichées avec Drawtext().

Savez-vous comment on peut régler ça ?

Voici ce que ça donne sur mon ordinateur (xp, résolution du jeu 1024*768), c'est normal :
Image

Et voici ce que cela donne sur l'ordinateur de Stombretrooper (windows 7, reso jeu 1024*768), il y a un problème:
Image

Toutes les polices sur l'ordinateur de Stombretrooper sont plus grandes que sur le mien, mais ce n'est pas lié au système car j'ai un autre avec seven et ça fonctionne correctement.

La méthode que j'utilise est la suivante :
1. je crée des constante et je loade les polices ensuite avec ces constantes. J'utilise des polices disponibles sur n'importe quel ordinateur (arial et verdana), j'ai même essayé de charger la police depuis un dossier du jeu (le dossier "font"), mais le problème est toujours le même :

Code : Tout sélectionner

Enumeration
  #fnt_gras9
  #fnt_normal8
  #fnt_normal9 
  #fnt_normal10
  #fnt_normal12
  #fnt_arial10
  #fnt_arial12
EndEnumeration

If LoadFont(#fnt_gras9,"arial",9,#PB_Font_Bold) = 0
  MessageRequester("Erreur", "impossible d'utiliser la police d'écriture Arial")
EndIf
If LoadFont(#fnt_arial10,"arial",10) = 0
  MessageRequester("Erreur", "impossible d'utiliser la police d'écriture Arial")
EndIf
If LoadFont(#fnt_arial12,"arial", 12) = 0
  MessageRequester("Erreur", "impossible d'utiliser la police d'écriture Arial")
EndIf


AddFontResource_("Font\verdana.ttf") 
If LoadFont(#fnt_normal8, "Verdana", 8) = 0
  MessageRequester("Erreur", "impossible d'utiliser la police d'écriture Verdana")
EndIf
If LoadFont(#fnt_normal12, "Verdana", 12) = 0
  MessageRequester("Erreur", "impossible d'utiliser la police d'écriture Verdana")
EndIf
If LoadFont(#fnt_normal10, "Verdana", 10) = 0
  MessageRequester("Erreur", "impossible d'utiliser la police d'écriture Verdana")
EndIf
If LoadFont(#fnt_normal9,"verdana",9) =0
  MessageRequester("Erreur","Problème de chargement de la police d'écriture Verdana.")
  End
EndIf
Ensuite, pour dessiner un texte, j'utilise la méthode classique, après avoir dessiner mes sprites, je fais :

Code : Tout sélectionner

Stop3D() 
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#fnt_normal8))
DrawText(x,y,texte$)
DrawingFont(FontID(#fnt_normal10))
DrawText(x,y,texte2$)
; etc.....
stopdrawing()
Donc, logiquement, ça devrait marcher, mais la taille de base semble différer en fonction des ordinateurs, cartes graphiques, ou systèmes d'exploitation..

Alors, à part utiliser une font sprite, ce qui m'obligerait à refaire un grosse partie du code et que je ferai très certainement plus tard, existe-t'il une solution connue à ce problème ?

merci d'avance :D.

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 10:07
par djes
C'est très étrange! Es-tu certain d'avoir bien mis les polices dans le dossier de ton programme, et que le nom soit bon? Windows a tendance à charger une police par défaut de manière silencieuse, c'est peut-être ça... Apparemment, le chargement est bon, il n'y a que la taille qui change... Même en mettant les options d'affichage sur "grande polices", ça ne devrait pas faire ça! Il n'a pas un util qui hacke le système pour forcer les grandes polices?

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 10:10
par Thyphoon
j'aurais tendance a te dire que Sous windows si il ne trouve pas la font demandé, il n'y pas d'erreur et il charge une autre police...c'est peut être ce qui se passe et ce qui explique la différence de taille. mais vu le code que tu as donné ...Arial et verdana on les trouves sur toute les machines...
curieux ça ... et tu as essayé avec un code simple indépendant de ton jeu voir si tu as le même problème ? (sinon j'ai fait un procédure (bricolage) que tu dois retrouver sur le forum qui permet de charger une police pour qu'elle soit pile poile a la bonne hauteur en pixel)

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 10:14
par Thyphoon

Code : Tout sélectionner

Procedure MyLoadFont(Font.l,Name.s,Size.l,Flag=0)
  Taille=1;
  Img=CreateImage(#PB_Any,1,1);Creation d'une image pour travailler
  Repeat
    If IsFont(Font)
      FreeFont(Font)
    EndIf
    Taille+1
    LoadFont(Font, "Arial", Taille,Flag)
    StartDrawing(ImageOutput(Img))
    DrawingFont(FontID(Font))
    If TextHeight("P")>Size
      Taille-1
      Quit=1
    EndIf
    StopDrawing()
  Until Quit=1 Or Taille>500
  Debug Taille
  FreeImage(Img) ; je libère l'image
EndProcedure

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 10:32
par comtois
Si tu vas dans panneau de configuration ,puis affichage , tu peux choisir la taille de la police qui sera utilisée dans Windows, 100%, 125% et 150%.
Selon ta taille choisie, ça influence l'affichage du texte dans n'importe quelle appli windows !

Avec ce code la longueur du texte varie selon que je choisisse 100% ou 125%
à 100% je vois le texte complet
à 125% je ne vois que Hello World 123456

Ensuite sous windows, s'il ne trouve pas la police que tu demandes ben tu auras autre chose, donc pas d'erreur lors du chargement d'une police.

Code : Tout sélectionner

InitSprite()

OpenWindow(0, 0, 0, 200, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0, 200, 200, 1, 0, 0)
LoadFont(0, "Verdana", 12)
Texte$= "Hello World 12345678"
Repeat
  Event = WaitWindowEvent()
  
  StartDrawing(ScreenOutput())
  DrawingMode(#PB_2DDrawing_Transparent)
  DrawingFont(FontID(0))
  
  DrawText(0, 0, Texte$, $FF)
  DrawText(0,40, Str(TextWidth(Texte$)))
  StopDrawing()
Until Event = #PB_Event_CloseWindow

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 10:37
par djes
C'est bien ce que je pensais, c'est une belle cata! Mais à quoi ils ont pensé ceux qui ont fait ce truc immonde?!

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 10:49
par Thyphoon
djes a écrit :C'est bien ce que je pensais, c'est une belle cata! Mais à quoi ils ont pensé ceux qui ont fait ce truc immonde?!
a l'accessibilité des malvoyants :P
Mais faut avouer que c'est très chiant ! d'où ma procédure si dessus qui devrait régler le problème !! :roll:

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 10:59
par Fig
Comment ça se fait que l'on ne rencontre pas ce problème plus souvent sous windows ? Ils passent tous par des caractères en sprites ?? Etrange... 8O

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 14:27
par G-Rom
Tu devrais evité les drawtext() , c'est bien pour du debug en fullscreen , quoique en fullscreen on evite le debug , mais bon...
Le mieux est d'utilisé une fonte bitmap pour un jeu , y a pas photo.

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 14:32
par blendman
Thyphoon : merci pour ta procédure, je pense que je vais l'utiliser ;).
EDIT : j'ai testé mais c'est très étrange, ça réduit la police verdana de 4 pixels chez moi, alors que je n'ai aucun problème d'affichage.
comtois a écrit :Si tu vas dans panneau de configuration ,puis affichage , tu peux choisir la taille de la police qui sera utilisée dans Windows, 100%, 125% et 150%.
Selon ta taille choisie, ça influence l'affichage du texte dans n'importe quelle appli windows !
Visiblement, avec Xp, que l'on change ou non l'affichage des polices d'affichage ça n'a pas d'incidence sur la taille des polices dans le jeu. Mais ça ne semble pas être le cas sous 7, c'est ça ?
G-Rom a écrit :Tu devrais evité les drawtext() , c'est bien pour du debug en fullscreen , quoique en fullscreen on evite le debug , mais bon...
Le mieux est d'utilisé une fonte bitmap pour un jeu , y a pas photo.
C'est bien ce que je compte faire prochainement ;-)

Le problème est que je ne sais pas du tout comment on utilise cette technique, pour le moment :).

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 14:37
par Ar-S
comtois a écrit :Si tu vas dans panneau de configuration ,puis affichage , tu peux choisir la taille de la police qui sera utilisée dans Windows, 100%, 125% et 150%.
Selon ta taille choisie, ça influence l'affichage du texte dans n'importe quelle appli windows !
Tu m'enlèves les mots de la touche :)
J'ai découvert ça avec horreur avec mon Resize 2011 sur l'ordi de ma mère, une bête de course mais en 125% pour l'affichage des fonts.
Du coup certains textes, très bien dimensionnés en 100% sont tronqués sur cet ordi même avec une grande résolution. (rien à voir avec la résolution en fait).

C'est un problème réel sur windows, même si ces modes adaptés aux malvoyants sont pratiques dans l'idée, s'ils se retrouvent avec la moitié des phrases bonjour la galère.

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 14:44
par djes
Tiens, voilà un ptit topic sur les fontes bitmap. Y'a quelques liens intéressants :)
http://bbs.demoscene.fr/gfx/bitmap-fonts-!/

Sinon, pour les utiliser, y'a pas plus simple, tu te crées quelques sprites et après tu les dessines avec un truc genre

Code : Tout sélectionner

For u = 1 To Len(text)
	s.l = #SILVERFONT + Asc(Mid(text, u, 1))
	ZoomSprite3D(s, 64, 64)
	RotateSprite3D(s, 0, 0)
	DisplaySprite3D(s, x, y)
	x + 32
Next u
Plusieurs avantages : tu as de la couleur, tu peux faire des effets d'apparition, de transparence, de disparition, c'est plus rapide, ...

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 15:31
par Thyphoon
blendman a écrit :Thyphoon : merci pour ta procédure, je pense que je vais l'utiliser ;).
EDIT : j'ai testé mais c'est très étrange, ça réduit la police verdana de 4 pixels chez moi, alors que je n'ai aucun problème d'affichage.
pas de souci tu peux la modifier, l'améliorer, en faire tout ce que tu veux !
G-Rom a écrit :Le mieux est d'utilisé une fonte bitmap pour un jeu , y a pas photo.
Qu'est ce que je regrette de ne pas avoir gardé mon amiga lorsque je faisais du titrage vidéo dans les année 90.. j'en avais des disquettes plein de font bitmap dont certaine vraiment très jolie et très sobre ! Le seul truc qui manque pour se faire plaisir avec des fonts bitmaps c'est un clipsprite3D natif dans pb.

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 15:48
par djes
Thyphoon a écrit :Qu'est ce que je regrette de ne pas avoir gardé mon amiga lorsque je faisais du titrage vidéo dans les année 90.. j'en avais des disquettes plein de font bitmap dont certaine vraiment très jolie et très sobre ! Le seul truc qui manque pour se faire plaisir avec des fonts bitmaps c'est un clipsprite3D natif dans pb.
Regarde là : http://cgi.algonet.se/htbin/cgiwrap?use ... t=fonts.pl
Merci qui? :mrgreen:

Re: [jeu] DrawText() : problème de taille de police

Publié : lun. 20/juin/2011 15:54
par Thyphoon
djes a écrit : Regarde là : http://cgi.algonet.se/htbin/cgiwrap?use ... t=fonts.pl
Merci qui? :mrgreen:
Haaaaaaaaaarg le pied !!! Merci :D Merci beaucoup ! :o