Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 01, 2025 23:51

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: Di Feb 25, 2003 16:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
huhu,

ich beschäfftige mich grad mal wieder mit dem Problem wie ich mein Snake FPS unabhängig bekomme...

Aber~~.. ich komme einfach auf keine gute lösung... Bild

Die Normale Methode das Objekt bei 50FPS einfach doppelt so weit zu bewegen als bei 100FPS etc klappt leider nicht... einfach aus dem grund wie die Schlange bei meinem Snake bewegt wird... das würde die Schlange auseinanderrupfen... :|

Hat jemand ne andere gute idee...???

Au'revoir,
Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 25, 2003 16:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wie du schon mal gesagt hast, hattest du es schon einmal probiert die Schlange so zu zeichnen. Allerdings entfernen sich die einzelnen Teile, wenn du diese einzeln berrechnest (Durch Rundungsfehler (Singleungenauigkeit...) durchaus auch verständlich). Versuche doch einmal nur das erste Teil zu berechnen und den Rest an den Kopf anzuhängen. Wo sich die einzelnen Teile befinden weißt du ja. Und wie weit sie voneinander entfernt sein dürfen weißt du auch. Dann versuche einmal die Teile zu "rekonstruieren".


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 25, 2003 16:37 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 02, 2002 18:06
Beiträge: 299
Wohnort: Dresden
Ich würde das Rendern und das Positionsberechen unabhängig voneiander machen
Code:
  1.  
  2.  
  3. if (getTickCount() - Tick > Update) then
  4.  
  5.     begin
  6.  
  7.     tick := getTickCount;
  8.  
  9.     ... Verschieben ...
  10.  
  11.     end;
  12.  
  13.  

Tick vom Typ Word und Update ist eine Konstante, die die Geschwindigkeit angiebt. Einfach bissl rumprobieren. Den Code setzt du einfach in die Render-Methode ein und dann sollte es eigentlich gehen.

_________________
"Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 25, 2003 18:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
@HomerS: Dann ist aber nur sichergestellt das es bei 500FPS so schnell läuft wie bei 100FPS... bei 50FPS ist's dann trotzdem noch langsamer :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 25, 2003 19:24 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
Warum?? :roll:

_________________
. . .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 25, 2003 19:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Wenn ich den Code in die RenderProcedure reinpacke...

Bei 500FPS is klar, dann is die geschwindigkeit dadurch richtig.
ABER, wenn einer nur 50FPS hat.. dann wird logischerweise auch die RenderProcedure nur 50 mal pro Sekunde durchlaufen...Bild

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 25, 2003 19:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Jan 04, 2003 21:23
Beiträge: 674
Wohnort: Köln
Zitat:
Bild

jaja, ist ja schon gut ;)

Fiji-Fighter

_________________
. . .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 26, 2003 03:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
und was hälst du davon:

Code:
  1.  
  2.  
  3. inc(Tick, getTickCount);
  4.  
  5. while (Tick > Update) begin
  6.  
  7.     dec(tick,Update);
  8.  
  9.     ... Verschieben ...
  10.  
  11. end;


und wehe du fängst an mich mit dem hammer zu hauen...
:gun:

-lith

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 26, 2003 07:37 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Was hälst Du davon, die Brechnung in einen Thread auszulagern? Damit bist Du unabhängig von deiner FPS.

Dies dürfte bei Dir nicht zu kompliziert sein, da Du keine grossen Berechungen brauchst. Mach einen Thread mit den Berechnungen und nach jeder Berechnung synchronisiert Du mit deinem Hauptprogramm, übergibst Ihm die Werte und machst dann eine Pause von vieleicht 5ms.

Falls Du ein kleines Ruckeln durch die Synchronisation bekommst, kannst Du noch vor der Synchronisation die Zeit holen, syncronisieren und dann erneut die Zeit holen und die Differnz berechnen. Dies ist die Zeit, die Du für die Synchronisation benötigst hast. Diese ziehst Du von deiner Pausezeit ab, so das Du immer konstanst die Werte an dein Hauptprogramm abgibst.

Oder Du berechnest die Zeit für die Berechnung und Synchronisation und fügst dann eine Pausezeit so ein, das die Laufzeit immer gleich ist. So bist Du komplett von der Hardwaregeschwindigkeit, auch für die Berechnung, unabhängig.

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 26, 2003 15:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Zitat:
Was hälst Du davon, die Brechnung in einen Thread auszulagern? Damit bist Du unabhängig von deiner FPS.

Das hatte ich schon versucht... hat bei mir aber jedesmal wo ich es versuchte nach einiger Zeit einfach so zu einem BlueScreen (unter Win2k) geführt.... :|

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 26, 2003 16:05 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Wie hast Du die Daten zwischen Thread und Hauptanwendung ausgetauscht?

KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 26, 2003 19:51 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 02, 2002 18:06
Beiträge: 299
Wohnort: Dresden
Der Effekt tritt erst auf, wenn das Prog nicht ganz flüssig läuft. Und dann ist es sowieso egal wie du das machst, denn dann ist es unspielbar

_________________
"Ich würde ja gern die Welt verändern, aber Gott gibt mir den Quelltext nicht"


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 27, 2003 23:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Feb 24, 2003 18:19
Beiträge: 165
Wohnort: Cologne
Bei meinem Pong-Klon habe ich das nach dieser Methode gemacht:

Code:
  1.  
  2.  
  3. var TickCount, LastTickCount: Cardinal;
  4.  
  5. [...]
  6.  
  7.  
  8.  
  9. TickCount:=GetTickCount;  // damit nicht dauernd die Funktion aufgerufen wird bei vielen Berechnungen
  10.  
  11. Ding:=Ding+1.5*((TickCount-LastTickCount)/23);
  12.  
  13. LastTickCount:=TickCount;
  14.  
  15. [...]
  16.  
  17.  

Du solltest vor dem ersten Benutzen die Variabel TickCount auf GetTickCount setzen, sonst wirst du komische Erfahrung machen (je nachdem wie lange windows läuft, eheh).
Spiel allerdings mit den Werten was rum um das auch deiner gewünschten Geschwindigkeit anzupassen :)

da fällt mir ein... auf einem langsamen pc getestet hab ich es nicht ... aber bis jetzt hat sich auch keiner beschwert :roll: aber ich hab vsync an und es gibt bestimmt einige leute die das nicht haben *puh*

_________________
www.omfg.biz - aktuelles projekt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 28, 2003 18:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
dann will ich mich hier klei ma beschweren, bei mir startet prong zwar, aber es wird nichts dargestellt und mein rechner blockiert (so als frage, red ist der autor von prong??? oda??)

so mit der beschwerde wäre ich fertig.

als hinweis an aya : ich empfehle dir, geh einfach mal auf www.gametutorials.com und zieh dir dort das timebasemovement (oder so) tutorial, ist zwar cpp aber eigentlich auch egal. bei mir (in cpp ) funzt es in delphi hat ich noch keine zeit es zu probieren.

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 14, 2003 23:22 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 14, 2003 23:00
Beiträge: 24
ich komme auch auf keine gescheite lösung bei FPS unabhängiger bewegung.. egal welche lösung ich bisher versucht hab, es ruckelt immer kurz zwischen drin - und das bei einer FPS zahl > 200


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 39 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.022s | 15 Queries | GZIP : On ]