Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 17.08.2003, 16:39 Titel: Framebremse |
|
|
Hi, mich würde mal interessieren, wie oft ihr euch die Framerate ausrechnet. Die Framerate andauernd zu aktualisieren, stellt sich irgendwie nicht als optimale Lösung dar, da es zu oft zu Hackern führt wenn die Framerate kurzzeitig sinkt und wieder steigt.
Wann setzt ihr die Framerate fest? |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 16:48 Titel: |
|
|
Ich habe garkeine Framebremse... die Dinger mag ich nicht. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 17.08.2003, 16:56 Titel: |
|
|
lol..was für eine Aussage
du proggst das einfach alles so, dass es bei dir richtig läuft? Läuft das dann nicht auf besseren/schlechteren Systemem dementsprechend schneller/langsamer. Ich dachte so ne Framebremse wäre elementarer Bestandteil eines jeden Spiels. |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 17:25 Titel: |
|
|
Du irrst, mein Lieber, du irrst. ;) Alle meine Bewegungen und Animationen sind abhängig von der Zeit und nicht von den Frames. :) d.h. es läuft auf allen Rechnern gleichschnell, es werden nur nicht alle Frames gezeigt. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 17.08.2003, 17:38 Titel: |
|
|
Kannst du mal näher erklären, wie du das machst? Wie errechnest du dir z.B. bei einer gerader Bewegung den Schritt/Durchlauf? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 17.08.2003, 17:59 Titel: |
|
|
So wie hier wird es Hazel sicher auch machen:
Das hier beim Start:
Code: |
SpeedControl.loop_start_time=GetTickCount();
|
Das hier hinschreiben wo du deine Scene bewegst:
Code: |
SpeedControl.loop_end_time=GetTickCount();
SpeedControl.oldtime=SpeedControl.loop_end_time-SpeedControl.loop_start_time;
SpeedControl.time=SpeedControl.loop_start_time=SpeedControl.loop_end_time;
SpeedControl.speed=SpeedControl.oldtime/30.0f;
|
Dann kannst du alle deinen Bewegungsabläufe (Geschwindigkeiten) mal SpeedControl.speed nehmen.
Die Alternative wäre das du dein Programm am Ende des Renderns in eine Schleife versetzt solange bis eine bestimmte Zeit erreicht ist. (Das ist aber hässlich und die Animationen werden nicht sanfter wenn der Rechner schnell ist) |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 17.08.2003, 18:09 Titel: |
|
|
Ansonsten schreib doch eine Funktion, wie das früher bei manchen Programmen eingesetzt wird. Da haben die von ihrem Spiel allemöglichen Sequenzen durchlaufen und dabei gesehen wo deine echte Framerate liegt und dann haben sie die "Framebremse" korrekt eingestellt. Ist vielelicht nicht die optimale Lösung aber schon ziemlich gut. Aber mit der Zeit, das ist natürlich das Beste! Da muss ich meinen Vorgängern Recht geben. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
KI JLI Master
Alter: 39 Anmeldedatum: 04.07.2003 Beiträge: 965 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 17.08.2003, 18:18 Titel: |
|
|
Hazel hat Folgendes geschrieben: | Du irrst, mein Lieber, du irrst. Alle meine Bewegungen und Animationen sind abhängig von der Zeit und nicht von den Frames. d.h. es läuft auf allen Rechnern gleichschnell, es werden nur nicht alle Frames gezeigt. |
Mein reden.
So muss es sein
Hohe Bildwiederholungsfrequenzen für alle !!! |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 17.08.2003, 18:24 Titel: |
|
|
Ja ich mach es im Prinzip so wie FallenAngel. Ich setze mir eine Zielframerate und berechne aus der echten Framerate einen Geschwindigkeitsmultiplikator, nur dass ich QueryPerformanceCounter benutze anstatt GetTicks. Die Animationen behandle ich so(sollte selbsterklärend sein):
Code: |
void CAnimator::Update(float delta)
{
list<IAnimated *>::iterator iter = m_Clients.begin();
for(; iter != m_Clients.end(); ++iter)
{
IAnimated * Tmp = (*iter);
if(Tmp->_CurrAnimation->Type == TYPE_STATIC)
return;
if((Tmp->_Status == STATUS_STOPPED) || (Tmp->_Status == STATUS_FINISHED))
return;
Tmp->_Counter += delta;
while(Tmp->_Counter >= Tmp->_CurrAnimation->Delay)
{
Tmp->_Counter -= Tmp->_CurrAnimation->Delay;
++Tmp->_CurrFrame;
}
if(Tmp->_CurrFrame >= Tmp->_CurrAnimation->NumOfFrames)
{
if(Tmp->_CurrAnimation->Type == TYPE_ONCE)
{
Tmp->_CurrFrame = Tmp->_CurrAnimation->NumOfFrames - 1;
Tmp->_Status = STATUS_FINISHED;
}
else
{
while(Tmp->_CurrFrame >= Tmp->_CurrAnimation->NumOfFrames)
{
Tmp->_CurrFrame -= Tmp->_CurrAnimation->NumOfFrames;
}
}
}
}
}
|
_________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 17.08.2003, 18:26 Titel: |
|
|
Jepp, das GetTickCount schlecht sind habe ich ja dank TheMillenium erfahren, danke nochmal.
Ich wusste das es sowas gibt hab nur nie danach gesucht |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 18.08.2003, 12:35 Titel: |
|
|
Danke mal für eure Antworten...
Ich mache es so, wie im 2. Buch beschrieben...ich checke jeden Durchlauf mit QueryPerformanceCounter ob ne Sekunde um ist, und setzt dann die Framerate. Alle Bewegungen und Animgeschw. werden dann durch die Framerate dividiert. Im Grunde ist das doch dasselbe, was ihr macht (Hazel&FallenAngel), basiert auch auf der Zeit. Darum glaub ich, dass so dasselbe Proble besteht. Wenn man sich Multiplikator oder Framerate jeden Durchlauf neu ausrechnet, und jetzt im Spiel kurzzeitig um 50 Sprites mehr gezeichnet werden müssen, wird z.B. eine gerade Bewegung auf einmal schneller/langsamer.
Wäre es da nicht besser, den Multiplikator/Framerate nur ab und zu zu berechnen, oder so wie Millenium gemeint hat? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 18.08.2003, 18:07 Titel: |
|
|
Da ja ein Zeitmultiplikator berechnet wird würde sich zwar die Animation schneller/langsamer abspielen aber nur visuel, das heißt du siehst das die Bewegungen feiner oder gröber werden, vom zeitunterschied ist es aber minimal.
Milleniums Idee scheint ein bisschen veraltet zu sein oder ?? |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 18.08.2003, 18:22 Titel: |
|
|
Hab ich ja auch gesagt, dass die Methode veraltet ist. Aber ich würde einfach empfehlen, das Programm ein Systemressourcen Minimum festzulegen und wer weniger hat muss damit klar kommen. Ist ja auch bein Unreal2 so, etc... Es gibt ja so Programme die denn Rechner langsamer machen, dass man es ausprobieren kann, wie es bei Leuten laufen wird, die nicht soviel Rechenpower haben. Sorry aber so würde ich das machen. Das machen so die meisten Entwickler die vorankommen wollen und nicht auch dort wieder Performance verlieren wollen mit "unnötigen Berechnungen". Ist meine Meinung, aber jeder kann es nach gut Gedenken machen. Man schaut sich an was für Rechner die breite Masse haben wird, wenn der Release ist und dafür schneidet man das Programm zurecht... _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 18.08.2003, 18:25 Titel: |
|
|
Kennst du solche Programme ? Kann ich mal ein par Links bekommen ?
das ist doch hoffentlich nicht sowas wie Softwarebremse. |
|
Nach oben |
|
|
Manuel87 Mini JLI'ler
Anmeldedatum: 28.07.2003 Beiträge: 33
Medaillen: Keine
|
Verfasst am: 20.08.2003, 11:14 Titel: |
|
|
Am besten ist es wenn du deine Bewegungen Zeitabhängig machst aber trotzdem eine Framebremse setzt! Oder besser du gibst an wie hoch die maximale Framerate sein darf!
Weil wennst du mit zb float arbeitest dann kann es passieren das die Zeitunterschiede so klein werden wenn der rechner zu schnell ist dass die float negativ werden oder so! Wir ist mal soetwas passiert! Dann hab ich eine Obergrenze gelegt und jetzt functionierts super! |
|
Nach oben |
|
|
|