Platformer Engine mit organisch geformtem Boden?

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Platformer Engine mit organisch geformtem Boden?

    Hi, Platformertutorials gibt es ja so einige, die für mich als Einsteiger sehr vielversprechend wirken. Teils berücksichtigen diese auch Schrägen, ohne die ein zeitgemäßer Platformer aus meiner Sicht auch nicht mehr auskommt. Noch schöner wären aber doch organische Formen wie Hügel und Täler, die nicht im 45° Winkel ansteigen oder abfallen. Daher meine Frage:
    • Gibt es bereits eine entsprechende Engine?
    • Sind organische Formen schwieriger zu programmieren, oder sind nur die Tiles und Level aufwändiger zu gestalten, sofern die Engine Schräge Böden umfasst?
    Schönen Gruß,
    SirEdward

    myspace.com/yourgameost (Bei Nutzung bitte kurze Info)
  • Hey,
    Ich versuche dir das ganze mal etwas näher zu bringen :
    Um Schrägen zu bewältigen, gibt es eine einfache Herangehensweise. Wenn du bspw. nach rechts gehen willst, testest du, ob der Platz frei ist. Ist er es nicht, testest du bspw. einen Pixel darüber usw..

    Ich habe dir mal schnell folgendes geschrieben:
    Wichtig! (bitte benutze nie "solid" als Attribut von objekten(kannst darüber nachlesen), benutze ausserdem ein Viereck als Kollisionsmaske des Spielers, damit die Hitbox immer gleich bleibt)
    Erstelle ein Objekt par_solid und verwende es als parent für alles womit der spieler kollidieren soll.
    Bei den Steigungen musst du "precise collision" anhaben.

    Im Create Event vom Spieler :

    GML-Quellcode

    1. mov_speed = 4; //Geschwindigkeit
    2. max_height = 3; //Steigung in Pixeln, die erklommen werden kann.


    In deinem Step Event vom Spieler:

    GML-Quellcode

    1. var leftright;
    2. leftright = (keyboard_check(ord("D")))-(keyboard_check(ord("A")));
    3. //wenn links/rechts gedrückt
    4. if (leftright != 0) {
    5. /*Wir starten die Schleife bei unserer y Position.
    6. //Wir müssen runterzählen, weil die y Achse im GM
    7. //vertauscht ist.
    8. */
    9. for (i = y; i > (y-max_height); i--) {
    10. //wenn der platz frei ist:
    11. if (!place_meeting(x+(mov_speed*leftright),i,par_solid)) {
    12. x += (mov_speed*leftright); //x position setzen
    13. y = i; //y position setzen
    14. break; //Schleife abbrechen
    15. }
    16. }
    17. }
    Alles anzeigen


    Collision-Event mit par_solid (Dies sollte allgemein für alle Kollisionen eines simplen spiels reichen) :

    GML-Quellcode

    1. var dist, dir, xdir, ydir;
    2. dist = point_distance(x, y, xprevious, yprevious);
    3. dir = degtorad(point_direction(xprevious, yprevious, x, y));
    4. xdir = cos(dir);
    5. ydir = -sin(dir);
    6. x = xprevious;
    7. y = yprevious;
    8. repeat (dist)
    9. {
    10. if (place_meeting(x + xdir, y, other.object_index))
    11. {
    12. hspeed = 0;
    13. }else{
    14. x += xdir;
    15. }
    16. if (place_meeting(x, y + ydir, other.object_index))
    17. {
    18. vspeed = 0;
    19. }else{
    20. y += ydir;
    21. }
    22. }
    Alles anzeigen


    Das ist jetzt alles recht simpel gehalten und ausbaufähig, soll dir aber ja auch nur eine Idee geben wie man sowas bewältigt. wenn du noch Fragen hast steh ich dir gern zur Seite :thumbup:
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Wenn ich Dich richtig verstehe, sollte es für die Abfrage, ob vor, etwas über oder etwas unter dem Player ein Platz frei ist egal sein, ob es sich um eine 45° Steigung oder um einen kurvenförmig ansteigenden Hügel handelt, oder? In dem Fall müsste nur die grundlegende Player-kann-Steigung-bewältigen Fähigkeit eingebaut und die Tiles entsprechend gezeichnet werden. Die größte Schwierigkeit dürfte dann darin liegen, statt der in vielen Tutorials verwendeten schwarzen Blöcke, die im room über die "solid" wirkenden Tiles gesetzt werden, Instanzen des Objekts pat_solid zu erstellen, die genau der organischen Form des Hügels entsprechen. Alles richtig soweit?
    Schönen Gruß,
    SirEdward

    myspace.com/yourgameost (Bei Nutzung bitte kurze Info)
  • Tiles sind ja nur Grafiken, mit denen du keine Kollisionsabfrage machen kannst (geht theoretisch schon, erfordert aber einen viel zu komplexen Ansatz).
    Du malst also ein sprite, dieses wird als Kollisionsmaske benutzt. Dann erstellst du dein Objekt und weist ihm dieses Sprite zu. Ausserdem stellst du bei dem Objekt bei Parent par_solid ein. par_solid ist einfach nur ein leeres objekt das du erstellst. Es dient lediglich zur gruppierung von Objekten. Wenn ich zB. obj_ebene1, obj_ebene2 und obj_ebene3 habe, und alle haben par_solid als parent eingetragen, dann werden diese 3 objekte unter dem parent zusammengefasst, somit gillt dann zB. ein kollisionsevent mit par_solid für alle seine "childs" (in diesem fall ebene1-3)

    Ich habs dir mal visualisiert :
    Bilder
    • nfo1.png

      26,78 kB, 1.052×381, 409 mal angesehen
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Danke für Deine Mühe. Der Unterschied von Sprites und Objects ist mir klar, die Funktion von Parents auch. Vielleicht hab ich nur etwas zu kompliziert geschrieben. Du hast meine Frage aber durch Dein Bild beantwortet, in dem Du ja ein schwarzes, geschwungenes Sprite für den Boden erstellt hast. Dieses sollte also genau auf die schöneren Bodensprites passen, worin die eigentliche Schwierigkeit besteht. Ich müsste also ein Tileset mit organisch wirkenden Anstiegen erstellen, das sich trotzdem flexibel nutzen lässt (Anfänge und Enden der Tiles müssten in der Höhe aneinander passen). Ansonsten hätte ja jeder Hügel ein eigenes Tile, was ziemlich performancehungrig sein dürfte. Danke für Deine Hilfe.
    Schönen Gruß,
    SirEdward

    myspace.com/yourgameost (Bei Nutzung bitte kurze Info)
  • Drachen schrieb:

    Hi

    Vielleicht hilft dir dieses kleine Testprogramm von Sonic. Das habe ich heute in mein Archiv gefunden. Ist aber komplett auf englisch beschrieben was die Engine betrift.
    Hier die Datei
    GM Sonic Test.gm81

    Hier noch ein paar Bildschirmbilder vom Programm



    So hoffe es hilft dir

    Gruss Drachen


    Hi, ich kam noch nocht zum Testen, aber danke! Sieht sehr vielversprechend aus und wird helfen, den einen oder anderen Knoten im Hirn zu lösen :)
    Schönen Gruß,
    SirEdward

    myspace.com/yourgameost (Bei Nutzung bitte kurze Info)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von SirEdward ()