Jump and Run- Anfänger Problem
-
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 geklaut ICH 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....
-