Jump and Run- Anfänger Problem
-
Hallo alle
Hab ein Problem. ich will ein kleines blödes jump and run programmieren und bekomm das mit dem sprung einfach nicht hin. die bewegung klappt ja irgendwie aber sonst nix. ich hab nicht viel ahnung von der materie weil ich erst in der 11. klasse bin, hoffe aber um verständins dafür und um hilfe und ratschläge.
in einem anderem forum hat mir jemand gesagt das ich eine physik enginge programmieren soll. das war sein text:Moin!
Programmier einfach eine kleine Physik-Engine
Überprüf in einem Timer, sagen wir alle 100 ms, ob Deine Figur den Boden berührt. Wenn nicht, wirds interessant:
Du speicherst irgendwo einen Geschwindigkeitsvektor, der angibt, wie schnell sich Deine Figur nach unten bewegt. Für einen Sprung setzt Du einen negativen Wert ein (= Bewegung nach oben). Jetzt berechnest Du aktuelle Höhe + Vektor = neue Y-Position. Der Vektor wird danach angepaßt durch Addition von 0.1 (je nach Wert andere Fallgeschwindigkeit; wenn Du "richtige" Physik willst, wirds "etwas" komplexer), und wenn die maximale Sinkgeschwindigkeit überschritten wird, sagen wir 10, stellst Du zurück auf diesen Wert. Berührt Deine Figur wieder den Boden, setzt Du den Vektor auf 0 und fertig!
Tschööööööööö
wie kann ich sowas machen? ich verstehs nicht, zumindestens fehlt mir das wissen NOCH dazu...
freue mich über jede hilfe.
Major Pain
-
Was genau verstehst du denn nicht?
Vielleicht hilft dir auch das hier - ist zwar teilweise schon recht speziell, aber ich denke ansonsten ganz ok
-
ja das ist mir dann doch zu speziell. also ich hab mir bei dem builder ein image reingeladen, das den hintergrunddarstellt. ein bild von 800x640 oder so.
und noch ein image das den player darstellt. dann hab ich 4 images(kisten) reingeladen über die der player drübersrpingen muss. unsere lehrer geben sich auch nicht viel mühe uns was zu erklären und bis jetzt konnt eich kein forum finden wo ich wirklich hilfe bekam.
also der player muss einfach nur springen können. sagen wir für 1 oder 2 sekunden soll er jede milisekunde 1px nach oben gehen und danach wieder runter, bis er boden erreicht.... wir benutzen aber noch keine klassen daher kann ich die nicht benutzen weil mein lehrer sonst denkt ich hätte das irgendwo geklautICH BRAUCH HILFE..... meine lehrer haben sowieso ein knacks, wir haben erst schleifen und funktionen durch und schon wollen die ein jump and run game
-
Na ja also wenn er die Taste drückt um hochzuspringen setzt du die y-Bewegungsrichtung auf einen relativ niedrigen negativen Wert, z.B. dy = -15, ausserdem solltest du noch ein flag benutzen dass du je nachdem auf stehen oder springen setzt, das sähe dann so aus:
if (sprungtaste_gedrückt && state != JUMPING) { dy = -15; state = JUMPING; }
Da der Spieler jetzt im Sprung ist wirkt die Gravitationskraft auf ihn ein und lässt ihn allmählich fallen:
if (state==JUMPING) { if (spieler wieder am boden) { vy = 0; state=STANDING; } else { dy += GRAVITATION; //konstante ,z.B. 0.8 y += dy; // y-koordinate des spielers } }
Das sollte man natürlich noch bissl verfeinern..aber ist ein einfaches Prinzip für einen Sprung..
-
Das von Marc++us ist zwar eigentlich recht algemein und einfach, aber dann eben nochmal für dich:
du hast z.B eine Variable vy für die Geschwindigkeit in y Richtung. Diese ist normalerweise bei 0. Springt der Spieler jetz, so setzt du sie z.B auf 5 (angenommen y-Achse geht nach oben) ist der Spieler über dem Boden, so zählst du diese Variable in jedem Schleifendurchlauf (Frame) z.B. um 0.2 (Schwerkraft) herunter. Außerdem addierst du jeweis vy zur aktuellen Spieler-Position (hier musst du dann halt noch darauf achten, dass y nie kleiner als 0 (oder wo auch immer bei dir der Boden ist) wird.
Falls die Zeit der einzelnen Frames stzark variiert musst du bei den erechnungen halt jeweils noch die Zeitdifferenz mit einbeziehenHoffe das ist jetzt soweit für dich verständlich.
War wohl zu langsam[ Dieser Beitrag wurde am 17.06.2003 um 17:04 Uhr von flenders editiert. ]
-
Original erstellt von flenders:
Das von Marc++us ist zwar eigentlich recht algemein und einfachhä? wo hat denn marc++us was dazu geschrieben?
-
Bist wohl blind, oder willst mich nur ver*****en - z.B. die 5. Antwort :p
-
Original erstellt von flenders:
Bist wohl blind, oder willst mich nur ver*en - z.B. die 5. Antwort :phä??? die 5. antwort kommt von mir!
bist du nun vollkommen vertrottelt???
-
1. <Major Pain>
2. flenders
3. <major-pain>
4. nep
5. flenders
6. <gergor>
7. flenders
8. <gergor>
-
Ich bezog mich auf den 5. Beitrag auf dem Thread, auf den ich in meiner ersten Antwort verwiesen hatte
-
@nep
also deiné antwort klingt schon irgendwie logisch, aber wie oder was sagt dem player jetzt wielange er nach oben springt oder ab wann er denn fallen soll...
und wie lege ich mit verschiedenen höhen im level (weil es ja kisten gibt) fest
wo der boden für den spieler fest????
kann ich nicht jemanden meine bpr dateien schicken damit das mal genauer unter die lupe genommen wird?? keine angst, hier soll keiner meine hausaufgaben machen, ich muss das selber können, weil ich ja auch ein bericht dazu schreiben muss. ich will nur wissen wie ich das zu programmieren hab weil sich bei mir im kopf alles dreht wenn ich an diese ganze TOP und LEFT werte denke.
wenn ich es erstmal hinbekommen habe das mein image springt, muss ich ja noch die begrenzungen festlegen... aaaaaaarg
-
Du musst dir das innerhalb der Spielschleife vorstellen, also du hast praktisch so etwas wie:
while (!escape_gedrückt) { // der sprung pseudo code von vorhin // hier kannst du dann noch behandlungsroutinen einbauen, wenn taste nach links/rechts gedrückt wird; natürlich sollte noch die ganze game-logik,ki etc dazukommen zeichne_figur(x,y,breite,höhe); }
Wie lange der Spieler nach oben springt hängt von der Gravitationskraft ab..du addierst ja ständig die Gravitation zur änderungsrate hinzu.. irgendwann wird diese wieder positiv und der spieler fällt. Ausserdem ist die Schnelligkeit des Sprunges auch von der Framerate abhängig. Im obigen Beispiel wird die Framerate weder limitiert noch irgendwie mithilfe von der Zeit der Sprung berechnet.. Am simpelsten limiterst du einfach die Framerate auf z.B 40 FPS oder so. Kannst ja mal im Faq schauen, da steht wie das geht.
-
also eigentlich wollte ich das nicht fragen aber da keiner aus meiner klasse die aufgabe bewältigen kann frag ich doch, dann kann ich wenigstens meinen klassen kameraden helfen...
kann mir jemand mit dem builder eine prog erstellen wo ein bitbutton
per tastendruck nach obenspringt und wieder runterfällt. nix komplexes.
einfach nur eine leeres formular wo ein boden aus labels ist und der button hochspringen kann. dann zieh ich mir das 24/7 rein und dann müsste ich es nachvollziehen können
bitte helft uns.
pleeeeeeeeeeze
(eigentlich seh ich das ja gar net ein das ich der einzigste bin der sich darum kümmert aber ich bin ja ein christ :D)
-
Das wurde doch schon alles erklärt...Aber ok ich weiß ja nicht wie das beim Borland C++ Builder ist, wahrscheinlich ähnlich wie bei Delphi mit VCL ? Wo du deinen Code also nur in die Ereignisroutinen schreibst oder ? Bei Spieleprogrammierung unter Windows, sollte man sich nämlich schon bissl mit der WinAPI auskennen(Stichwort Nachrichtenschleife etc..), ist aber wohl blöd für euch, deshalb nimm halt nen Timer den du auf z.B auf 20 ms oder so setzt, da kommt dann der ganze sprungcode und das zeichnen rein. Wenn der benutzer z.B. die Leertaste drückt dann fängst du das im form-keydown eregnis ab, und setzt den state auf JUMPING sofern er nicht bereits auf JUMPING ist. In der Timer-Ereignisroutine testest du dann das flag auf JUMPING und führst dort den Sprungcode(siehe oben) aus, und natürllich auch das Zeichnen der Figur. Als Figur kannst ja z.B. nen simplen Kreis oder sowas benutzen...
-
@Major Pain:
weil ich heute etwas Langeweile hatte, habe ich kurz ein kleines Borland C++ Builder - Programm mit einem hüpfenden Viech geschrieben.
Weil ich _ziemlich viel_ Langeweile hatte, habe ich den Code recht extrem kommentiert. Müsste klar verständlich sein.
Wenn es dich interessiert, sag mir bescheid unter meiner Hotmail: gordon_h_freeman@hotmail.com
Source ist BCB Version 6 - keine Ahnung, ob es auch auf älteren Versionen laden lässt.
Ciao,
Gordon
-
danke danke danke, hab dir ne email geschrieben....
-