Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
04.12.2010, 15:07
Xardas



Tag zusammen, erstmal zu meinem Problem:
Ich will die Health-Anzeige im HUD durch ein animiertes Sprite ersetzen.

Dadurch dass man das Frame des Sprites,welches dargestellt werden soll, manuell an den Aufruf der Draw-Funktion übergeben werden muss, arbeite ich mit der Systemzeit.

Zunächst initialisiere ich am Anfang der Hud.cpp 2 Variablen :

float currentTime = NULL ;
int framecounter = 0 ;

In der CHudHealth::Draw Methode später :

if (currentTime = NULL) currentTime = gHUD.m_flTime;

if ((gHUD.m_flTime-currentTime)>1.0f)
{
currentTime = gHUD.m_flTime;
if (framecounter<=11) ++framecounter;
else framecounter = 0;
}

SPR_Set(LoadSprite("sprites/ECGfine.spr"), 255, 255, 255);
SPR_DrawAdditive(framecounter, x, ScreenHeight-120,NULL);

Das Sprite hat insgesamt 12 Sprites, durch die auch korrekt durch itteriert wird.

Mein Problem ist, dass nachdem man das erste mal den Suit aufhebt, zwar 1 Sekunde gewartet wird ( = 1.0F, wenn ich die werte auf z.b 4.0F ändere wartet er 4 Sekunden), bis der nächste Frame gewählt wird, ab diesem Punkt jedoch alles was in dem {] Block steht durchgehend ausgeführt wird.

Ich finde meinen Fehler einfach nicht - wär nett, wenn da mal jemand drüberschauen könnte ;)

--

Music Artist / 2D Artist / Mapper


Dieser Beitrag wurde am 04.12.2010 um 15:14 von Xardas bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
04.12.2010, 16:38
theDon



Zitat:
Xardas postete
Quellcode:if (currentTime = NULL)
Du willst an der Stelle vermutlich eher keine Zuweisung ausfuehren.

Ansonsten: Warum haelst du NULL fuer einen geeigneten Wert fuer Floats?

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
002
04.12.2010, 17:23
Xardas



Also ich komme aus dem Java-Lager, es sollte doch möglich sein jeden Datentyp auf NULL zu setzen, oder? Ich könnte auch beispielsweise -1 als Initialwert benutzen, aber es sollte auf das selbe hinauslaufen.

Und ich denke dass der Fehler tatsächlich an dem "=" liegt, da habe ich geschlampt ;)

Wunder mich nur, dass der Compiler da keinen Fehler ausgespuckt hat. Oder wird das ganze als boolscher Ausdruck interpretiert ? Sprich, es wird TRUE zurückgegeben wenn in meinem Falle die Operation currentTime = NULL erfolgreich war?

Edit : Jop, klappt nun wie geplant. Danke nochmal ;)

--

Music Artist / 2D Artist / Mapper


Dieser Beitrag wurde am 04.12.2010 um 17:37 von Xardas bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
04.12.2010, 19:00
Kriz



Es ist syntaktisch und grammatisch korrekt, nur eben nicht gewollt... Und C++ ist nicht Java ;-)

Wenn der Ausdruck ausgewertet wird, kommt übrigens false raus... Denn NULL ist 0 ist false in C++

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
004
04.12.2010, 19:04
Bluthund



Zitat:
Also ich komme aus dem Java-Lager, es sollte doch möglich sein jeden Datentyp auf NULL zu setzen, oder?
C++ ist nicht Java.
NULL in C++ (eigentlich in C - in C++ nimmt man ueblicherweise 0 statt NULL - bezeichnet lediglich den Nullpointer-Wert) ist auch nicht das was null in Java ist.
edit2: Ne Zuweisung von null auf eine float-Variable ist btw in Java nicht drin.

Zitat:
Oder wird das ganze als boolscher Ausdruck interpretiert ?
Siehe oben.
operator=() gibt ueblicherweise den Wert zurueck, der zugewiesen wurde. Das ist hier auch der Fall, da es ne float-Zuweisung ist (also ohne Operator-Ueberladung). Von 0 verschiedene Werte in einer if-Kondition werden als true interpretiert. Im konkreten Fall also false.

edit: ninja'd

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 04.12.2010 um 19:25 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
12.12.2010, 06:16
Megge



Zitat:
Xardas postete
if (currentTime = NULL) currentTime = gHUD.m_flTime;

if ((gHUD.m_flTime-currentTime)>1.0f)
{
currentTime = gHUD.m_flTime;
if (framecounter<=11) ++framecounter;
else framecounter = 0;
}

Kann zwar weder vernünftig C++ noch hab ich mich je an HL-Code gesetzt, aber:
ich seh das so, dass currentTime nur genau einmal gesetzt wird. somit wird die Differenz zwischen gHUD.m_flTime (was auch immer das ist) und currentTime immer grösser. Ergo wird die Klammer immer ausgeführt. Kann das sein?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
12.12.2010, 16:04
theDon



Nein, der Block wird immer ausgefuehrt, weil currentTime jedesmal davor auf 0 gesetzt wird.

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche