Kollision mit der Wand klappt nicht richtig?

  • GM 8
  • Kollision mit der Wand klappt nicht richtig?

    Es handelt sich um ein 2D Jump n Run.

    Ich paste jetzt hier einfach mal den Code vo meinem Männchen rein, da ich denke dass es sich um einen
    sehr einfachen Fehler handelt und ich bloß zu doof bin.
    Das Männchen läuft eben bei mir manchmal in die Wand rein und das nervt.. Is ja bei Super Mario auch nich so, werd ich also nich so lassen, obwohl
    es nicht sehr stört :P


    Also die meiste Zeit hält er jetzt vor der Wand an, nur manchmal, wenn
    ich grad gesprungen bin geht er doch wieder kurz in sie hinein.
    Außerdem kann ich jetzt wenn ich an Wänden Springen gedrückt halte, an diesen hochklettern.

    Ich glaub ich muss das alles nochmal vom Charakter von vorne anfangen.




    Also für den Hauptcharakter im Spiel, den man steuert:

    ___________________________________________________
    :event_step: Event:
    :action_code:
    //nach rechts laufen
    if(keyboard_check(vk_right) && !keyboard_check(vk_left)){
    sprite_index = walk;
    //xDir = 1;
    image_xscale = 1;
    x += 8;
    }
    //nach links laufen
    if(!keyboard_check(vk_right) && keyboard_check(vk_left)){
    sprite_index = walk;
    //xDir = -1;
    image_xscale = -1;
    x -= 8;
    }
    //stehen
    if((!keyboard_check(vk_right) && !keyboard_check(vk_left)) ||
    (keyboard_check(vk_right) && keyboard_check(vk_left)))
    sprite_index = front;

    :action_iffree: If a position is collision free 0/1/only solid, relative
    :action_gravity: Set the gravity 270 / 0.9
    :action_else:
    :action_gravity: Set the gravity 270 / 0
    :action_ifvariable: if vspeed is greater than 12
    :action_variable: set variable vspeed to 12
    __________________________________________
    :event_keyboard: <Up> Event:
    :action_ifcollision: If there is a collision at a position 0/4/only solid/relative
    :action_vspeed: set the vertical speed to -19
    __________________________________________
    :event_collision: Wand:
    :action_contact: Move to contact in direction direction / solid objects
    :action_vspeed: Set the vertical speed to 0
    ___________________________________________

    Wenn ich den Code so lasse, wie man ihn hier sieht, dann tritt der Fehler auf, dass das Männchen in die Wand hineinläuft.
    Läuft
    man allerdings weit genug in die Wand hinein, wird es wieder vor der
    Wand platziert, also praktisch ein paar Koordinaten weiter vorner
    hinteleportiert.

    Wäre sehr dankbar wenn ihr mir helfen könntet.
    Hab grad keine Ahnung was ich falsch mache.
    Abgesehen
    davon, hat das schonmal ohne Probleme geklappt, nur damals hatte ich
    eine ganz andere Methode benutzt... Und die war sehr schlampig..

    Also wie gesagt, bin sehr dankbar für jede Antwort! :)
  • Das Problem kenn ich

    Du musst bei keyboard left und right bevor du x veränderst prüfen ob dort frei ist.

    Etwa so:
    if place_free (-8,0,solid) then x=x-8 //links
    if place_free (8,0,solid) then x=x+8 //rechts
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D
  • Larsi schrieb:

    Das Problem kenn ich

    Du musst bei keyboard left und right bevor du x veränderst prüfen ob dort frei ist.

    Etwa so:
    if place_free (-8,0,solid) then x=x-8 //links
    if place_free (8,0,solid) then x=x+8 //rechts

    Larsi schrieb:

    Das Problem kenn ich

    Du musst bei keyboard left und right bevor du x veränderst prüfen ob dort frei ist.

    Etwa so:
    if place_free (-8,0,solid) then x=x-8 //links
    if place_free (8,0,solid) then x=x+8 //rechts

    Komisch, bei mir sagt er sobald ich das einfügen will: "Wrong number of arguments to function or script."
  • place_free erwartet nur zwei Argumente: x und y:
    place_free(x,y) Gibt an, ob die Instanz
    an angegebener
    Position(x,y) eine Kollision auslöst. Sie wird verwendet als
    Prüfroutine bevor man sich auf die neue Stelle bewegt.

    place_empty(x,y) Gibt
    an, ob die Instanz an angegebener Position(x,y) auf nichts trifft.
    (Diese Funktion beachtet auch "non-solid" Instanzen.)

    GML-Quellcode

    1. if (place_free(x-8,y)) { x-=8; } //links
    2. if (place_free(x+8,y)) { x+=8; } //rechts
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • *brohoof* Danke :thumbsup:

    Edit:
    Ups.. jetzt bewegt sich mein Charakter gar nicht mehr. Hülfeee

    Edit 2:
    Oh halt, hab rausgefunden warum.

    Edit 3: [PROBLEM DOCH NOCH NICHT GELÖST :( ]
    Das Männchen läuft immernoch zum Teil in die Wände rein und kann, wenn es springt und auf eine Wand zugeht, in der Wand stecken bleiben.
    *Seufz*

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von schnipfl ()

  • Kollision sollte entfernt werden. Versuch das Code von Henrik nochmals.


    Jedenfalls hatte bzw. habe ich selber noch Probleme mit Wänden oder Blocken die
    mit Kolission als Solid erstellt werden. Ist nicht ganz leicht um es Perfekt zu gestallten.
  • Benutzer online 1

    1 Besucher