Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
27.06.2001, 13:50
Retro



Ich hab eine Integer-Variable (m_iHealth) und möchte die per DrawHudString Aufs HUD bringen...

Allerdings braucht DrawHudString ein String, wie der Name schon sagt, und kann mit der Varible nichts anfangen...

Quellcode:error C2664:
'DrawHudString' : Konvertierung des Parameters 4 von 'int' in 'char *' nicht moeglich

Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

Also man kann ja (ganz bestimmt?!) auch in C++ aus einer Int-Varible ein String machen. Aber wie?

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 27.06.2001 um 13:51 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
27.06.2001, 13:54
TheTinySteini



Aber es gibt doch auch DrawHudNumber! =)

Nunja, ansonsten gibt's da noch ne Funktion, die dir nen Int in nen String umwandelt, nämlich itoa( Integer );

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
002
27.06.2001, 14:48
DarKnight



hmmm itoa und atoi haben manchmal probleme. An deiner Stelle würde ich (also wenn du wirklich den char konvertieren musst) immer sprintf(char, "%d", integer); nehmen....kommt irgendwie besser. Weiss auch nicht genau wieso aber die atoi und itoa anweisungen scheinen bei manchen chars nicht richtig zu funktionieren, besonders bei char*

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
003
27.06.2001, 14:50
Retro



Jaja, DrawHudNumber ist nicht so ideal für meine Zwecke! ;)

Aber itoa( Integer ); geht auch nicht. :-\

Quellcode:gHUD.DrawHudString(100, ScreenHeight - 120, 200, itoa( m_iHealth ), 150, 150, 150);

So, nur dann kommt:
error C2660: 'itoa' : Funktion akzeptiert keine 1 Parameter

Scheinen zu wengi Parameter zu sein... :( Aber was soll noch dazu?

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
004
27.06.2001, 15:47
DarKnight



lol du musst der 2 parameter mitgeben. als erstes den char der die zahl bekommen soll und als zweites die zahl.

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
005
27.06.2001, 16:00
Retro



Jaja... nicht lachen, ich kenn mich in C++ noch nicht so gut aus! ;)
Ich bin Delphi gewöhnt und da heisst das: IntToStr(m_iHealth) Naja... ich probier gleich nochmal nen bissel damit rum.

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 27.06.2001 um 16:01 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
006
27.06.2001, 20:26
Another1



versuch dich mal an sprintf, das is seeehr schönes tool, (such mal nach printf auf msdn.microsoft.com, das funzt genauso, nur das es eben nicht in nen string printet, wie sprintf, sondern an den stdout (meist monitor, drucker, file etc))

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
007
28.06.2001, 13:41
Creeper



hm, also ich hba bis jetzt keine Probleme mit itoa gehabt ??

--

Head Coder:Sudden-Impact

Listen to CKY you fuCKYrs http://www.ckymusic.com

zum Seitenanfang zum Seitenende Profil || Suche
008
28.06.2001, 14:48
Prefect



Ich hatte auch noch keine wirklifchen Probleme mit itoa & co., aber auf Grund von diversen Exploits, potentiellen Bugs, usw. ist snprintf immer noch am besten - snprintf funktioniert wie sprintf, bloß dass man noch die Größe des Buffers mit angeben kann.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
009
28.06.2001, 15:05
DarKnight



Nunja. ito produziert wie gesagt in ganz seltenen Fällen fehler. Zum Beispiel kann man die chars die da rauskommen zum Teil nicht weiterverwenden, oder bearbeiten usw. Es kann genausogut an mir liegen dass da Fehler rauskamen aber ich hatte so wie in der Definition verfahren. Naja wie gesagt mit s(n)printf ist alles besser =)))

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
010
28.06.2001, 15:10
Retro



aber ich weis immer noch nicht wie ich es anwenden soll, bei allen möglichen kombinationnen kommen fehler raus! :( Ich machs bissher so:

Quellcode:
[color="blue"]char[/color] Health;

sprintf(Health, "%d", m_iHealth);

gHUD.DrawHudString(100, ScreenHeight - 120, 200, Health, 150, 150, 150);

Aber es kommen wie gesagt immer Fehler...

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 28.06.2001 um 15:10 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
28.06.2001, 15:14
Hessie J.



mach mal lieber:

char Health[10]; <-- je nachdem wie lang die Zahl werden kann (Ziffern)

--

zum Seitenanfang zum Seitenende Profil || Suche
012
28.06.2001, 17:36
DarKnight



char *health

oder

char health[16]

Hessie hat recht. Damit sagst du wie lang die Zeichenkette sein soll. bei char * sieht das anders aus, denn da kannst du so viele zeichen benutzen wie du willst. Allerdings musst du nachdem du im HL code einen char * mit sprintf "gefüllt" hast ihn in allen HL commands wie zum beispiel ClientPrint() mit STRING(char *) umformen da es sonst oft zu komischen fehlern bis zu sporadischen "Rausfliegern" aus dem Spiel kommt.....weiss gott wieso =) Oder vielleicht weiss es ja doch Prefect?? =)

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
013
28.06.2001, 17:51
Hessie J.



@DarkNight: Aber Speicher allozierst Du schon noch, wenn du 'char *health;' benutzt (new bzw. malloc)?

--


Dieser Beitrag wurde am 28.06.2001 um 17:51 von Hessie J. bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
014
28.06.2001, 20:04
Another1



jo, ich glaub das hat DK vergessen *omfgrofl*

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
015
28.06.2001, 22:27
DarKnight



*gggg* ihr säcke =)

Das ist gar nicht unbedingt notwendig. Es scheint mir nur im HL Code so zu sein. Könnt ihr mir da nen Grund liefern? Probierts doch mal in einem normalen MFC / Win32 Programm aus! Es funzt auch ohne Speichervorbelegung. Naja Jungens man kann doch immer noch lernen =))))))

PS: Another One Bites The Dust.......Another One Bites The Dust....... *G*

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
016
29.06.2001, 00:03
Hessie_J



DarkNight, das meinst Du ja wohl jetzt nicht im Ernst? Ich bin immer so gutgläubig ...

--

zum Seitenanfang zum Seitenende Profil || Suche
017
29.06.2001, 00:05
Retro



loooool

Another One Bites The Dust.......Another One Bites The Dust.......
*cool*

--
Übrigens:

Quellcode:[color="blue"]char[/color] Health[3];

sprintf(Health, "%d", m_iHealth);

gHUD.DrawHudString(100, ScreenHeight - 120, 200, Health, 150, 150, 150);

funktioniert perfekt Thx!

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 29.06.2001 um 00:26 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
29.06.2001, 09:22
Hessie J.



Kann der Health-Wert denn nicht 100 erreichen? Dafür bräuchte man nämlich 4 Bytes (3 Ziffern + abschliessendes 0-Byte). Wenn Du nicht gerade an Byte-Grenzen ausrichtest (#pragma pack(1)) bleibt das 4. Byte zwar sowieso unbelegt, aber ganz sauber isses nicht.

Das hier sollte z.B. nicht klappen:
Quellcode:
#include <assert.h> // ka ob das sein muss
#pragma pack(push,1)
char health[3];
char test = '?';
sprintf(health, "%d", 100);
assert(test == '?');
#pragma pack(pop)

--

zum Seitenanfang zum Seitenende Profil || Suche
019
29.06.2001, 14:02
Retro



Nein, scheinbar gibt man dort die wirkliche Anzahl an Ziffen an!
Auf jedenfall funktioniert es hervorragend! Die Health wird in jedem bereich richtig angezeigt! von 0 bis 100! Aber trotzdem Thx!

Ich hab jetzt nen anderes Problem...
Ich kenne mich in Delphi aus, deswegen kenne ich es so:
Quellcode:gHUD.DrawHudString(100, ScreenHeight - 120, 200, [color="red"]Health + "%"[/color], 150, 150, 150);

Aber in C++ geht das scheinbar garnicht! :-\

Ich möchte hinter den aktuellen Health-Wert noch ein % hängen, also einfach an einen String noch einen dran hängen, aber mit meiner Methode geht das nicht! :(

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 29.06.2001 um 14:07 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
020
29.06.2001, 14:20
dp
Administrator


Quellcode:char Health[5];

sprintf(Health, "%d\%", m_iHealth);

gHUD.DrawHudString(100, ScreenHeight - 120, 200, Health, 150, 150, 150);

denk ich mal .. allerdings weiss ich nicht ob man % wirklich so escapen muss.

--

zum Seitenanfang zum Seitenende Profil || Suche
021
29.06.2001, 14:23
Hessie J.



Jetzt weiss ichs, ihr wollt mich verarschen :)

Glaub mir doch einfach!

Dein Problem kannst Du so lösen:

Quellcode:
char health[5]; // 3 Ziffern, ein %-Zeichen UND DAS ABSCHLIESSENDE ZERO!!!
sprintf(health, "%d%%", m_iHealth);
gHUD.DrawHudString(100, ScreenHeight - 120, 200, health, 150, 150, 150);

[edit]
Mist, nur Zweiter, aber vielleicht glaubt er's jetzt! :)
[/edit]

--


Dieser Beitrag wurde am 29.06.2001 um 14:28 von Hessie J. bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
022
29.06.2001, 15:05
[RMen]OneStone



Halt, dasm von Hessie ist FALSCH!=P
Es müsste
Quellcode:sprintf(health, "%d%%", m_iHealth);
heissen, da das % sonst als Vording zu ner Variable Interpretiert wird...

P.S.:
Wer kam auf die dummeIdee Code zwischen diese
Linien zu packen????

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/


Dieser Beitrag wurde am 29.06.2001 um 15:08 von [RMen]OneStone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
023
29.06.2001, 15:27
Retro



lool wenn meine Map jetzt fertig kompiliert ist, probier ich alles mal aus.

Aber wisst ihr eigentlich wie sehr ihr mich grade verwirrt habt! =D

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
024
29.06.2001, 15:39
Hessie J.



@onestone: Wo issen da jetzt der Unterschied zu meinem Code???

--

zum Seitenanfang zum Seitenende Profil || Suche