JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=5b32ddb12687a245eb23c7340ff2816eMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Framerate bestimmen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 15:14    Titel: Framerate bestimmen Antworten mit Zitat

Ich habe wie es im Quellcode zu dem Performance Counter steht...einen etwas abgewandelten richtige Framerate Funktion geschrieben...doch bei der Framerate wird immer 0 angezeigt!!! Sad

Hab schon über ne Stunde rumprobiert... Mad

Code:
void Framerate(void)
{
//Initialisierung
int thisTime, elapsedTime, lastTime;
int FrameCount, Frames;
int Time, FrameTime;

    // Berechnung der tatsächlichen Framerate
    thisTime= timeGetTime();
elapsedTime = thisTime - lastTime;
lastTime= thisTime;

FrameCount++;

Time = thisTime - FrameTime;
if(Time > 1000)
{
Frames     = (FrameCount * 1000) /  Time;
FrameTime  = thisTime;
FrameCount = 0;
}
    // Framerate ausgeben
    char frametext[10];

    sprintf(frametext,"%d",Frames);

//TEXTAUSGABE


    // Eine Struktur für Bliteffekte anlegen
    DDBLTFX DDBltFX;

    // Initialisieren und Größe festlegen
    ZeroMemory(&DDBltFX,sizeof(DDBltFX));
    DDBltFX.dwSize = sizeof(DDBltFX);
    HDC hDC;
    // DC für die Oberfläche anfordern
    if(FAILED(lpDDSPrimary->GetDC(&hDC)))
    {
        Error("DC ist nicht verfügbar");
    }
//Texteigenschaften setzten
    SetTextColor(hDC,RGB(255,0,0));
    SetBkColor(hDC,RGB(255,255,255));
    SetBkMode(hDC,OPAQUE);

//Text richtig ausgeben
TextOut(hDC,50,50,"          ",10);
TextOut(hDC,50,50,frametext,strlen(frametext));
//hDC unbedingt wieder freigeben!!!
lpDDSPrimary->ReleaseDC(hDC);
}


Hoffentlich kannst du mir wieder helfen, Hazel!!!

DU bist ein echter Profi!!! Smile

Cu TheMillenium
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 15:25    Titel: Antworten mit Zitat

Bin zwar nicht Hazel, versuchs aber trotzdem mal Smile

Kann es sein, dass die Variable FrameTime irgendwie nicht gesetzt wird? Und dann glaube ich, dass du einige Variablen benutzt, die nicht global sind, also mit jedem Funktionsaufruf auf 0 gesetzt werden, wie zb lasttime.

Ich hoffe das hilft dir weiter!
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 16:50    Titel: DANKE Antworten mit Zitat

Ich habe die Variablen global gemacht & siehe da....die Frames werden angezeigt!!! Smile

DANKE!!! Smile

Ich hattes zwar wie im Buch gemacht, da werden sie global & lokal bestimmt...aber da gings nicht... Sad

DANKE!!! Smile


Cu TheMillenium
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 16:52    Titel: Antworten mit Zitat

1. Ich bin kein Profi(trotzdem danke ;P) Smile

2. Michael hat recht.

Hier mal 3 Lösungsvorschläge:

a) Mach die Variablen global
b) Lass sie in der Funktion und mach sie statisch
c) Bastel die ne Klasse draus und mach die Variablen Member der Klasse.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 18:06    Titel: Antworten mit Zitat

Hi,

Zitat:
a) Mach die Variablen global


Ich habe was gegen den zu großen gebrauch von globalen Variablen.
Es ist zwar nur meine Meinung, aber wenn man es mit den Globalen Variablen übertreibt, bekommt man spätestens beim Debuggen erhebliche Probleme, weil man nie ganz sicher sein kann, ob nicht irgend eine andere Funktion den erwarteten Wert inzwischen verändert hat.

Die statische Lösung gefällt mir personlich besser.

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 18:12    Titel: Antworten mit Zitat

Ach ja, jetzt hab ich den eigendlichen Grund vergessen, warum ich antworten wollte:

Eine festgelegte Framerate zu verwenden ist *IMMER* die schlechtere Methode: Besser ist es, den Prozess so schnell laufen zu lassen, wie er kann und die Bewegungen an die aktuelle Framerate anzupassen.

Das sieht auf schnelleren Computern meißt besser aus, und macht auf langsameren Computern keine Probleme. Stell dir mal vor, was passiert, wenn ein Netzwerkspiel auf eine festgelegte Framerate von 25 FPS angewiesen ist, und einer der Rechner nur 13 FPS schafft...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 18:51    Titel: Genau Antworten mit Zitat

Ja...ich möchte auch so wenig globale Variablen haben wie es nur geht...

...wie macht man Variablen statisch???

Ich habe erst gedacht ihr meint const ..also konstnat...aber das ist ja nicht statisch...


Cu TheMillenium
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 18:54    Titel: Antworten mit Zitat

Also das geht so:

Code:

void func(void)
{
    static int foo = 0; // Initialisierung ist wichtig!!

    ++foo;
    cout << foo << '\n';
}

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 18:59    Titel: DANKE Antworten mit Zitat

Was macht man mit static eigentlich genau???

Sagt man da nur, dass die Variable nur einmal initialisiert werden darf, oder....


Cu TheMillenium
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 19:02    Titel: Antworten mit Zitat

Nein... eine statische Variable bleibt die ganze Zeit im Speicher.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 21.07.2002, 23:46    Titel: Antworten mit Zitat

Eine statische Variable wird nachdem sie Initialisiert wurde nicht mehr neu Initialisiert. Sie Bleibt im Speicher aktuell, auch wenn die Funktion verlassen wird.
Ruft man danach die Funktion erneut auf, hat die Variable noch den Wert, die sie beim Verlassen derselben hatte. Das ist so ähnlich wie Global, nur daß die Variable nur innerhalb dieser Funktion bekannt ist.

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 22.07.2002, 10:48    Titel: Antworten mit Zitat

Das ist für statische Variablen in Funktionen richtig... aber generell sind das Variablen, die während des gesamten Programmablaufs im Speicher sind. Sie mit globalen Variablen zu vergleichen ist nicht wirklich angebracht... es gibt auch statische Globalen. Dann gibt es noch statische Membervariablen. Auf diese können alle Instanzen einer Klasse zugreifen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum