JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Framebremse
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 16:39    Titel: Framebremse Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 16:48    Titel: Antworten mit Zitat

Ich habe garkeine Framebremse... die Dinger mag ich nicht.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 16:56    Titel: Antworten mit Zitat

lol..was für eine Aussage Razz
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
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 17:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 17:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.08.2003, 17:59    Titel: Antworten mit Zitat

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
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: 17.08.2003, 18:09    Titel: Antworten mit Zitat

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! Very Happy Da muss ich meinen Vorgängern Recht geben.
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 18:18    Titel: Antworten mit Zitat

Hazel hat Folgendes geschrieben:
Du irrst, mein Lieber, du irrst. Wink Alle meine Bewegungen und Animationen sind abhängig von der Zeit und nicht von den Frames. Smile 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 !!! Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 17.08.2003, 18:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.08.2003, 18:26    Titel: Antworten mit Zitat

Jepp, das GetTickCount schlecht sind habe ich ja dank TheMillenium erfahren, danke nochmal.
Ich wusste das es sowas gibt hab nur nie danach gesucht Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 18.08.2003, 12:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 18.08.2003, 18:07    Titel: Antworten mit Zitat

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
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: 18.08.2003, 18:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 18.08.2003, 18:25    Titel: Antworten mit Zitat

Kennst du solche Programme ? Kann ich mal ein par Links bekommen ?

das ist doch hoffentlich nicht sowas wie Softwarebremse.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Manuel87
Mini JLI'ler



Anmeldedatum: 28.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 11:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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