Spieler soll für kurze Zeit Fliegen

  • GM 8

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

  • Spieler soll für kurze Zeit Fliegen

    Hallo,
    ich möchte das der Spieler, wenn man in eine Richtung läuft und gleichzeitig Space drückt, für ca. 1-2 Sekunden in diese Richtung fliegt und es soll während er fliegt auch einer neuer sprite angezeigt werden. Ich weiß nur leider nicht wie das geht und hab bisher nur diesen Code im step Event:

    // Boost
    if (keyboard_check(vk_space) and keyboard_check_pressed(vk_space))
    {
    if lastpressed = "right"
    hspeed += 10
    else
    hspeed -= 10
    }

    Ich hoffe ihr könnt mir helfen und schon mal Danke.
  • Du kannst Alarme einbauen.

    GML-Quellcode

    1. // Boost
    2. if (keyboard_check(vk_space) and keyboard_check_pressed(vk_space))
    3. {
    4. sprite_index = spr.luft//oder wie dein Jumpsprite heißt
    5. alarm[0]= room_speed //für eine Sekunde, abhängig von der Raumgeschwindigkeit, falls es nich geht nimm 30 oder 60 oder so
    6. if lastpressed = "right"
    7. hspeed += 10
    8. else
    9. hspeed -= 10
    10. }


    im alarm[0] Event

    GML-Quellcode

    1. hspeed = 0
    2. sprite_index = spr.normal//oder wie dein Sprite auch immer heißt
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
  • Das könnte daran liegen das ja eigentlich vspeed zum hochspringen auch noch wichtig ist. Was genau funktionierte denn schon mit dem alten Code-Ausschnitt?
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
  • Sobald ich nach rechts oder links und gleichzeitig space drücke, springt der Spieler die strecke so als würde er sich teleportieren, allerdings nur 10 pixel da ich ja einbauen möchte das er 2 Sekunden lang 10 pixel fliegt(also nicht insgesammt 10 pixel). Es sollte so aussehen als würde der Spieler nach vorne preschen. was ich vergessen hab zu sagen ist das der Sprite zum fliegen schon höher ist als der normale.

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

  • Dein Code steht im Stepevent --> Wenn du also 2 Sekunden drückst, wird 2 * room_speed Aktionen ausgeführt. Wenn du einen room_speed = 30 hast, wird also insgesamt 60 mal aufgerufen, dass er sich um 10 pixel bewegen soll. (Stimmt das?- Das hört sich nach so viel an...)
    Die Quintessenz dürfte aber trotzdem sein, dass du weniger als 10 nehmen solltest.

    Ich hab eine vielleicht etwas umständliche Idee zum lösen deines Problems:

    GML-Quellcode

    1. // Boost
    2. if (keyboard_check(vk_space) and keyboard_check_pressed(vk_space) and flug == true)
    3. {
    4. sprite_index = spr.luft//oder wie dein Jumpsprite heißt
    5. alarm[0]= room_speed //für eine Sekunde, abhängig von der Raumgeschwindigkeit, falls es nich geht nimm 30 oder 60 oder so
    6. if lastpressed = "right"
    7. hspeed += 10
    8. flug = false //damit du nur einmalig fliegen kannst
    9. else
    10. hspeed -= 10
    11. flug = false
    12. }
    Alles anzeigen


    alarm[0]

    GML-Quellcode

    1. hspeed = 0
    2. sprite_index = spr.normal//oder wie dein Sprite auch immer heißt
    3. flug = true //flug wieder möglich


    Natürlich musst du flug im Create-Event initialisieren, also flug = true

    Vielleicht hilft dir das ja bei deinem Problem weiter, ich versteh nämlich genau, wao es grad bei dir hängt und wegen des Sprites: Sprites einer Instanz änderst du mit sprite_index, wie schnell sich animierte Sprites bewegen, kannst du mit image_speed einstellen, und wenn nur ein Bild einer Animation angzeigt werden soll image_index
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sk.Info.k.P. ()

  • Jetzt verstehe ich den sinn dahinter doch jetzt ist bei mir das "else" als fehler markiert und krieg das nicht weg. Auch nicht mit weiteren geschwiften klammern oder so und hab auch versucht gm neuzustarten doch das hat nichts geholfen. :/ manchmal hab ich so das gefühl als wäre ich zu dumm. Tut mir wirklich leid das ich grad zu dumm für das ganze bin :D
  • Ja tschuldigung ich glaub das war mein Fehler, weil bei mit immer alle if s und else s in geschweiften Klammern stehen. Probier das vielleicht nochmal so

    GML-Quellcode

    1. // Boost
    2. if (keyboard_check(vk_space) and keyboard_check_pressed(vk_space) and flug == true)
    3. {
    4. sprite_index = spr.luft//oder wie dein Jumpsprite heißt
    5. alarm[0]= room_speed //für eine Sekunde, abhängig von der Raumgeschwindigkeit, falls es nich geht nimm 30 oder 60 oder so
    6. if lastpressed = "right"
    7. {
    8. hspeed += 10
    9. flug = false //damit du nur einmalig fliegen kannst
    10. }
    11. else
    12. {
    13. hspeed -= 10
    14. flug = false
    15. }
    16. }
    Alles anzeigen


    Unwichtig, weil Anfang meiner Programmiergeschichte, muss man sich nicht antun
    Spoiler anzeigen
    Immerhin weißt du wo die geschweiften Klammern sind ;) Als ich angefangen hab zu programmieren, musst ich mir von ner Freundin zeigen lassen, wo die sind und welche Taste ich in Kombination drücken muss, damit wirklich die geschweifte Klammer kommt... :rolleyes:
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sk.Info.k.P. ()

  • Ich hab bei dir einen Fehler gefunden. Du hast bei if (lastpressed == "right") ein leerzeichen mitreingebracht doch das hat nichts verändert und jetzt funktioniert leider die gesammte Funktion nicht mehr. Also er legt nichteinmal diese strecke zurück wenn ich drücke. Ich denke das liegt an den ganzen Klammern.
    Ich werde mich später noch mit Alarmen auseinandersetzen und versuch das ich das mal versteh.
    Doch wenn du ne lösung findest darfst du sie mir gerne schicken ;) und nochmal danke für deine Bemühungen.
  • Ich hab es oben jetzt geringfügig geändert. Die geschweiften Klammern waren auch richtig und wichtig.
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
  • 1. Ich hab den Fehler gefunden warum bei mir garnichts mehr ging und zwar ist das flug schuld. Und 2. hab ich jetzt eine Idee wie ich das machen könnte. Ich find nur leider nirgends etwas wie man für genau so etwas den alarm runterzählen lassen kann. und zwar hab ich grad diesen Code im Event wenn man space gedrückt hat:
    if alarm[0] = 60
    {
    sprite_index = Player1jumpright_spr
    if lastpressed = "right"
    {
    hspeed += 10
    }
    else
    {
    hspeed -= 10
    }
    }

    if alarm[0] = 0
    if lastpressed = "right"
    {
    hspeed = 0
    sprite_index = Player1right_spr
    }
    else
    {
    hspeed = 0
    sprite_index = Player1left_spr
    }
    und im gleichen Event einen Alarm den ich mit einer Drop aktion eingebaut habe der auf 60 gestellt ist. Wie schon gesagt ich kenn mich mit Alarmen nicht aus aber ich denke das es so in der Art machbar ist.
  • Den 2. Teil des Codes kannst du in das Alarm[0] event reinmachen, dann wird das ausgelöst, wenn der Alarm 0 ist. Wobei du ihn um eine Zeile erleichtern kannst:

    GML-Quellcode

    1. hspeed = 0
    2. if lastpressed = "right"
    3. {
    4. sprite_index = Player1right_spr
    5. }
    6. else
    7. {
    8. sprite_index = Player1left_spr
    9. }

    Ob man überprüfen kann wie weit der Alarm runtergezählt hat, weiß ich nicht. Aber in der Hilfe kann man das eigentlich so verstehen, das es funktioniert (Hilfe --> Suche--> Alarm--> Timing(Abstimmung). Wie gesagt, kannst es ja einfach ausprobieren.

    Meine Idee der flug-Variable würde das Ganze auch theoretisch auch erledigen.. Hast du im Create-Event flug = true geschrieben? Na ich erklär meine Idee einfach mal etwas ausführlicher:
    Die Variable bezweckt, dass man nur springen kann, wenn sie auf true gestellt ist. Wenn man also grad losspringt wird sie auf false gestellt, heißt also man kann nicht nochmal klicken(bzw. es hast dann keine Auswirkungen). Die Flugphase ist dann vorbei, wenn der Alarm abgelaufen ist. Dann kann man auch erneut wieder springen, weil im Alarm-Event flug wieder auf true gestellt wurde.

    Ansonsten noch allgemeine Anmerkungen: Man kann den Code leserlicher machen, wenn man ihn in die dafür vorgesehen GML-Dinger setzt. Findet sich oben in der 2.Reihe, kleine schwarze Box auf der GML draufsteht.
    Schreib doch in dein Profil, welchen GM du gast und wie gut du dich einschätzt.
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
  • Hab mal bisschen rumprobiert und auch in der hilöfe geschaut und so aber egal was ich mach es wird nicht besser sondern eheer schlechter :/ ich probier jetzt mal noch ein bisschen rum. Mit deiner Lösung hatte ich das problem, das ich in den blöcken springen konnte. Also es hat die Kolisionserkennung für links und rechts nicht mehr funktioniert