#0 

01-11-2006 14:06:05

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

Bon, question stupide mais qui me turlupine depuis un certain temps... roll

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.


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#1 

01-11-2006 14:44:37

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

bon quitte à dire une connerie, autant que je soit le premier non ? big_smile

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 ....


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

01-11-2006 14:53:34

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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'


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#3 

01-11-2006 14:55:42

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 ^^


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#4 

01-11-2006 15:07:51

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 ....


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#5 

01-11-2006 15:18:12

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

Et bien GG a vous deux...

Ca marche nickel !

Encore une aide rapide et éfficace wink

Merci


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#6 

01-11-2006 18:55:12

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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...

Code:

       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.


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#7 

01-11-2006 22:03:58

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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);


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#8 

02-11-2006 09:29:08

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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 ?!)


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#9 

02-11-2006 09:42:06

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 .....


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#10 

02-11-2006 13:10:35

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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...


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#11 

02-11-2006 14:31:44

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 ^^


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#12 

02-11-2006 17:22:15

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

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 wink


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#13 

02-11-2006 20:31:32

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Hehe c'est pas grave hein, le principal c'est que t'ai réussi smile.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#14 

03-11-2006 19:22:11

smeagol
Membre
Date d'inscription: 30-10-2006
Messages: 34

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

Code:

wchar_t tata[1000];
int chiffre = 312;

swprintf(tata,  L"le temps: %d", chiffre);

font->draw(tata, core::rect<s32>(370,10,300,500), video::SColor(255,249,187,0));

ca devrait marcher

Hors ligne


#15 

19-12-2006 12:21:07

White Threat
Petit nouveau
Date d'inscription: 18-12-2006
Messages: 7

@Willikus: Je ne comprends pas pourquoi tu veux faire une fonction si compliquee pour afficher un chrono...

Code:

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


#16 

20-12-2006 00:28:38

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 smile


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
73 invités en ligne
Aucun membre connecté
RSS Feed