Probleme mit Leiter

  • GM 8

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

  • Probleme mit Leiter

    habe diesen code in end step event

    GML-Quellcode

    1. if place_meeting (x,y,leiter)
    2. {
    3. direction=270
    4. gravity=0
    5. vspeed=0
    6. }
    7. if place_empty(x,y)= solid
    8. if place_free (x+0,y+0)
    9. if place_meeting (x+0,y+0,leiter)
    10. if keyboard_check (vk_up)
    11. {
    12. image_index=klettern
    13. vspeed-=4
    14. }
    Alles anzeigen


    aber dieses sprite klettern geht nicht weil davor ein drag and drop ist

    das if collision free y+1 macht probleme,es kommt stattdessen immer der sprung animation.
    hat einer einen perfekten leiter engine,oder wie das besser machbar ist
    der charakter sollte auch genau in der mitte des leiters sein. :cursing:
  • GML-Quellcode

    1. if place_empty(x,y)= solid
    2. if place_free (x+0,y+0)
    3. if place_meeting (x+0,y+0,leiter)


    Wie soll den das funktionieren? Du prüfst ob der Platz leer ist und setzt ihn auf solid? Syntaxfehler!
    Dann prüfst du wiederum ob der platz frei ist ( Beachte die Parameter die du benötigst bei place_empty/place_free ) Noch was x+0 ist das selbe wie x -> x+0 = x
    Dann prüfst du ob sich eine leiter auf x,y befindet.
    Außerdem wieso verwendest du das end step event? Hab ich noch nie verwendet. Dir sollte im klaren sein das ein Step Event jedes Frame neu aufgerufen wird. Das heißt
    bei 60 FPS haben wir 60 mal den Aufruf deines gesamten Codes in einer Sekunde. Du kannst aber nicht gleichzeitig prüfen ober sich an einer stelle nichts befindet, dann doch was?
    Versuche dir erstmal Grundlagen in GML anzulegen. Solltest auch du irgendwann hinkriegen. Sehe das ganze als Hilfe und nicht als Kritik.

    Zu deinem Problem.: In Game Maker ist es dir erlaubt verschiedene Dinge zu prüfen, wie zum Beispiel ob der Spieler sich grade in Berührung mit einer leiter ist oder eben nicht.

    GML-Quellcode

    1. if(place_meeting(x,y,leiter))
    2. {
    3. is_ladder = true;
    4. }
    5. else
    6. {
    7. is_ladder = false;
    8. }


    Das ist nur ein Ansatz, der dir ein bisschen vielleicht verdeutlicht wie sowas funktionieren könnte. is_ladder ist im Prinzip nichts als ein Wert der wahr oder falsch sein kann.
    Jetzt hast du die Gelegenheit zu prüfen, was passieren soll wenn is_ladder wahr ist "if(is_ladder == true) oder eben "if(is_ladder == false). Abkürzen lässt sich das ganze auch eig so:

    GML-Quellcode

    1. if(is_ladder) // <- Wenn wahr
    2. {
    3. // Hier könnte man die Gravity ausschalten, damit das keinen Effekt auf die Leiter hat... und das image ändern. image_index bestehen normalerweise nur aus Zahlen von 0 bis zur Größe der images in einem Sprite.
    4. }

    GML-Quellcode

    1. if(!is_ladder= // <- Wenn nicht wahr
    2. {
    3. // Hier wiederum kann man die Gravity wieder einschalten, sowie das Springen etc.
    4. }

    Ich hoffe ich konnte dir ein bisschen auf die Sprünge helfen.
    Mono C# / SFML.Net <3
  • Du kannst doch entscheiden wann er "jump sprite" hat und wann "idle"?

    Wann steht/läuft der Player?

    Wann springt der Player?

    Wann klettert der Player?

    Mit Variablen kannst du genau bestimmen wann das eintreffen sollte. Denke an die boolean variablen die nur "true" oder "false" sein können. Also "wahr" oder "nicht wahr"

    Versuch mal richtige Kollision damit zu prüfen

    GML-Quellcode

    1. ladder = instance_nearest(x,y,obj_ladder);
    2. if collision_rectangle( ladder.x, ladder.y, ladder.x+ladder.sprite_width, ladder.y+sprite_height, Player, false, false )
    3. {
    4. is_ladder = true;
    5. }
    6. else
    7. {
    8. is_ladder = false;
    9. }


    Damit hast du dann die Möglichkeit auch noch zu prüfen wann er springen darf und kann. Daselbe wann er sich auf dem Boden befindet. Sollte er sich zb. nicht auf einer Leiter befinden. Springen kann er ja nur
    wenn er sich nicht an der Leiter befindet. Das ganze musst du noch erweitern aufjedenfall..
    Mono C# / SFML.Net <3
  • das ist mir zu advance :cursing:

    wie kann ich denn sprung animation in der luft beibehalten bis er denn boden berührt und wechselt,bei step event geht
    das aber wegen diesen nervigen collision free y-1 bleibt der animation immer jump,also kletter animation geht einfach nicht
    weil ich in der luft bin :headtouch: :headtouch: