Runde Plattform von unten durchspringen

  • GM 8
  • Runde Plattform von unten durchspringen

    Hallo Leute,

    ich würde gerne eine runde Plattform von unten durchspringen und von oben landen.

    Ich hab schon die Suchfunktion benutzt, aber da werden nur Lösungen angeboten die mit geraden Plattformen funktionieren.

    Das hab ich schon ausprobiert, funzt aber nicht:

    - Mit der Y-Koordinate der runden Plattform kann ich ja nicht arbeiten, da diese nichts darüber aussagt wo sich die runde Plattform befindet.

    - vspeed<0 abfragen geht auch nicht, da er hier auch true rausgibt wenn sich der Player nur halb in der Plattform befindet.

    - Check Collision und Check Objekt hab ich auch schon ausprobiert, funzt aber auch irgendwie nicht...

    Hat jemand eine andere Idee?

    Vielen Dank für jeden Hinweis!


    Gruß,
    Pascal

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

  • Hi Pascal,

    da ich gerade vor einem Rechner ohne Gamemaker sitze kann ich Dir nichts ganz konretes erklären, aber immerhin eine Idee: Solange Dein Spieler unterhalb der Platform ist (y-Koordinaten von Spieler und Plattform vergleichen), stellts Du die Kollisionsabfrage für die Plattform ab; ist der Spieler oberhalb, stellst Du sie wieder an.

    Gruß
    Andreas
  • Danke Andreas, aber wie ich schon geschrieben habe kann das mit der y-Koordinate der Plattform nicht funktionieren, da diese bei einer runden Plattform ja nichts aussagt. Die y-Koordinate liegt ja auf einer bestimmten Höhe, die Plattform selber hat aber mehrere verschiedene Höhen, da sie ja rund ist.

    Hoffe ich hab mich verständlich ausgedrückt ;)

    Sonst noch eine Idee?
  • Naja wenn du die Kollision von einem Objekt mit dem anderen Objekt überprüfst, hat das nur etwas mit der Kollisionsmaske, nicht mit dem Sprite zu tun, da bei der Kollisionsüberprüfung ja nur überprüft wird ob eine Kollision an besagter Stelle stattfindet. Bei mir funktioniert objRundPlatform eigentlich ganz gut (wenn obj_ledge als Parent eingestellt ist), bis darauf, dass man nur manchmal darauf landet weil das Objekt nur einen Pixel dünn ist, und sonst durchfällt. Aber du könntest eine separate Collision Mask erstellen. Wenn dir das auch nicht hilft bin ich mit meinem bescheidenen Latein am Ende.^^
  • obj_ledge funktioniert nur als parent, wenn das sprite eben ist, da es dann mit y übereinstimmt.
    Ist es aber so rund wie ich es in meinem ersten Post gezeigt habe, funktioniert es nicht, da wie schon gesagt nur eine höhe mit y bestimmt werden kann, die runde Plattform besitzt aber mehrere Höhen.

    Trotzdem Danke für Deinen Beitrag!



    Die Möglichkeit vspeed abzufragen (also ob sich der Player aufwärts oder abwärts bewegt) funktioniert ja eigentlich ganz gut, nur das vspeed auch größer 0 (abwärts) sein kann wenn er von unten springt und sich dann erst in der Mitte der Plattform befindet. Aber er soll ja nur landen wenn er sich oberhalb der Plattform befindet. Hat vielleicht jemand eine Idee wie man das ändert? Zusätzlich mit "check Objekt" vielleicht irgendwie?

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

  • Hier ist ein Bild damit ihr wisst wovon ich rede:




    Sobald Zool fällt (also vspeed>0) und die runde Plattform von oben berührt dann landet er. Soweit so gut.
    Wenn er aber von unten in Richtung Plattform springt und dann während der Kollision mit der Plattform fällt, hängt er sozusagen in der Plattform drin. Das ist ja blöd, er soll nur landen wenn er komplett über der Plattform ist.

    Daher hab ich das gemacht:



    if vspeed>0 // also wenn er fällt

    Execute a piece of code:

    {
    if collision_rectangle(-1,18,1,-18, obj_rund_plattform, true, true) // wenn er NICHT in der Plattform steckt, denn der Nullpunkt liegt in der Mitte von Zool und er ist 36px groß, also 18 px in jede Richtung
    x=xprevious
    y=yprevious
    move_contact_all(direction,-1)
    instance_change(obj_zool_land, true)
    }


    Das funktioniert aber nicht, er bleibt immernoch wie im Bild stecken...

    Findet jemand den Fehler?
  • Benutzer online 1

    1 Besucher