Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
24.07.2001, 22:38
thinktank



Also ich wollte eine Art Ladebalken in mein VGUI-Menu einbauen und hab auch gelesen, dass das mit der drawFilledRect-Methode geht .. Also hab ich
-vielleicht mag dies verrückt erscheinen- einfach in den Konstruktor von meinem Menu reingeschrieben:
Quellcode:
drawSetColor(255,0,0,255);
drawFilledRect(x,y,100,50);

Dann kam ein Ausnahmefehler beim Ausführen. Dann hab ich mir die CTransparent-Klasse angeschaut, und hab bemerkt, dass praktisch jedes
VGUI-Panel ein paintBackground-Funktion hat-die ähnlich wie bei den MFC
-korrigiert mich, wenn ich was falsches sage- OnDraw()- immer aufgerufen wird und das Bild entsprechend aktualisiert. Also hab ich eine Ladebalkenklasse gemacht mit der paintBackground-Funktion und das ganze da reingeschrieben. Dann hab ich die Klasse in mein Menu eingebunden und halt setVisible(true) usw. im Konstruktor vom Menu ausgeführt, aber es passierte rein gar nichts....
What's the problem ?

P.S. :Wenn die Lösung zu kompliziert ist, dann sagts mir, weil
dann probiert ichs mit FillRGBA, wobei ich den Balken dann nicht
ins Menu sonder nur ins HUD reinpflanzen kann. (oder?)

Danke !
[edit]
Lol, ich hab gar nicht bemerkt, wie sehr mir das Wort "dann" gefällt !
[/edit]

--


Dieser Beitrag wurde am 24.07.2001 um 22:41 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
24.07.2001, 22:44
Another1



also eigentlich is es ja egal, ob du es mit den VGUI funkltionen draws, oder einfach mit den alten hud engine functions, letztendlich kommt ja das gleiche raus, aber eigentlich sollte das mit dem VGUI klappen, es muss also nen grund geben, das deine paintBackground function garnicht aufgerufen wird, tu doch einfach mal nen gEngfuncs.Con_Printf("it works?!\n"); in die function, dann siehst du ob sie überhaupt aufgerufen wird.

MuchusFunusNochos

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
002
25.07.2001, 10:32
thinktank



Sie wird aufgerufen, ich poste mal den Code :
Die Klasse :
Quellcode:
class CStatsBar : public Panel
{
private:
int x, y, wide, tall,value, maxvalue;
public:
CStatsBar(int x, int y,int wide, int tall, int value, int maxvalue) :
             // value und maxvalue können erstmal vernachlässigt werden.
Panel(x,y,wide,tall)
{
this->x = x;
this->y = y;
this->tall = tall;
this->wide = wide;
this->value = value;
this->maxvalue = maxvalue;
}

virtual void paintBackground()
{
gEngfuncs.Con_Printf("it works?!\n");
drawSetColor(255,0,0,255);
drawFilledRect(this->x,this->y,this->wide,this->tall);
}

};

Die Implementierung im Konstruktor von meinem VGUI-Menu :
Quellcode:
m_pStatsBar = new CStatsBar(XRES(100),YRES(100),4,5,100,50);
m_pStatsBar->setParent(this);
m_pStatsBar->setVisible(true);

Mein VGUI-menu ist NUR ein Panel, also kein TransparentPanel mit Rand usw.
Das wird wohl kaum das Problem sein.

--


Dieser Beitrag wurde am 25.07.2001 um 10:33 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
25.07.2001, 11:22
Another1



mhh, ich glaub da problem könnte sein, das es die member x,y,wide,tall schon irgendwo definiert gibt, im Panel oder so, also benutz anstatt deiner eigenen member einfach die standard vgui dinger:
drawFilledRect(_pos[0],_pos[1],_size[0],_size[1]);

also, vielleicht klappt es, du musst dann aber auch die vgui funktionen benutzen um die size deines panels einzustellen, logisch!

... oh ich sehe gerade, du hast den functionsargumenten und membervariablen die gleichen namen gegeben, ich weiß jetzt nit was vorrang hat, aber es könnte sein das es die membervariablen sind und somit
this->x = x, nicht das x aus dem argument übernimmt, sondern einfach kurz für
this->x = this->x; ist, da bin ich mir aber nicht sicher, gib ihn einfach andere namen und dann is diese "Problemursache" aus der welt :)

alternativ dazu kannst du deine CTransparentPanel class auch in das hier ändern (wie ich es gemacht habe):

Quellcode:
//================================================================
// Panel that draws itself with a transparent black background
class CTransparentPanel : public Panel
{
private:
int r,g,b,a;
public:
CTransparentPanel(Color color, int x,int y,int wide,int tall) : Panel(x,y,wide,tall)
{
color.getColor(r,g,b,a);
}
CTransparentPanel(int iTrans, int x,int y,int wide,int tall) : Panel(x,y,wide,tall)
{
r=g=b = 0;
a = iTrans;
}

virtual void paintBackground()
{
if (a)
{
// Transparent black background
drawSetColor( r,g,b, a );
drawFilledRect(0,0,_size[0],_size[1]);
}
}

virtual void GetColor(int &_r,int &_g,int& _b,int &_a)
{
_r = r; _g = g; _b = b; _a = a;
};

virtual void SetColor(Color color)
{
color.setColor(r,g,b,a);
}


virtual void SetTransparency(int iTransparency)
{
a = iTransparency;
}
virtual int GetTransparency(void)
{
return a;
}
};

--

Another1

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


Dieser Beitrag wurde am 25.07.2001 um 11:25 von Another1 bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
25.07.2001, 13:03
thinktank



stimmt , das wird wohl das problem sein :-)

--

zum Seitenanfang zum Seitenende Profil || Suche
005
26.07.2001, 21:24
thinktank



Ich hab deinen Code 1:1 kopiert und es geht noch immer nicht !
Hast du ihn schon ausprobiert ?
Also ich hab ihn folgendermaßen in meine VGUI-Menu-Klasse reingestopft :
Quellcode:
m_pStatsBar = new CTransparentPanel(Color(255,0,0,255),XRES(100),YRES(100),100,100);
m_pStatsBar->setParent(this);
m_pStatsBar->setVisible(true);

// m_pStatsBar zeigt auf "deine" CTransparent-Klasse

Argh!
Wie haben die das bei cstrike hinbekommen ????

--

zum Seitenanfang zum Seitenende Profil || Suche
006
27.07.2001, 00:09
Another1



ja der code funzt sehr schön bei mir ... mhh weird

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche
007
27.07.2001, 14:35
thinktank



Hmm ich hab das Gefühl, dass das Panel mit der gleichen Transparenz gezeichnet wird wie der Hintergrund, ergo sehe ich es nicht... Wenn ich mit die Farben ausgeben lasse (in CTransparentPanel::paintBackground())bekomme ich immer zwei verschiedene Ausgaben
1. alle Farben 0 , AlphaChannel = 100, _size[0] = 1280, _size[1] = 960
// also genau die Werte, die das Hintergrundpanel hat
2. r = 255 , g = 0, b = 0, a = 255, _size[0]=/*weiß nicht auswendig, jedenfalls das, was ich wollte*/,_size[1]=/*genauso wie bei _size[0]*/
Das ist very weird ..
Wenn das nicht bald klappt, versuche ich es mit einem Slider, dürfte
auch gut funktionieren.

Danke , für deine Hilfe !

--


Dieser Beitrag wurde am 27.07.2001 um 14:36 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
27.07.2001, 15:06
thinktank



Hmm eigentlich Schwachsinn, was ich gesagt habe :-) Es könnte ja noch andere CTransparentPanels geben ... Ich experimentiere weiter ...

--

zum Seitenanfang zum Seitenende Profil || Suche
009
28.07.2001, 12:10
thinktank



Hmm ... Die Farben sind jedenfalls richtig, vor und nach drawFilledRect.
very very weird ...........
*ARGH*

--

zum Seitenanfang zum Seitenende Profil || Suche
010
28.07.2001, 14:45
thinktank



Jipie ! Komischerweise funzts jetzt mit schemes ! Jo !!!!!

Danke für deine Hilfe Another1 :-) !

--

zum Seitenanfang zum Seitenende Profil || Suche
011
29.07.2001, 02:56
Another1



löl .. erm .. okay .. np :D

--

Another1

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

zum Seitenanfang zum Seitenende Profil || Suche