Aktuelle Zeit: 13.05.2025, 11:48

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Variablen ausgeben
BeitragVerfasst: 10.06.2009, 22:51 
Offline

Registriert: 10.06.2009, 22:32
Beiträge: 2
Hi Leute,
ich habe ein kleines änfängerproblem, ich hab zwar gesucht, aber nichts passendes gefunden.
Und zwar möchte ich bei meinem Spiel dz.B. die Punkte ausgeben,
geht das mit der normalen Funktion:

font->draw(L"Default", core::rect<s32>(305 , 288, 350, 308), video::SColor(255,0, 0,0));

Was muss ich am ersten Parameter verändern um meine Punkte (ganz normaler Integer) ausgeben zu können?

Hab schon ne menge probiert, aber weiß nicht mehr weiter...


Danke im voraus
mfg

Alex


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 10.06.2009, 23:13 
Offline

Registriert: 10.06.2009, 22:32
Beiträge: 2
Ok habs sorry für die belästigeung, man bin ich dumm^^


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 12.06.2009, 08:16 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Das ist/war keine Belästigung. Lernen macht Spaß und zwar uns allen. 8)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 12.06.2009, 16:01 
Offline

Registriert: 17.11.2007, 11:15
Beiträge: 19
C-Lösung
Code:
wchar_t buffer[256];
swprintf_s(buffer, 256, L"Punkte: %u | String: %s", 123, L"test"); //%u = unsigned, %d = signed integer
font->draw(buffer, core::rect<s32>(305 , 288, 350, 308), video::SColor(255,0, 0,0));


oder auch

C++-mäßiger (aber langsamer)
Code:
stringw buffer = "Punkte : ";
buffer += 123;
//...
font->draw(buffer.c_str(), core::rect<s32>(305 , 288, 350, 308), video::SColor(255,0, 0,0));


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 12.06.2009, 19:12 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Wie kommst du darauf, dass die C++ Lösung langsamer sein soll ?

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 12.06.2009, 20:37 
Offline
Benutzeravatar

Registriert: 23.03.2009, 18:52
Beiträge: 23
Wohnort: Bremen
Ich schätze mal, weil in der ersten Lösung nur ein
Array aus wchar_t benutzt wird und in der zweiten
ein Objekt, also ein komplexerer Datentyp (weil stringw eine Klasse ist, wenn ich das richtig sehe).

_________________
Bit Happens!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 12.06.2009, 22:05 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Dann guck dir mal an was stringw ist. Besteht auch nur aus einem wchar_t array und noch ein paar zusätlichen Variablen für die länge des string und des reservierten speichers.

Der += der string klasse ruft die append() methode auf, die eben kurz den integer in einen string wandelt und in das array einfügt. c_str() gibt lediglich einen pointer auf das oben gennante wchar_t array zurück.

Die C methode muss erstmal den Formatstring parsen und dann noch die integer in strings wandeln. Ist zudem nicht dynamisch verwendbar und bietet viele möglichkeiten böse bugs einzuschleusen.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 13.06.2009, 10:10 
Offline
Benutzeravatar

Registriert: 23.03.2009, 18:52
Beiträge: 23
Wohnort: Bremen
wenn das so ist... ich hatte mich mit dem Innenleben von stringw nicht auseinandergesetzt
und wie langsam oder schnell printf ist weiß ich ehrlich gesagt auch nicht.
Ich würde schon allein wegen dem Komfort die C++-Variante bevorzugen.

An der Geschwindigkeit kann man ja eh lieber schrauben, wenn man sich in Schleifen oder
Rekursion befindet, da macht das dann richtig was aus...

_________________
Bit Happens!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 13.06.2009, 12:43 
Offline

Registriert: 17.11.2007, 11:15
Beiträge: 19
Die 2. Variante ist auf jeden Fall langsamer, denn den Speicher muss sich stringw erst mit new holen, was erheblich langsamer ist, als ein festes Array auf dem Stack. Wenn man das ganze allerdings folgendermaßen macht, ist der Unterschied kaum noch vorhanden:

Code:
stringw buf;

while (device->run())
{
//...
buf = L"Punkte: ";
buf += 123;

font->draw(buf.c_str(), /*...*/);
//...
}


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 14.06.2009, 13:03 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
ein buffer.reserve(256) tuts auch.
oder stringw buf(NULL,256);

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 14.06.2009, 20:07 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Natürlich sollte man niemals eine Klasse innerhalb einer Schleife deklarieren (auf dem Stack), ansonsten würde jedes Mal der Standardkonstruktor aufgerufen werden, die new-Operation, wie schon von anderen Leuten hier erwähnt. Das ist so eine typische Performance-Bremse.

Ich selbst würde zumindest auf die C++ Methoden setzen. Ich denke nicht, dass diese bei richtiger Handhabung deutlich langsamer sind.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Variablen ausgeben
BeitragVerfasst: 14.06.2009, 21:53 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
btw mit stringstream geht das viel hübscher.
Code:
#include <sstream>
std::basic_stringstream<wchar_t> buf;
buf << "Stuff: " << 67 << ", should be " << 42;
... buf.str().c_str(); ...

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de