Problem mit Synchroner Spielgeschwindigkeit, Kosmo3d

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

tmode00

Betreff: Problem mit Synchroner Spielgeschwindigkeit, Kosmo3d

BeitragDo, Dez 13, 2007 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Ich bin gerade dabei ein Skyroads-Remake mit ein paar Freunden zu machen und habe jetzt, nach bereits mehreren Monaten ein Problem was ich nict vorher bedachte!

Wen es näher interessiert, hier die Homepage zum Spiel:
http://ttlabs.tt.funpic.de/

Und noch ein Screenie:
user posted image

zum Sachverhalt:
Ich besitze einen Pc mit einer nicht besonders guten aber ausreichenden Grafigkarte von Ati (Radeon 9600, 128 Mb, 466Mhz oderso) und nen Laptop von Yakumo mit zwar 2.5 Ghz Prozessor, aber einer absoluten Schrott - Grafigkarte mit 32 Mb Shared Memory. Diesen Schrottzustand wollte ich als absolute Untergrenze für das Spiel ansetzen. (Auf allen Pc´s die schlechter sind braucht es nicht zu laufen).

Nachdem ich nun einen Netzwerk-Modus mit BBeNet programmiert habe, habe ich leider feststellen müssen, das das Spiel auf Pc´s mit schlechteren Grafigkarten langsamer läuft. Wenn man also [beispielsweise] am Start losfährt (am Laptop) und bis zum Ziel fährt, so braucht man etwa eine Minute. An meinem besseren Pc braucht man 40 Sekunden. Obwohl es kein ruggeln oder sonstiges an meinem Laptop gibt, hat der Spieler einen Nachteil. Ich dachte mir nun also folgendes. Wenn man im Mainloop der 3d-Engine einen Zeitstempel (MilliSecs()) macht, dann alles berechnen, den Haupttimer warte, Rendern, Updaten und Flippen lässt und dann einen 2. Stempel macht und daraus die differenz zieht so kommt man auf die Zeit, die ein Frame brauchte um Sichtbar zu werden in MilliSekunden. Wenn man dann 1000 / Zeit f. 1 Frame in Msecs rechnet, so kommt man theoretisch auf die Fps, welche ich in fps# (Global) speichern lasse. Letzdenendes wollte ich, das an einem langsamen Pc der Additionswert jeglicher Bewegunsvariable (z.B. player_speed# = player_speed# + 0.05) nicht mehr um einen konstanten Wert, sondern um den Anteilswert, den ein Frame braucht um Sichtbar zu werden also Wert / FPS#*max_fps. Tatsächlich funktionierte das fast Perfekt. Alles lief auf dem Schlechten Laptop überaschend gut da er seine Frames erkennt und dementsprechend mehr auf die Variablen zugibt. Leider läuft es aber trotzdem nnicht Gleich schnell. Warscheinlich habe ich mir einen Umstand gebaut der leichter zu lösen ist. Es ist kein Problem das das Spiel bei [einigermaßen] guten Pc´s zu schnell läuft da dieses durch einen Timer der auf 90 (max_FPS) eingestellt ist begrenzt wird , sondern lediglich die synchronheit im Netzwerk Wenn eine Schlechte Grafikkarte mit einer Guten Spielt.

Code: [AUSKLAPPEN]

   set_cam(1)
   While(1)
      ;##############################
      stampp#=MilliSecs()
      WaitTimer(frametimer)
      ;##############################
      ;steuerung:
      If fly_mode = 0 Then spieler_steuerung()
      camera_movement();Ego, 3rd Person, Wireframe
      ;anim_textures();Texturanimation
      create_partikel();triebstrahl
      Collisions 2,1,2,3;KOLLISION prüfen
      UpdateWorld
      update_partikel();Partikel durchlaufen
      RenderWorld
      network_send_receive();init, Chat, Net-Mainloop
      hud_pan();Prozentzeiger, Geschw. Zeig., Energiepanel
      draw_mouse();Maus
      fade_out_action();Game-Over
      aboard=check_object_collision();Spezialob. (Fahrstuhl..)
      check_level_percent();Wieviel Prz. geschafft?
      playerlife_check();schon tod?
      
      If KeyHit(1) Or aboard = 55 Then
         showtemp = 23
         For ff = 1 To 10
            hide_blocks(ff)
         Next
         runde = 0
         clear_partilel()
         StopChannel(chn_music)
         clear_tiles();mögliche alte daten löschen
         EndGraphics
         Graphics3D 1024,768,32,gfx_mode
         load_all_data();100te Daten neu laden
         button_state = 1
         If kampagne_appear = 1 Then kampagne_onetime = 2
         Return 55
      EndIf
      Flip
      ;##############################
      stampp2#=MilliSecs()
      time#=stampp2#-stampp#
      fps#=1000/time#
   
      runde = runde + 1
      ;an Fps anpassen
      max_speed# = (.8/fps#)*max_fps
      max_speed_leftright# = (.18/fps#)*max_fps
      left_right_faktor# = (0.08/fps#)*max_fps;definiert den rechts/links geschwindigkeitsfaktor
      jump_height# = (.12/fps#)*max_fps
      jump_speed# = (7/fps#)*max_fps
      gasspeed# = (.008/fps#)*max_fps
      bremsspeed# = (.006/fps#)*max_fps
      ;##############################
   Wend


Ich hoffe es blickt jemand durch den Kauderwelch mit integriten Rechtschreibfehlern durch und kann mir Weiterhelfen.

Vielen Dank im Foraus, das Forum ist Spitze!!!!
 

Dreamora

BeitragDo, Dez 13, 2007 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das stichwort hier ist FPS Abhängige Programmierung.

Das heisst das du die Bewegungswerte etc alle mit der FPS skalierst. Dadurch hast du eine konstante Geschwindigkeit des Fahrzeuges pro Sekunde
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

tmode00

Betreff: Re:

BeitragDo, Dez 13, 2007 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das habe ich ja versucht, aber irgendetwas muss ich falsch gemacht haben!
 

Dreamora

BeitragDo, Dez 13, 2007 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ja du wendest irgendwas anderes an.

FPS abhängig heisst:

alle werte mit 1/fps# multiplizieren.

du multiplizierst das hingegen wieder mit einem wert und sofern der nicht zufälligerweise konstant ist und eigentlich desired_FPS heissen sollte, sondern wirklich max_fps dann vernichtest du damit wieder die wirkung von 1/fps weil schnellere computer wieder einen vorteil erhalten.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

tmode00

Betreff: Re:

BeitragDo, Dez 13, 2007 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versuche das mal, vielen Dank erstmal

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group