Bon, question stupide mais qui me turlupine depuis un certain temps...
Comment afficher une variable dans ce type de code :
font->draw(L"Temp : variable ", core::rect<s32>(370,10,300,500), video::SColor(255,249,187,0));
J'ai bien essayer d'enfumer en faisant comme avec printf :
font2->draw(L("Temp : %lf", variable), core::rect<s32>(370,10,300,500), video::SColor(255,249,187,0));
Mais rien n'y fait !
Faut t'il que je fasse une sorte de boucle d'affichage ?!
Merci de m'aider encore un fois.
Hors ligne
bon quitte à dire une connerie, autant que je soit le premier non ?
Ca marcherai pas ça ? :
core::stringw str = L"Temp : ";
str += variable;
font->draw(str.c_str(), core::rect<s32>(370,10,300,500), video::SColor(255,249,187,0));
Ils utilisent cette méthode dans le FPS ....
Hors ligne
J'ai bien essayer (sans pour autant le mettre dans font),
d'afficher cette variable (u32) dans la fenetre a coté de FPS... refus catégorique du compilateur :
ambiguous overload for 'operator+=' in 'str+= time'
Hors ligne
heu ça serai sympa de préciser de quel type de variable il s'agit ?
Un timer pour afficher l'heure ou autre ?
[edit]Oups U32 autant pour moi ^^
Hors ligne
Tu peux essayer de passer par un s32 mais tout dépend à quoi ta variable te sert :
s32 MaNouvelleVariable = variable;
et là tu pourras faire ton str tranquille ....
Hors ligne
Et bien GG a vous deux...
Ca marche nickel !
Encore une aide rapide et éfficace
Merci
Hors ligne
Bon je reste dans ce topic pour ne pas spammer un beau forum...
J'ai écrit un code permettant d'afficher l'heure (question précédante).
Ca consiste en l'affichage du temps en sec et en minute avec une remise a zéro tout les 60 secondes.
Tout allait nickel, mon code fonctionnait sans probleme, et la !
Il c'est mis a planter sans raison apparente...
s32 reset=0; u32 time2 = device->getTimer()->getTime(); // Temps s32 reseta = (time2/1000); s32 time = time2/60; s32 timeaffsec = ((time2/1000)+reset); s32 timeaffmin = (time2/60000); if (timeaffsec == 60) { reset = reset-60; }
Le principe est simple, quand les secondes arrivent a 60, je retire 60. (a 120 je retire 60+60, ...)
La, le code agit comme si 'reset = reset -60;' n'éxistait pas... pourtant, j'ai tester voir si le IF marchait, et le test est positif...
Je ne comprend pas comment sans modif, le code passe de fonctionnel a buggé.
Merci de vos réponse.
Hors ligne
perso j'aurrai plustot fait un test comme ça :
if (timeaffsec >= 60)
s32 reset=0; <------------- =0 on est ok ?
u32 time2 = device->getTimer()->getTime(); // Temps
s32 reseta = (time2/1000);
s32 time = time2/60;
s32 timeaffsec = ((time2/1000)+reset); <-------------- + 0 ?
s32 timeaffmin = (time2/60000);
Hors ligne
En faite j'ai réussi a faire fonctionné le tout en sortant la déclaration de variable du main()...
Il devait lire en boucle (0-> affichage -> -60 -> 0 -> affichage ...).
(Je ne comprend pas le résultat attendue par ton test... le probleme étant résolue, je suis toujours avide de savoir ?!)
Hors ligne
Je ne comprends surtout pas ça :
s32 timeaffsec = ((time2/1000)+reset);
Tu mets reset à 0 et après tu fais un + reset, c'est comme si t'écrivais +0 c'est donc totalement inutile .....
Hors ligne
non justement...
de 0 -> 60, reset = 0 ; afficher de 0 à 60
de 60->120, reset = -60; aficher de 0 à 60
de 120->180, reset = -120, afficher de 0 à 60.
Cela permet d'avoir un remise a zero a l'écran tout les 60...
Ca évite d'avoir 3:180 au lieu de 3:00.
Je sais qu'avec des fonctions on peut remettre le time a 0, mais ça risque de me poser probleme par la suite...
Hors ligne
Bein présenté comme tu l'as présenté plus haut reset était tout le temps égal à 0....
Essaye de poster les routines entière quand tu demandes de l'aide sinon on peut pas deviner ^^
Hors ligne
Désolé mais quand c'est claire dans ma tête, il me semble que pour vous c'est évident... (et ça ne peut pas être le cas !)
Merci quand même, encore une aide qui prouve que le forum comporte de bon membre
Hors ligne
Hehe c'est pas grave hein, le principal c'est que t'ai réussi .
Hors ligne
Le truc que tu veux faire c'est en gros mettre la valeur d'une variable dans un wchar_t*
et bien utilise dans se cas la fonction standard swprintf
ca devrait marcher
Hors ligne
@Willikus: Je ne comprends pas pourquoi tu veux faire une fonction si compliquee pour afficher un chrono...
u32 time2 = device->getTimer()->getTime()/1000; // Temps en secondes s32 timeaffsec = time2%60; //modulo = reste de la division par 60 du temps en secondes s32 timeaffmin = (time2/60); // quotient de la division par 60 //pour les heures, tu peux rajouter: s32 heures = timeaffmin/60; // on recupere le temps en minutes qu'on convertit en heures timeaffmin = timeaffmin%60; // on recupere le reste de la division par 60 du temps en minutes
Tu devrais chercher des trucs simples avant de faire des operations complexes avec des variables globales, c'est le meilleur moyen de te planter (deux variables globales qui ont le meme nom, etc).
Bonne chance pour la suite et desole de repondre a des posts si tard (1 mois et demi ca fait beaucoup).
Dernière modification par White Threat (19-12-2006 12:22:49)
Hors ligne
Même 6 mois après c'est toujours utile pour ceux qui rencontrent le même problème, donc merci pour ta réponse
Hors ligne