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



Tach auch =)

Ich hab ein Problem mit diesem Zoom. Ich hab das ganze als Hud Funktion gemacht welche über ne Msg vom Server verändert wird.
Der Server schickt eine Variable, die den Zoomfaktor angibt, auf den gezoomt werden soll. Z.B. 20. Die Hud Funktion prüft dann ob der gegenwärtige FOV größer oder kleiner als der Zoomfaktor is und dem entsprechend wird der FOV vergrößert verkleinert. Wenn der momentane FOV genauso groß ist, wie der zu erreichende, wird einfach nichts verändert. Immo is das ganze ohne Sprites, einfach nur die FOV Veränderung. Die HUD Funktion ist IMMER aktiv.
Den FOV veränder ich per gEngfuncs.m_iFOV oder so.

Sooo nun zu meinem Problem. Wenn ich per Msgs *ausser crossbow.cpp* den Fov verändern will, passiert nichts. Bevor ich da jetzt groß mich ransetz und noch Sprite dazu bastel usw. wollt ich gern mal sehen ob das funktioniert.
Kompilierfehler krieg ich nicht, nur das das Zoomen nit funkt.
Wenn ich die Zoomfunktion clientside auskommentier, kommt mir HL im Dev Modus das die Msgs von der Crossbow nirgends ankommt. Also kannts an der Msg nit liegen. Trotzdem will das Teil nit zoomen.

Hat wer ne Idee was das sein könnte ??

Sorry das ich keinen Code poste, bin aber an nem anderem PC und komm da nit ran :(

Thx schon mal im Vorraus

MfG
[-XHP-]The Overmind

--

zum Seitenanfang zum Seitenende Profil || Suche
001
28.08.2001, 18:44
thinktank



Wahrscheinlich, hast du versäumt, die CBasePlayer::m_iFOV Variable auch zu verändern, mit der wird nämlich die FOV-Variable auf der Clientside,auf die du wahrscheinlich zugreifst, geupdatet. Bei der Crossbow ist das schon drinnen, ergo könnte das das Prob sein. Oder hast du das schon reingeschrieben ?

Thx !

--

zum Seitenanfang zum Seitenende Profil || Suche
002
28.08.2001, 18:48
Killing Me Softly



Also im Prinzip müsste es funktionieren - hab's in meiner Mod ja auch so gemacht. Warum es bei dir nicht funzt kann ich ohne Einblick in deinen Code nicht sagen. Damit meine Antwort dir auch was bringt, hier der Code, wie ich die Sache gelöst habe (müsste mit deinem Code weitestgehend identisch sein).
Quellcode:
#include "hud.h"
#include "cl_util.h"
#include "parsemsg.h"

#include <string.h>
#include <stdio.h>

DECLARE_MESSAGE(m_Zooming, Zooming)

int CHudZooming::Init(void)
{ m_iZooming = 0;

HOOK_MESSAGE(Zooming);

gHUD.AddHudElem(this);

return 1;
};

int CHudZooming::VidInit(void)
{

m_iZooming = 0;

return 1;
}

int CHudZooming :: MsgFunc_Zooming(const char *pszName,  int iSize, void *pbuf )
{
BEGIN_READ( pbuf, iSize );

m_iZooming = READ_SHORT();

m_iFlags |= HUD_ACTIVE;


return 1;
}

extern float g_lastFOV;

void CHudZooming::Think(void)
{
if (m_iZooming)
{
if (m_iZooming > gHUD.m_iFOV)
gHUD.m_iFOV++;
else if (m_iZooming < gHUD.m_iFOV)
gHUD.m_iFOV--;
else
m_iZooming = 0;

g_lastFOV = gHUD.m_iFOV;

}
}

--

Der Horizont vieler Menschen ist ein Kreis mit Radius Null - und das nennen sie ihren Standpunkt.


Dieser Beitrag wurde am 28.08.2001 um 18:50 von Killing Me Softly bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
003
29.08.2001, 12:33
The_Overmind



Genauso hab ichs eigentlich auch gemacht.
Nur hab ich eine Variable m_iCurFov die den momentanen FOV speichert und die Variable m_iNextFov die den zu erreichenden FOV speichert.
Ich hab das nicht per Think Funktion sondern in der Draw Funktion gemacht.
Die wird ja jeden Frame aufgerufen.
ich schreib mal die Funktion aus dem Kopf auf

#include "hud.h"
#include "cl_util.h"
#include "parsemsg.h"

#include <string.h>
#include <stdio.h>

DECLARE_MESSAGE( m_Zoom, Zoom )

int CHudZoom::Init(void)
{
m_iCurFov = gHUD.m_iFOV;
m_iNextFov = gHUD.m_iFOV; // Wir wollen ja am Anfang bei 90 Grad bleiben

HOOK_MESSAGE( Zoom );

gHUD.AddHudElem(this);

return 1;
}

int CHudZoom::VidInit(void)
{
m_iCurFov = gHUD.m_iFOV;
m_iNextFov = gHUD.m_iFOV; // Das ganze nochmal

return 1;
}

int CHudZoom::Draw( void )
{
if ( m_iCurFov != m_iNextFov )
{
if ( m_iNextFov < m_iCurFov )
{
m_iCurFov--;
}
else
{
m_iCurFov++;
}
} //Veränderungen der m_iCurFov abgeschloßen

gHUD.m_iFOV = m_iCurFov;

return 1;
}

int CHudZoom :: MsgFunc_Zoom(const char *pszName, int iSize, void *pbuf )
{
BEGIN_READ( pbuf, iSize );

m_iNextFov = READ_BYTE();

m_iFlags |= HUD_ACTIVE;

return 1;
}

//Ende

Naja
Du veränderst den gHUD.m_iFOV Direkt, ich erst eine Variable und un dann weise ich dem Fov den Wert der Variable zu.
Das könnte es sein, glaub ich aber nicht :(

Trotzdem Danke :)

[-XHP-]The Overmind

--

zum Seitenanfang zum Seitenende Profil || Suche
004
29.08.2001, 16:35
DBug



Hmm, darf ich mal fragen, warum ihr alle eine HUD klasse macht ? Ich meine, der Zoom hat doch eigentlich nix mit dem HUD direkt zu tun, oder ?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
29.08.2001, 16:51
The_Overmind



Nein, mit dem HUD direkt hat das nichts zu tun.
aber das Hud wird in jedem Frame erneuert.
Somit hat man sozusagen eine Think Funktion und man kann das HUD an Msgs binden.

--

zum Seitenanfang zum Seitenende Profil || Suche