JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Framerate begrenzen
Gehe zu Seite Zurück  1, 2, 3
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hasenfuß
Senior JLI'ler


Alter: 36
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 12.09.2002, 16:50    Titel: Antworten mit Zitat

Embarassed Embarassed Embarassed
nunja.. zum einen hab ich die Namen ausm Buch übernommen und zum anderen hab ich immer noch Ferien Smile

Angeben tu ich da je nach Geschwindigkeit zwischen 3 und 8; aber ich habs auch mal höher geschraubt da gehts auch nur im Sekundentakt
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: 12.09.2002, 17:12    Titel: Antworten mit Zitat

Ich glaub ich schreib am besten mal'n komplettes Beispiel:

Code:

#define VELOCITY 0.02   // 20 Pixel pro Sekunde... wenn man das gleich hier
                                     // macht, spart man sich das "/ 1000" bei jedem Frame

float pos = 0.0f;

...

// hier ist deine Spielschleife
DWORD starttTime = timeGetTime();

// Input holen, Blitten, ...
DrawActor(pos);
UpdateInput();
PageFlip();

// Hier kommt jetzt die Bewegung hin
float timeDelta = timeGetTime() - startTime;
pos += VELOCITY * timeDelta;

// Auf Input reagieren, etc.
...


_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hasenfuß
Senior JLI'ler


Alter: 36
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 12.09.2002, 18:12    Titel: Antworten mit Zitat

Jippie!! Es klappt!! Very Happy Very Happy Hab jetzt einfach des /1000 weggelassen und dafür 0.0x Werte genommen. Danke!! Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hasenfuß
Senior JLI'ler


Alter: 36
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 13.09.2002, 11:38    Titel: Antworten mit Zitat

Doch noch ne kleine Frage:
Wenn ich diese Movefunktion jetzt benutze wird nur noch auf eine Taste reagiert (ich kann z.B. nicht mehr durch Links+Oben schräg nach oben bewegen) Das Problem zu umgehen ist zwar durchaus möglich, aber ziemlich umständlich(muss jede Möglichkeit in einer if-Abfrage abtesten, was ja bei Hoch Runter Links und Rechts noch geht, aber wenn dann noch gesprungen wird,...) Gibt es da ne einfachere Möglichkeit?
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: 13.09.2002, 12:54    Titel: Antworten mit Zitat

Was meinst du? Mein Beispiel benutzt nur eine Dimension. Du kannst das auf beliebig viele Dimensionen erweitern.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hasenfuß
Senior JLI'ler


Alter: 36
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 13.09.2002, 14:16    Titel: Antworten mit Zitat

Ich stell meine Frage mal präziser an einem Beispiel:
Wenn ich die Sprungtaste drücke wird die Boolvariable für den Sprung auf true gesetzt. Eine Zählvariable zählt dann wie oft der Spieler noch nach oben/bzw. unten bewegt werden muss .(Die Variable ist am Anfang auf 60, wenn sie unter 30 ist gehts wieder nach unten) Jetzt möchte ich in dieser Zeit aber auch noch nach links und rechts bewegen können, was aber irgendwie nicht geht(vorher gings noch). Ich hoffe das ich jetzt nicht zuviel Zeug durcheinander geschrieben hab. Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 13.09.2002, 14:47    Titel: Antworten mit Zitat

Nutze deine Kentnisse aus der Physik (insofern du welche hast).
Du hast eine Figur, deren derzeitige Position fest steht.

Und du hast eine bestimmte Sprungstärke, angegeben in Meter/Sekunde (Startgeschwindigkeit, typischerweise nach oben gerichtet).
Du hast außerdem eine "Erdanzieungskraft" von sagen wir mal 10 Meter/Sekunde², gerichtet nach unten.
Das ganze kannst du in eine Formel einsetzen. (Gleichmäßige Beschleunigung, Weg-Beschleunigung-Diagramm, Tafelwerk) Wenn deine StartSprunggeschwindigkeit 10 ist, kannst du damit 1 Meter hoch springen und befindest dich genau 2 Sekunden in der Luft. Alles Klar?

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Ciceri
Super JLI'ler


Alter: 36
Anmeldedatum: 26.08.2002
Beiträge: 418
Wohnort: Wischhafen/in der nähe Hamburgs
Medaillen: Keine

BeitragVerfasst am: 13.09.2002, 15:33    Titel: Antworten mit Zitat

warum sollte man die framerate begrenzen sollen(habe nicht alles durchgelesen)!!!
_________________
www.z-software.de
Spieleentwicklung-Pur
Besuchen Sie uns.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.09.2002, 16:19    Titel: Antworten mit Zitat

Weil das Spiel auf schnelleren Rechnern dann schneller laufen würde und auf langsameren eben langsamer!
Zb würde sich eine Spielfigur viel schneller bzw langsamer bewegen, was man ja nicht unbedingt möchte! Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hasenfuß
Senior JLI'ler


Alter: 36
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 13.09.2002, 16:47    Titel: Antworten mit Zitat

@AFE: Bei der ganzen Rechnerei muss ich ja trotzdem einen bestimmten Zeitraum lang in der Spielschleife das Sprite nach oben/unten bewegen. Und sobald eine Bewegung aktiv ist, geht keine andere mehr(z.B. nach links/rechts). Ein weiteres Beispiel ist das Raumschiff aus dem TheGame Quellcode das man auch schräg nach oben bewegen kann. Wenn ich jetzt aber diese spezielle Movefunktion(steht n bisschen weiter oben) benutze geht das nicht mehr(es sei denn ich definiere die Tastenkombination Links/Hoch oder Rechts/Hoch extra)
Also als Code:
Code:

if(Action & MOVE_RIGHT)
{
if(Action & MOVE_UP) // das musste ich vorher nicht machen
{
Fighter.Move(0.3,-0.3);
}
else if(Action & MOVE_DOWN) // und das
{
Fighter.Move(0.3,0.3);
}
else
{
Fighter.Move(0.3,0); // sondern nur das
}

}

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hasenfuß
Senior JLI'ler


Alter: 36
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 14.09.2002, 11:54    Titel: Antworten mit Zitat

Hab jetzt einfach statt einer Movefunktion zwei gemacht, also eine für die X-Bewegung und eine für die Y. Dann funktionierts Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 14.09.2002, 13:35    Titel: Antworten mit Zitat

Wollte ich gerade Vorschlagen. Berechnet doch immer die X-Geschwindigkeit getrennt von der Y-Geschwindigkeit, in 3D-Spielen natürlich auch getrennt von der Z-Geschwindigkeit. Desweiteren kann man noch eine Beschleunigung/Verzögerung für Drehbewegungen, Ducken, ... benutzen. Alles zusammengenommen ergibt dann eine durchaus sehr realistische Bewegung...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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 Zurück  1, 2, 3
Seite 3 von 3

 
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