3D: Höhe des Spielers an Floor anpassen

  • GM 6

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

  • 3D: Höhe des Spielers an Floor anpassen

    Hi,
    Wie kann ich die Höhe (Z) Meines Spielers an die Höhe des Floors anpassen wenn dieser schräg nach oben geht
    Also dass der Floor wie eine Rampe ist
    Hoffe ihr blickt das :D
    Danke!
    Ihc hab so voll den ij
  • Dafür gibt es ein Skript.

    Der Sinn hinter der Sache ist dass man das gesamte Terrain durch ein Grid erstellt. D.h. in dem grid ist die momentane Höhe des Terrains an der jeweiligen Stelle angegeben (je engmaschiger das Grid, desto genauer und desto Leistungsfressender!). Am Spielanfang wird dann ein Modell erstellt das dauernd gedrawt wird.

    Mit einem Skript kann man dann einfach die Höhe an der bestimmten position berechnen (aus den umliegenden Punkten).

    Hier gibts die Skripte:
    gmc.yoyogames.com/index.php?showtopic=488892

    Dies lädt sogar das Terrain aus einer bmp-datei. dies wird häufig genutzt wenn man sich nicht einen Terrain-editor für das Spiel bastelt.


    EDIT: Halt. Komando zurück.

    Hast du das Bild erst jetzt hinzugefügt, oder hab ichs übersehen?
    Meinst du jetzt 2d wie auf dem Bild oder 3d. In 2d, heisst es nähmlich nicht z, sondern einfach y.

    Asso. Doch. Im titel steht ja 3d :whistling:


    EDIT2: meiner Meinung nach nicht...

    Das Prinzip wird überigens praktisch überall für terrain benutzt. Schau dir WoW etc. an.

    Du wirst merken dass das Terrain eigentlich aus Quadraten besteht.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DragonGamer ()

  • Das ist schlecht. Bist du schon sehr weit fortgeschritten? Denn wie gesagt, es wäre besser ein Grid zu nehmen.

    Entweder (wenn du ein gutes 3d-Vorstellungsvermögen hast oder die Karte nicht sehr kompliziert werden soll) schreibst du die Werte direkt in ein Grid. Also einfach von der Ecke aus anfangen und die jeweilige Höhe an den jeweiligen Punkten einsetzen.

    Oder du machst ein es mit einem bmp Bild.
    In einem Grafik programm, am besten GM's Editor erstellst du ein Rechteck dass die selben Proportionen wie deine Karte hat und malst die Pixel in Graustufen an.

    D.h. ein Pixel entspricht einer Ecke von einem Quadrat auf deiner Map. Du hast 255 Graustufen zur verfügung.

    Bin mir gerade nicht sicher, aber glaube desto heller der Ton desto flacher das Terrain und umgekehrt. Das heist wenn du Pixel in verschiedenen Graustufen platzierst, kannst du weiche Terrains machen aber auch abrupte Steigungen.


    Andere Sachen wie zum beispiel Gebäude auf denen man nicht draufsteigen kann, kannst du weiterhin mit den Draw Funktionen machen und die Kollisionen berechnen. Schau dir mal dazu ein Tut zum Thema Kollisionen von Moolt an.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Einen Moment - willst du 3d-Terrain, Bewegung im Terrain oder beides haben?
    Erstmal zum Post von DragonGamer: Die simpelste Methode ist, das Bild als Sprite zu laden. Dann erstellst du ein Surface und liest jeden Pixel aus. Soweit ich weiß zwar der einzigste Weg mit solchen Heightmaps, aber leider auch extrem Zeitintensiv (ich bastle grade an einem 2d-Spiel mit zufälliger Map-Generation rum, da braucht allein das Laden der Map bei einem ~200x200-Surface c.a. 5-7 sek.). Das ganze würde wahrscheinlich so aussehen:

    GML-Quellcode

    1. //Lade-Script.
    2. //Variablen, die initialisiert sein müssen:
    3. /*global.ter_sur (falls das Laden nicht im Create-Event stattfindet. Wert einfach zu zb. noone setzen.)
    4. global.ter_cell_size (die Länge oder Breite der Zellen der Heightmap.)
    5. global.ter_map [ 0 bis room_width / global.ter_cell_size, 0 bis room_height / global.ter_cell_size ]
    6. global.ter_sur = surface_create (room_width / global.ter_cell_size, room_height / global.ter_cell_size)
    7. surface_set_target (global.ter_sur) //Wird das eigentlich bei Pixel-auslesen gebraucht?
    8. for (xx = 0; xx < room_width / global.ter_cell_size; xx += 1)
    9. { for (yy = 0; yy < room_width / global.ter_cell_size; yy += 1)
    10. { global.ter_map [ xx, yy ] = surface_getpixel (global.ter_sur, xx, yy) //Bin mir mit den Grayscale-Farben nicht ganz sicher, vllt. noch ein bisschen mit make_color_hsv rumspielen (:
    11. } }
    12. surface_reset_target ()
    Alles anzeigen


    Für Terrain-Bewegung fällt mir spontan kein Script ein, aber wahrscheinlich z andhand von z1, z2, z3 und z4 der benachbarten Zellenknoten und der Distanz zu denen ausrechnen.
  • Darum hab ich ja die Skripte verlinkt. Diese lesen auch direkt aus Bild-Dateien heraus (auf binäre Weise, kein langsames surface_getpixel (!) ) und bauen auch das Modell. Alles was man braucht.

    Zudem auch das get_z Skript.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)