Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Hasenfuß Senior JLI'ler

Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 12.09.2002, 16:50 Titel: |
|
|
nunja.. zum einen hab ich die Namen ausm Buch übernommen und zum anderen hab ich immer noch Ferien
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 12.09.2002, 17:12 Titel: |
|
|
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 |
|
 |
Hasenfuß Senior JLI'ler

Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 12.09.2002, 18:12 Titel: |
|
|
Jippie!! Es klappt!! Hab jetzt einfach des /1000 weggelassen und dafür 0.0x Werte genommen. Danke!!  |
|
Nach oben |
|
 |
Hasenfuß Senior JLI'ler

Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 13.09.2002, 11:38 Titel: |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 13.09.2002, 12:54 Titel: |
|
|
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 |
|
 |
Hasenfuß Senior JLI'ler

Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 13.09.2002, 14:16 Titel: |
|
|
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.  |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 13.09.2002, 14:47 Titel: |
|
|
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 |
|
 |
Ciceri Super JLI'ler

Alter: 37 Anmeldedatum: 26.08.2002 Beiträge: 418 Wohnort: Wischhafen/in der nähe Hamburgs Medaillen: Keine
|
Verfasst am: 13.09.2002, 15:33 Titel: |
|
|
warum sollte man die framerate begrenzen sollen(habe nicht alles durchgelesen)!!! _________________ www.z-software.de
Spieleentwicklung-Pur
Besuchen Sie uns. |
|
Nach oben |
|
 |
Sören JLI Master Trainee

Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine
|
Verfasst am: 13.09.2002, 16:19 Titel: |
|
|
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!  |
|
Nach oben |
|
 |
Hasenfuß Senior JLI'ler

Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 13.09.2002, 16:47 Titel: |
|
|
@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 |
|
 |
Hasenfuß Senior JLI'ler

Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 14.09.2002, 11:54 Titel: |
|
|
Hab jetzt einfach statt einer Movefunktion zwei gemacht, also eine für die X-Bewegung und eine für die Y. Dann funktionierts  |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 14.09.2002, 13:35 Titel: |
|
|
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 |
|
 |
|