Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
24.09.2011, 18:48
Snut



Ich suche gerade eine Möglichkeit, die Hudfarbe und dessen a-Wert zu ändern. (alpha?)
Gibt es eine Funktion, mit der man dem gesamten Hud neue Werte zuordnen kann oder muss ich das über die einzelnen Hud Elemente machen?
Hindergrund ist, ich möchte das Hud ähnliche wie die Batterieanzeige aufhellen und anders färben, wenn die Taschenlampe an ist.

--

zum Seitenanfang zum Seitenende Profil || Suche
001
25.09.2011, 00:40
Bluthund



Du musst einfach nur die HUD-Color wird ueber die PP-Konstanten in hud.h aendern (RGB_YELLOWISH, RGB_REDISH) fuer eine globale Aenderung oder du ersetzt die entsprechenden Vorkommnisse der Konstanten durch andere Konstanten, die du entsprechend setzt.

Der Alphawert wird durch die Sprites selbst gesetzt. Die HUD-Sprites sind alle 256 Graustufen und werden additiv gerendert, d.h. je heller desto undurchsichtiger (Farbe = Spritefarbe * Faerbung + (1-Spritefarbe) * Hintergrund); scharz = komplett durchsichtig.

--

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 25.09.2011 um 00:44 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
25.09.2011, 01:04
Snut



Ja, ich weiß. Darum geht es aber nicht. Ich wollte den Farbwert abhängig davon machen, ob die Taschenlampe an ist oder nicht.

Beispielsweise flashlight.cpp:
if (m_flBat < 0.20)
UnpackRGB(r,g,b, RGB_REDISH);
else if( m_fOn )
UnpackRGB(r,g,b, RGB_WHITISH);
else
UnpackRGB(r,g,b, RGB_YELLOWISH);

if (m_fOn)
a = 225;
else
a = MIN_ALPHA;

Das ändert natürlich nur den Farb/Alpha Wert des Taschenlampen Hud. Ich dachte, dass es daher eine Funktion gibt, mit der ich das ganze Hud in einem Zug so umfärben kann.
Alternativ könnte ich diese wenn/dann-Abfrage in jedes Hud-Element einbauen, nur weiß ich nicht ob es eine clientseitige Bedingung für flashlight on bzw. ich mir eine erstelle.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
25.09.2011, 18:30
Bluthund



Zitat:
Snut postete
Das ändert natürlich nur den Farb/Alpha Wert des Taschenlampen Hud. Ich dachte, dass es daher eine Funktion gibt, mit der ich das ganze Hud in einem Zug so umfärben kann.
Nein, gibt es nicht, da sich jedes HUD-Element selbst zeichnet.
Zitat:
Alternativ könnte ich diese wenn/dann-Abfrage in jedes Hud-Element einbauen, nur weiß ich nicht ob es eine clientseitige Bedingung für flashlight on bzw. ich mir eine erstelle.
Es gibt keine global zugaengliche aber das waere ja simpel zu realisieren (z.B. ueber nen Accessor in CHud und einen in CHudFlashlight).
Alternativ kannst du deinem HUD (CHud) einen "Alphawert" (der Alphawert kommt wie gesagt aus den Sprites selbst, was Valve mit dem a da in CFlashlight::Draw() macht ist lediglich eine Skalierung der RGB-Werte ueber ScaleColors()) verpassen, den du dann in jedem Element beim Zeichnen entsprechend beachtest und beim Umschalten der Taschenlampe veraenderst.

Oder du gehst komplett von den Konstanten weg und gibst deinem HUD die Sachen als Variablen (m_NormalColor, m_LowColor etc.). Das wuerde es dir z.B. auch ermoeglichen die Farben zur Laufzeit zu veraendern. Macht natuerlich etwas mehr Arbeit, da einige Sachen anzupassen waeren.
Simples Beispiel: Quellcode:union ARGBColor {
    unsigned int argb;
    struct { unsigned char b, g, r, a; }; // little endian
};
Der HL-Code nutzt fuer Farbanteile allerdings ueberall int, das koennte unter Umstaenden mit dem Beispiel hier Probleme bereiten, falls wirklich mal mehr als 8bit benoetigt werden (bspw. durch ne Skalierung mit anschliessendem Clamping). Aber es bietet halt die Moeglichkeit die Farbe direkt in einem Statement zu setzen:Quellcode:c.rgba = 0x00ffa000; // HL-Orange Aber egal wie du es machst: Um Veraenderungen in den Zeichenmethoden der einzelnen HUD-Elemente kommst du nicht herum, da sie standardmaessig nix von der Aktivitaet der Taschenlampe wissen.

Also: [code]-Tags

--

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 25.09.2011 um 18:32 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
26.09.2011, 18:28
Snut



Wieso muss ein Accessor in die CHud? Die CFlashlight ist doch ein CHudBase. Ich bin gerade etwas konfus.

--

zum Seitenanfang zum Seitenende Profil || Suche
005
26.09.2011, 19:04
Bluthund



Zitat:
Bluthund postete
… (z.B. ueber nen Accessor in CHud und einen in CHudFlashlight).
CHudBase ist die Basisklasse von der alle HUD-Elemente ableiten, da solltest du garnichts dran machen.
CHud ist die Klasse fuer das HUD als Ganzes und wird genau einmal instantiiert (global als gHUD) und ist von allen HUD-Elementen erreichbar (weil eben global).

Aber kuemmer dich auch garnicht drum was ich da geschrieben hab. Ich hab das da oben auf die Annahme gestuetzt, dass die HUD-Elemente private Member von CHud sind. Dem ist aber nicht so, wie ich gerade festgestellt habe. Du kommst also ueber gHUD.m_Flash von ueberall an das Flashlight-HUD-Element heran und kannst dort mit nem entsprechenden oeffentlichen Accessor den Status direkt anfragen.

--

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-

zum Seitenanfang zum Seitenende Profil || Suche
006
26.09.2011, 19:24
Snut



Cool, danke. Klappte aber auch ohne Accessor.

--

zum Seitenanfang zum Seitenende Profil || Suche
007
26.09.2011, 20:21
Bluthund



Jo, geht natuerlich auch ohne wenn du die Membervariable public deklarierst. Aber sauber ist das nicht ;) (ermoeglicht nicht nur Auslesen sondern eben auch Setzen der Variable).

--

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-

zum Seitenanfang zum Seitenende Profil || Suche
008
26.09.2011, 22:36
Snut



Ja, mag ja sein. Das macht das ja gerade so einfach. Ich bin noch nicht so tief drin, aber kann den die Variable einfach so gesetzt werden?

--

zum Seitenanfang zum Seitenende Profil || Suche