Steigungen + Festhalten

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

  • Steigungen + Festhalten

    Mal wieder eine dumme Frage von mir :ops: Um genauer zu sein, sind es 2:

    Frage 1:
    Könnte mir jemand eventuell ein Script zeigen, welches Steigungen unter 45° bis 45° berechnet (für Jump´n Run)

    Frage 2:
    Diese Frage liegt mir schon länger auf der Zunge:
    Gibt es eine Möglichkeit, die Figur an Abhängen hängen zu lassen? Sowie in Metroid Fusion oder Metroid Zero Mission etc. Und mit einem Klick nach oben raufklettert. Bitte nicht allzu kompliziert (falls möglich)

    Grüße, Mad
  • Zur Frage1:

    GML-Quellcode

    1. keyevent rechts:
    2. if place_free(x+3,y)
    3. x+=3
    4. else
    5. {
    6. if place_free(x+3,y-3)
    7. {
    8. x+=3
    9. y-=3
    10. move_contact_solid(270,3)
    11. }
    12. }
    Alles anzeigen

    damit müsste man bis 45° hochgehen können... habs aber grad spontan geschrieben und nicht getestet!
  • Danke, TrunX. Aber ich hätte es anders gemeint:

    Es sollen Steigungen von 0° bis 45° erklimmbar sein, also auch 40°, 35° usw.

    Deine Methode hätt ich auch gewusst^^, aber danke trotzdem.

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

  • Mal schauen, das Problem hab ich schon mehrfach gelöst, bei meiner aktuellen version von EN:Dee gehts auch ohne, das man regelmäßig in den schrägen steckenbleibt:

    GML-Quellcode

    1. //HorizontalSpeed ... Richtung in die dich die Spielfigur bewegt
    2. //Onfloor ... die Variable wird gesetzt, wenn sich die Spielfigur auf Boden befindet.
    3. //M O V E M E N T
    4. if(HorizontalSpeed != 0)
    5. {
    6. //OnWall = false;
    7. for(i = 0; i < abs(HorizontalSpeed); i+= 1)
    8. {
    9. if(!OnFloor) //I'm flying! Or Jumping!!!
    10. {
    11. if(place_free(x+sign(HorizontalSpeed),y))
    12. {
    13. x += sign(HorizontalSpeed);
    14. }
    15. else
    16. {
    17. OnWall = true;
    18. break;
    19. }
    20. }
    21. else //Floor underneath my feet...
    22. {
    23. for(j = 1; j > -2; j-= 1)//this is needed if the floor is not straight...
    24. {
    25. if(place_free(x+sign(HorizontalSpeed),y+j))
    26. {
    27. x += sign(HorizontalSpeed);
    28. y += j;
    29. break;
    30. }
    31. else
    32. if(j==-1)
    33. {
    34. HorizontalSpeed = 0;
    35. OnWall = true;
    36. break;
    37. }
    38. }
    39. }
    40. }
    41. }
    42. else
    43. {
    44. OnWall = false;
    45. }
    Alles anzeigen


    Der Source sieht zwar kompliziert aus, ist aber eigentlich einfach zu verstehen. Wichtig ist der Teil ab "else //Floor underneath my feet...". Im endeffeckt überprüfst du für jeden Pixel den du dich in eine bestimmte richtung bewegst ob unter dir, vor dir oder über dir etwas frei ist. Es ist wichtig das genau in der Reihenfolge zu überprüfen, weil es ist fast immer etwas über einem Frei, was zu seltsamen resultaten führt. Dieser Source funktioniert für steigungne bis zu 45° und kann ohnen probleme auch auf unebenen Oberflächen eingesetzt werden. Er behandelt allerdings nicht das runterfallen (was aber leicht zu überprüfen ist, indem man abcheckt ob 2 pixel unter einem was frei ist).

    Das Problem mit dem Festhalten habe ich ~ wie der Zufall so will ~ auch bereits gelöst, da ich mir dachte das es eine Nette Idee für mein Eigenes Spiel währe. Ich habe dafür ein Unsichtbares Objekt erstellt, das über dem Kopf der Spielfigur schwebt (ca 3x3 Pixel groß). Es ist, je nach bewegung und ausrichtung der Spielfigur links, rechts oder mittig angeordnet ~ mittig deswegen, weil wenn der Spieler in keine Richtung drückt, soll sich die Figur nicht festhalten. Jetzt habe ich an allen Relevanten Kanten kleine Objekte eingefügt, welche das festhalten auslösen, wenn sie mit dem Climber Objekt kollidieren.
    ...
  • äHm... Danke Shoba^^ Ich nehm aber den Code von trunX, der ist mir nicht so kompliziert :ops:

    Aber mit dem Raufklettern... is ne klasse Idee.

    Hätt da noch ne genauere Frage: Wenn sich die Figur festhält:
    Wie soll ich sie auf die Klippe hinaufbringen, dass sie hinaufklettert? (stell dir die Figur wie Samus vor ;))

    EDIT: Script kapiert XD

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

  • Mit meinem script kann man doch von 0-45° hochlaufen?

    Zum hängen... kannst ja bei jeder klippe n unsichtbares object machen, wo wenn der sprite oben drauf "steht" sich der sprite in nen hängenden verwandelt...
  • Original von TrunX
    Mit meinem script kann man doch von 0-45° hochlaufen?

    Zum hängen... kannst ja bei jeder klippe n unsichtbares object machen, wo wenn der sprite oben drauf "steht" sich der sprite in nen hängenden verwandelt...

    Das hab ich ihm auch schon erklärt, aber er sagte er hätte noch ein Prob...
    Ich weiss nur nicht wo...
  • Hab da noch ne Frage zu Shobas Script:

    GML-Quellcode

    1. x += sign(HorizontalSpeed);
    2. y += j;
    3. break;


    j wird ja als

    GML-Quellcode

    1. for(i = 0; i < abs(HorizontalSpeed); i+= 1)

    initialisiert

    Das heißt die figur würde bei schrägen Hängen nach oben gehen...
    Geht sie dann auch runter? Kann mir die stelle mit der for-Schleife jemand besser erklären :( Ich kapier das einfach nicht xD

    EDIT: Kommentar übersehen:

    Er behandelt allerdings nicht das runterfallen (was aber leicht zu überprüfen ist, indem man abcheckt ob 2 pixel unter einem was frei ist).


    Das gehört einfach alles ins Step-Event, oder?

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

  • Original von Shoba
    Mit deinem Source kann man nicht nach unten "gehen". Es wird eher als fallen gehandhabt, wenn eine 45° schräge nach unten vorhanden ist.

    Dann halt so:

    GML-Quellcode

    1. if place_free(x+3,y)
    2. {
    3. x+=3
    4. move_contact_solid(270,3)
    5. }
    6. else
    7. {
    8. if place_free(x+3,y-3)
    9. {
    10. x+=3
    11. y-=3
    12. move_contact_solid(270,3)
    13. }
    14. }
    Alles anzeigen
  • Original von Mad
    j wird ja als

    GML-Quellcode

    1. for(i = 0; i < abs(HorizontalSpeed); i+= 1)

    initialisiert

    Das heißt die figur würde bei schrägen Hängen nach oben gehen...
    Geht sie dann auch runter? Kann mir die stelle mit der for-Schleife jemand besser erklären :( Ich kapier das einfach nicht xD


    Knapp daneben. Du hast die initialisierung von 'i' erwischt. 'j' wird mit dieser for schleife initialisiert:

    GML-Quellcode

    1. for(j = 1; j > -2; j-= 1)

    j hat dann genau folgende werte: 1,0, -1.

    Das Script

    GML-Quellcode

    1. if(place_free(x+sign(HorizontalSpeed),y+j))

    überprüft jetzt ob auf den positionen y+1, y und y-1eine kollision vorhanden ist. Wenn keine der Drei Optionen zur verfügung steht (sprich wenn j -1 wird) bleibt die Spielfigur stehen.
    ...
  • Benutzer online 1

    1 Besucher