Wie gebe ich eine Zahl mit Direct3D aus?



  • Also ich habe mein Programm soweit, dass ich mithilfe von

    g_pD3Dfont->DrawText(NULL, "Text", -1, &rct, 0, fontColor );
    

    Ein "Text" auf dem Bildschirm ausgeben kann. Die Funktion braucht einen LPCTSTR String als Parameter.
    Wenn ich jetzt allerdings noch einen Integer als Variabel mitübergeben will geht das schief.

    "Text" + i <-- falsch
    einen Caster oder einen Artikel darüber bei google habe ich noch nicht gefunden.

    Da Ihr jedoch mit sowas sicher öfter zu tun habt, frage ich euch nach eurer solution



  • Sieh dir mal sprintf an.



  • sry davon habe ich keine ahnung..
    aber ich werde mich mal reinlesen.



  • Funzt.

    LPCTSTR intToStr(int a) 
    { 
    	static char buffer [7];
    	sprintf_s (buffer,"%d FPS",a); 
        return buffer; 
    }
    


  • was soll denn sprintf_s( ) sein?

    BTW: Findest du es witzig, in verschiedenen Foren die (im Prinzip) selbe Frage zu stellen?

    Greetz, Swordfish



  • Jo, wobei du natürlich ab 100 FPS nen feinen Pufferüberlauf hast.



  • Hmm ja, der Bufferüberlauf ist mir auch aufgefallen.

    LPCTSTR intToStr(DWORD a) 
    { 
    	static char buffer [20];
    	sprintf_s (buffer,"%u FPS",a); 
        return buffer; 
    } 
    LPCTSTR getFPS ()
    {
    	static DWORD stime;
    	static DWORD FPS_c;
    	static DWORD FPS;
    
    	if(stime > timeGetTime()-1000) FPS_c++;
    	else 
    	{ FPS = FPS_c;
    	  FPS_c = 0;
    	  stime = timeGetTime();
    	}
    	return (LPCTSTR) intToStr(FPS);
    }
    

    Die in dem anderen Forum waren mir einfach zu komplizert... die kamen da mit << und Fremdwörtern. Deswegen habe ich mich lieber an die Directx gemeinde gewandt. Die konnte mir auch wesentlich besser helfen.

    Edit: sprintf_s deswegen, weil Visual c++ 2005 Express mir sagt, dass sprintf deprecated ( veraltet) ist und ich aus sicherheitsgründen sprintf_s (safe) nehmen soll.



  • Ben86 schrieb:

    ...
    	return (LPCTSTR) intToStr(FPS);
    ...
    

    Den letzten Cast kannst du dir aber eigentlich sparen, oder nicht?

    ...
    	return intToStr(FPS); //intToStr gibt LPCTSTR zurück
    ...
    


  • Ben86 schrieb:

    Die in dem anderen Forum waren mir einfach zu komplizert... die kamen da mit << und Fremdwörtern. Deswegen habe ich mich lieber an die Directx gemeinde gewandt. Die konnte mir auch wesentlich besser helfen.

    Das gute ist häufig komplizierter als das schlechte, weil das schlechte im hintergrund verdammt kompliziert ist(ich erwähn nur den pufferüberlauf den du fast erzeugt hättest).

    Und manchmal, wenn man sich ein bischen mit dem komplizierten beschäftigt, merkt man ganz schnell, dass das komplizierte eigentlich kinderleicht ist, wenn man es mal verstanden hat.



  • Swordfish schrieb:

    was soll denn sprintf_s( ) sein?

    Ne sichere version von sprintf. f'`8k

    Autocogito

    Gruß, TGGC (\-/ returns)



  • Ich bin ja immernoch für Java : )

    String output = "FPS: " + fps;
    


  • xindon schrieb:

    Ich bin ja immernoch für Java : )

    String output = "FPS: " + fps;
    

    Dann bin ich für C++

    str << "fps: " << fps;
    

    f'`8k

    Gruß, TGGC (\-/ returns)



  • Oder mit boost:

    str(format("Text%1%") % i);
    

    Bietet Formatierungsmöglichkeiten ähnlich wie printf, aber auch Typsicherheit, wie wir sie in C++ gewohnt sind. 🙂


Log in to reply