2D- Jump and Run
-
Ich würde gerne mal ein kleines Jump and Run schreiben, nur so als kleines Hobby also nix Weltbewegendes.
Aber an einigen Punkten habe ich schon bei der Konzeption Probleme. Ich versuche die Punkt die mich interessieren mal anhand von Super Mario zu beschreiben:
Hat Mario eine Art Beschleunigung als zustand, neben der Geschwindigkeit?
Wei sonst würde der weite Sprung funktionieren? Gibt es "Reibungskoeffizienten" für unterschiedliche Untergründe? (Rutschen auf Eis)
Gibt es eine Art Schwerkraft? (Flug-Mario)Wie überprüft man, aus welcher Richtung eine Kollision stattfand?
Schließlich sollen Gegner sterben, wenn Mario auf sie hüpft, andererseit soll Mario Schaden erleifen wenn ein Kontakt von der Seite oder unten auftritt.Wie funktioniert es, dass Mario manche PLattformen von unten durchspringen kann aber dann auf ihnen laufen kann?
Wie wird generell überprüft, ob sich Mario gerade auf einer Plattform befindet? Ich kann mir irgendwie nicht vorstellen, dass zu jeder zeit eine Kollisionsüberprüfung für alle Plattformen stattfindet. Bei meiner Implementierung hatte das auch noch den Nachteil, dass mein "Mario" (ein Quadrat) immer auf Plattformen flatterte, da die Gravitation ihn immer ein Stück nach unten zog und dann die Kollisionsüberprüfung stattfand.
Gibt es irgendwo ein nettes (Video)-Tutorial zu dem Thema?
-
vtune-amplifier schrieb:
Hat Mario eine Art Beschleunigung als zustand, neben der Geschwindigkeit?
Eher nicht, aber wie mans genau macht ist ja offen. Aber wenn man anfängt zu laufen wird man ja nicht langsam schneller sondern hat sofort die Maximalgeschwindigkeit. Allerdings gibt es dann z.B. bei rennen doch eine art beschleunigung, und eine höhere Maximalgeschwindigkeit.
vtune-amplifier schrieb:
Wei sonst würde der weite Sprung funktionieren? Gibt es "Reibungskoeffizienten" für unterschiedliche Untergründe? (Rutschen auf Eis)
Auch hier würde ich wieder differenzieren. Wenn man auf normalem Boden landet sofort anhalten, auf Eis nur langsam. Du kannst aber auch einfach alles über Reibung machen, dem Boden nur einen so großen Wert geben dass es sofort scheint.
vtune-amplifier schrieb:
Gibt es eine Art Schwerkraft? (Flug-Mario)
Natürlich, sonst würdest du ja nicht runterfallen.
vtune-amplifier schrieb:
Wie überprüft man, aus welcher Richtung eine Kollision stattfand?
Schließlich sollen Gegner sterben, wenn Mario auf sie hüpft, andererseit soll Mario Schaden erleifen wenn ein Kontakt von der Seite oder unten auftritt.Naja du machts halt eine Kollisionserkennung mit den umgebenden Rechtecken. Dann weißt du eigentlich ja schon ob von oben/unten/seite. Alternativ kannst du auch einfach prüfen wie die Mittelpunkte der Rechtecke zueinander stehen. Wenn der Spieler darüber ist und die X Koordinate sich nur leicht unterscheidet, dann ist er oben. Wenn der dagegen links ist und sich die Y Koordinate nur leicht unterscheidet kam er von links.
vtune-amplifier schrieb:
Wie funktioniert es, dass Mario manche PLattformen von unten durchspringen kann aber dann auf ihnen laufen kann?
Eine Kollision des Spielers von unten ganz einfach ignorieren ?
vtune-amplifier schrieb:
Wie wird generell überprüft, ob sich Mario gerade auf einer Plattform befindet? Ich kann mir irgendwie nicht vorstellen, dass zu jeder zeit eine Kollisionsüberprüfung für alle Plattformen stattfindet.
Doch, du musst es überprüfen. Kannst es ja vereinfachen, d.h. Objekte die weit genug weg sind kannst du ja überspringen.
vtune-amplifier schrieb:
Bei meiner Implementierung hatte das auch noch den Nachteil, dass mein "Mario" (ein Quadrat) immer auf Plattformen flatterte, da die Gravitation ihn immer ein Stück nach unten zog und dann die Kollisionsüberprüfung stattfand.
newpos = pos + gravity wenn newPos valid, dh nicht in einer platform, dann pos = newpos else pos = align newpos to platform // damit der spieler immer genau auf der platform landet, und nicht leicht drüber schwebt
Sowas in der Art würde mir spontan einfallen.
-
@DarkShadow44: Ich hab nicht den Eindruck, dass man ohne Beschleunigungs-Knopf instantan auf Maximalgeschwindigkeit ist bzw. stehen bleibt. Für mich sieht das eher nach Beschleunigung/Bremsen mit endlichem Betrag aus.
-
Ja, (Nintendo's Super-)Mario hat weder instant Beschleunigung noch instant Bremsen. Was auch gut so ist.
Wobei es sein kann dass die max. Sprunghöhe (und damit auch -weite) nicht nur von der aktuellen Geschwindigkeit abhängt, sondern auch damit wie lange man schon läuft. Aber mit sowas experimentiert man am besten rum.
Wie genau so Sachen wie Rutschen auf Eis oder das Fallen im Sprung vs. Fallen beim Fliegen umgesetzt sind kann man ohne in den Code reinzusehen nicht genau sagen.
Man kann es bei sowas mit Parametern probieren. Also dass man den selben Code verwendet, egal ob Mario auf Eis oder auf normalem Boden läuft, nur mit unterschiedlichen Parametern. Manchmal funktioniert das sehr gut. Manchmal nicht, und man baut sich im Endeffekt dann spezialisierten Code (z.B. eigenen "auf dem Eis rutschen" Code).
Auch hier gilt wieder: experimentieren.Plattformen von unten durchspringen aber darauf laufen geht relativ einfach. Erstmal prüft man viele Dinge nicht mit der Bounding-Box von Mario, sondern nur mit dem "Anchor" (üblicherweise ganz unten mittig, also bei seinen Füssen wenn er steht).
Und bei Plattformen reagiert man bloss auf eine Sache: wenn...
* Die zwei Anchor Positionen (vor der Verschiebung für's aktuelle Frame und nachher) eine Linie bilden die die "Lauffläche" der Plattform schneidet und
* Die alte Anchor Position höher liegt als die neue
... dann setzt man Mario auf die Plattform drauf anstatt ihr durchfallen zu lassen.
In allen anderen Fällen ignoriert man die Plattform einfach.
Wie man dann dafür sorgt dass Mario mit der Plattform mitfährt ist wieder eine andere Geschichte.Was das "von oben = gut, von seitlich = schlecht" angeht. Ich würde das als erstes mal so versuchen: Wenn...
* Das neue Mario Bounding-Rect mit dem Viech kollidiert und
* Das alte Mario Bounding-Rect höher liegt als das neue und
* Das alte Mario Bounding-Rect so hoch liegt dass es, wenn man es unendlich in der Breite streckt, nirgends mit dem Viech kollidiert (alsooldMario.bottom <= viech.Top
bei top-down Koordinaten)
...dann ist man von oben draufgehüpft.
-
vtune-amplifier schrieb:
Gibt es irgendwo ein nettes (Video)-Tutorial zu dem Thema?
Oh Boy, die Tutorial-verseuchte Generation.
Ich hoffe stark dass es keine gibt.Selbst überlegen, ausprobieren, rumexperimentieren.
-
hustbaer schrieb:
vtune-amplifier schrieb:
Gibt es irgendwo ein nettes (Video)-Tutorial zu dem Thema?
Oh Boy, die Tutorial-verseuchte Generation.
noch ein paar Jahre und
-"Wie kann ich das nur mit meinem Tablet machen?"
-"Gibt es eine Seite mit Trophies/Achievements"
-
http://channel9.msdn.com/achievements/visualstudio
Find ich aber Klasse.
-
hustbaer schrieb:
Find ich aber Klasse.
Wer im Glasshaus sitzt und so...
-
hustbaer schrieb:
http://channel9.msdn.com/achievements/visualstudio
Find ich aber Klasse.Leider nur für VS2010...
-
.