 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 21.07.2002, 14:14 Titel: Framerate bestimmen |
|
|
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!!!
Hab schon über ne Stunde rumprobiert...
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!!!
Cu TheMillenium _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 21.07.2002, 14:25 Titel: |
|
|
Bin zwar nicht Hazel, versuchs aber trotzdem mal
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  |
|
Nach oben |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 21.07.2002, 15:50 Titel: DANKE |
|
|
Ich habe die Variablen global gemacht & siehe da....die Frames werden angezeigt!!!
DANKE!!!
Ich hattes zwar wie im Buch gemacht, da werden sie global & lokal bestimmt...aber da gings nicht...
DANKE!!!
Cu TheMillenium _________________ The source of all power is in its destiny... |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 21.07.2002, 15:52 Titel: |
|
|
1. Ich bin kein Profi(trotzdem danke ;P)
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 |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 21.07.2002, 17:06 Titel: |
|
|
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 |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 21.07.2002, 17:12 Titel: |
|
|
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 |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 21.07.2002, 17:51 Titel: Genau |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 21.07.2002, 17:54 Titel: |
|
|
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 |
|
 |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 21.07.2002, 17:59 Titel: DANKE |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 21.07.2002, 18:02 Titel: |
|
|
Nein... eine statische Variable bleibt die ganze Zeit im Speicher. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 21.07.2002, 22:46 Titel: |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 22.07.2002, 09:48 Titel: |
|
|
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 |
|
 |
|
|
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
|