Jump&Run Shooter: Player Probleme

  • GM 8

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

  • Jump&Run Shooter: Player Probleme

    Moin ;)

    Vorweg: Ich bin ein totaler Anfänger... Dennoch dachte ich mir, dass ich vllt. mal 'n paar Minigames erstellen könnte :D

    Ich schau mir also Tutorials und Tipps an... etc. etc...

    Also möchte ich einen Player erstellen und dann :wacko:

    Nee, im Ernst:

    Ich habe jetzt einen Player, der aus einem roten 32x64 Block besteht und Augen hat... Später widme ich mich dann den Strichmännchen, aber das ist hier voll unwichtig?!

    Besagter Player soll sich nun in beide Richtungen bewegen können => kein Problem...

    Allerdings: Ich würde gerne, dass wenn der Player in die eine Richtung geht, er sich dreht, sprich: Die Augen sollen auf die andere Seite (später bei Strichfiguren dann der ganze Körper :)

    Zu diesem Zweck habe ich dann zwei Sprites erstellt, aber wie verknüpfe ich die jetzt?

    Ich habe auch gehört, dass das mit zwei Bildchen in einem Sprite möglich ist. Welche Variante sollte ich nehmen? Und vorallem: Wie?

    Problem 2: Mein Player springt zwar (Das mit der Gravity habe ich schon gemacht^^), aber beim vorwärts springen, bleibt er praktisch auf einer Linie in der Luft :(

    Ich bin für jede Antwort dankbar... Wenn mir das jemand machen möchte (damit ich es verstehe ;) ), ist er auch herzlich eingeladen... Ich habe mein "Projekt" mal angehängt^^

    MfG
    Jnthn

    P.S.: Ich benutze Game Maker 8 Pro
    Dateien
    • My Jump&Run.rar

      (10,39 kB, 688 mal heruntergeladen, zuletzt: )
  • Wilkommen im Forum!

    Was ist denn da schiefgelaufen?

    Das ist eigentlich nichts großartiges. Wenn du mittels :action_move1: die Richtung und den Speed änderst macht der Game Maker folgendes: Er setzt die Variable hspeed und die Variable vspeed auf die Werte, das sich die eingegebene Bewegung ergibt. Desweiteren werden daraus dann in direction die Richtung gespeichert, und in Speed die Pixel die das Objekt jeden Step in die Richtung läuft. Also: Er überschreibt dir immer wenn du D oder A drückst also dein vspeed.
    Du benutzt aber vspeed um zu Springen, und um wieder auf deine Platform zu kommen. In beiden Fällen (nach rechts oder links laufen) ist vspeed = 0. Deswegen sieht es nicht nur so aus als würde der Spieler steckenbleiben, sondern er bleibt tatsächlich immer für kurze Zeit stecken.

    Wie behebst du dieses kleine Problem?

    Ganz einfach, anstatt :action_move1: benutzt du wie auch beim Sprung das hier: :action_variable: . Da, wie es oben steht, die direction und der speed sich aus vspeed und hspeed ergeben, und wir vspeed nicht überschreiben wollen (Sprung / Fall), müssen wir nun also dort die hspeed (horiozontalspeed) Variable, die auch vom Game Maker wie diverse andere (auch vspeed) schon vorgeben sind, benutzten.
    Ein positiver Wert ergibt eine Bewegung nach rechts, ein negativer nach links. Somit musst du also die hspeed Varibale, beim nach rechts laufen = 5 stellen (ohne relativ, da sonst in jeden Step sich der Wert um 5 erhöhen würde!), und als gegenstück nach links das ganze = -5 setzen.
    Vergess nicht das <any key> :event_keyrelease: Event zu löschen. Warum? Du stellst dort mittels :action_move1: die direction = 0 und den speed = 0 -> also überschreibst du wieder hspeed und vspeed: Das stocken setzt ein sobald irgendeine Taste losgelassen werden würde.

    Der Gau!

    Der Gau der ganzen Sache nun ist: Deine Figur wird sich nicht mehr aufhören zu bewegen! Doch dies kannst du schnell fixen.
    Mach anstatt das <no key> :event_keyrelease: einfach <D> :event_keyrelease: und <A> :event_keyrelease: und schreibe dort mit dem D&D Symbol :action_variable: hspeed = 0. Somit hört die Horizontale bewegung auf, der Spieler springt/fällt jedoch noch genauso schnell wie vorher.

    Kleine weitere Anmerkung:
    In deinem Step Event, kannst du alles unter :action_variable: vspeed = 12 löschen (Also alles ab :action_begin: ) da du doch die Einstellungen, nur mit anderen (größeren) Werten schon dortdrüber triffst. Dies ist also recht Sinnfrei.

    Das Problem mit den Spieler drehen.
    Das geht viiiiiel einfacher als du denkst.
    Der Game Maker hat (mal wieder eine eingebaute) Variable dafür. Diese heißt image_xscale. Damit kannst du die Sprites vergrößern um den Faktor x (je nachdem was du willst). Wenn du dein Bild umdrehen willst, musst du einfach -1 eingeben. So bleibt das Bild in der gleichen größe (die 1), wird jedoch umgedreht (dafür steht das minus davor).

    Wenn der Spieler also A drückt, stelle mittels :action_variable: image_xscale einfach = -1 und wenn der Spieler D drückt, einfach image_xscale = 1.

    Ich hoffe konnte dirt soweit helfen.
    Das Projekt ist auch noch mal verbessert im Anhang.

    Mfg.,
    Mokuyobi


    // Edit:
    Ausversehen einmal W anstatt D geschriebene.
    Dateien
    • My Jump&Run.zip

      (10,45 kB, 684 mal heruntergeladen, zuletzt: )
    木曜日 (Mokuyōbi)
  • :)

    Perfekt... Ein Text, der alles erklärt und die bearbeitete Version... Ich glaube ich habe jetzt alles verstanden...

    Viiiiielen Dank, dass du dir die Mühe gemacht hast :)

    Das mit den verschiedenen Richtungen ist ja, wie du schon gesagt hast, ziemlich einfach^^

    Ich denke, dass kann man dann schließen oder als gelöst markieren... Oder beides ;)

    MfG
    Jnthn

    EDIT: Doch noch eine Frage:

    (...) Wenn du dein Bild umdrehen willst, musst du einfach -1 eingeben. So bleibt das Bild in der gleichen größe (die 1), wird jedoch umgedreht (...)
    Heißt das ich brauche nur einen Playersprite und GM dreht den autoamtisch um?
  • Jap, das ganze Funktioniert natürlich auch mit Animationen. Der dreht dir halt dein kompletten Sprite dann. Das gleiche gibt es auch nochmal für die Vertikale drehung, heißt dann aber natürlich image_yscale. Aber das nur nebenbei.

    Ach und wenn das Thema deinerseits gelöst ist, kannst du unten rechts auf "Als Gelöst makieren" klicken, um den Mods ein bisschen Arbeit abzunehmen ;).

    Mfg.,
    Mokuyobi
    木曜日 (Mokuyōbi)