[DirectX] Problème avec la fonction DrawText

Problème avec la fonction DrawText [DirectX] - Programmation

Marsh Posté le 07-07-2001 à 21:03:39    

Je voudrais afficher le framerate de mon application, pour cela j'utilise l'interface D3DXFont, j'ai tout initialisé: la font, l'object correspond, etc...
 
Mais quand je lance mon appli, le compteur des FPS affiche n'importe quoi, voilà comment je l'utilise, si quelqu'un pouvait me trouver l'erreur que je fais:
 
 
//Les variables globales
int last = 0;
int current = 0;
unsigned short fps = 0;
unsigned short totalfps = 0;
 
 
//Ce qui se trouve dans la fonction elle même
RECT rect;
rect.left = 10; rect.right = 70;
rect.top = 10; rect.bottom = 50;
 
current = GetTickCount();
 
if (current - last > 1000)
{
totalfps = fps;
fps = 0;
last = GetTickCount();
}
 
else
fps++;
 
lpFont->DrawTextW(&totalfps, -1, &rect, DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(255, 255, 255));

Reply

Marsh Posté le 07-07-2001 à 21:03:39   

Reply

Marsh Posté le 08-07-2001 à 10:17:12    

Voilà ce que me montrer mon programme:
 
http://www.multimania.com/final6/fps.jpg
 
Alors que j'aimerais qu'il me montre les FPS.

Reply

Marsh Posté le 08-07-2001 à 11:01:51    

totalfps n'est pas une chaine de caractères.

Reply

Marsh Posté le 08-07-2001 à 11:43:45    

totalfps est de type unsigned short comme le demande la fonction DrawTextW, et puis je ne met que des nombres dans cette variable, donc je vois pas pourquoi ça affiche n'importe quoi.

Reply

Marsh Posté le 08-07-2001 à 13:05:55    

Alload a écrit a écrit :

totalfps est de type unsigned short comme le demande la fonction DrawTextW




T'en es sûr ?

Reply

Marsh Posté le 08-07-2001 à 13:14:23    

une fonction d'affichage prend quasiment toujours une string en paramètre, comme ici :
 
INT DrawTextW(
  LPCWSTR pString,
  INT Count,
  LPRECT pRect,
  DWORD Format,
  D3DCOLOR Color
);  
 
ici, le paramètre est en effet un unsigned short car cette fonction affiche une string unicode. comme tu n'en as pas besoin pour afficher tes fps, utilises drawtexta() et passe une string issue, par ex, d'un sprintf().

Reply

Marsh Posté le 08-07-2001 à 23:17:09    

Un truc que je pige pas, c'est que la fonction DrawTextA demande un pointeur vers une variable const char. Mais comment on peut mettre une phrase dans une const char?
 
Si j'ai bien compris, on ne peut placer qu'une lettre dans un char, donc comment y mettre une phrase?

Reply

Marsh Posté le 09-07-2001 à 00:50:08    

on ne peut effectivement mettre qu'une lettre dans un char.  
as tu bien saisi les pointeurs ? un pointeur n'est qu'une adresse mémoire et peut donc pointer vers un objet ou plusieurs.  
 
ex :  
char myChar = 'A';
char* myCharPtr  = &myChar; // myCharPtr pointe vers myChar
 
char myString = "Bonjour";
char* myStringPtr = &myString[0]; // myStringPtr pointe vers le premier caractère de myString
équivalent à :
char* myStringPtr = myString; // pointe par défaut vers le première caractère.
 
à partir de la, myStringPtr[n] = nième charactère de la string. on peut incrémenter n jusqu'à la fin de la string, notée par un 0 (null).
 
donc là si tu veux afficher tes fps il faut passer un pointeur vers une string qui contient le nombre de fps. tu peux faire ça avec itoa() ou sprintf(), ce dernier étant plus flexible.
 
donc
 
char s[512]; // taille au pif suffisante
sprintf(s, "FPS : %d", totalfps);
lpFont->DrawText(s, ...)
ou  
lpFont->DrawText(&s[0], ...)
les deux étant équivalents.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed