Problem mit Synchroner Spielgeschwindigkeit, Kosmo3d
Übersicht

tmode00Betreff: Problem mit Synchroner Spielgeschwindigkeit, Kosmo3d |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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: ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
tmode00Betreff: Re: |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das habe ich ja versucht, aber irgendetwas muss ich falsch gemacht haben! | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
tmode00Betreff: Re: |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich versuche das mal, vielen Dank erstmal | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group