Problème avec la fonction DrawText [DirectX] - Programmation
Marsh Posté le 08-07-2001 à 10:17:12
Voilà ce que me montrer mon programme:
Alors que j'aimerais qu'il me montre les FPS.
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.
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 ?
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().
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?
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.
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));