an einer wand "entlangrutschen"

  • GM 7

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

  • an einer wand "entlangrutschen"

    hey leute, bei meinem spiel erfolgt die bewegung des player mit folgendem code:

    GML-Quellcode

    1. move_towards_point(mouse_x,mouse_y,point_distance(x,y,mouse_x,mouse_y)/8)

    nun will ich mache,dass wenn er mit obj_wall collidiert,nicht daran hängen bleibt,sondern daran entlangrutscht.ich hätte das mal so versucht,aber es klappt nicht:

    GML-Quellcode

    1. if y<obj_wall.y && x<mouse_x
    2. {
    3. hspeed=5
    4. }
    5. if y<obj_wall.y && x>mouse_x
    6. {
    7. hspeed=-5
    8. }
    9. if y>obj_wall.y && x<mouse_x
    10. {
    11. hspeed=-5
    12. }
    13. if y>obj_wall.y && x>mouse_x
    14. {
    15. hspeed=5
    16. }
    Alles anzeigen

    was ist falsch und was ist der richtige code?
  • die game maker routinen find ich sche*ße, vor allem bei der bewegung.

    ich benutze einfach das hier fürs bewegen.

    x+=cos(degtorad(direction))*s;

    s ist die speed, ob man degtorad braucht bin ich mir nicht sicher,

    und y+=sin(degtorad(direction))*s;

    dann kannsd dus so machen:

    if collision_point(x+sin(degtorad(direction)),y,wand,1,0)<0 x+=sin(degtorad(direction))

    dasselbe für y-richtung, so wird zB bei einer vertikalen wand, wenn du von oben links kommst -> nach unten rechts, die x-bewegung nicht ausgeführt wegen collisions abfrage und die y-richtung aber doch, also gleitest du an der wand nach unten vorbei.

    außerdem kannsd du so nie in der wand stecken bleibenm weil vor der bewegung schon geprüft wird ob der nöchste schrit frei ist.
  • henrik1235 schrieb:

    Dann hem doch die D&D funktion names Bounce oder so.
    Also das:
    Henrik: vieleicht ist dir noch nicht aufgefallen das bounce und sliden nicht das selbe ist!

    EDIT: und das "Da bleibt das nich hängen aber bewegt sich auch nicht" ist das paradoxeste was ich je gehört habe!

    Zum thema: ganu das selbe problem hatte ich auch mal, vor 1-2 monaten *kram kram*..

    so, gefunden: klick mich

    Du müsstest nur noch position_empty durch collision_point oder line ersetzen

    MfG SDX

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

  • versuche es mal damit:

    GML-Quellcode

    1. mp_potential_step(mouse_x,mouse_y,point_distance(x,y,mouse_x,mouse_y)/8,false)


    ändere einfach das move_towards_point in mp_potential_step ;)
    Meine Spiele:
    - Mission A
    - Mission B
    - The Virus 1, 2, 3
    - The Virus 4: The Excision
    - Blur melts Snow
    - Blur melts Snow: 2nd Version
    - Cave Jumper

    Hauptrojekt: Party Mania(Arbeitstitel) - große Multiplayer-Minispielsammlung
    In Planung: Planet Jumper(Nachfolger von Cave Jumper)
  • @ sebastian773: das bringt gar nichts!!!
    @ anti0ogen blau: ich hab ins collisionsevent mit obj_wand folgenden code reingemacht:

    GML-Quellcode

    1. if collision_point(x+sin(degtorad(direction)),y,obj_wall,1,0)<0 x+=sin(degtorad(direction))
    2. if collision_point(x,y+sin(degtorad(direction)),obj_wall,1,0)<0 y+=sin(degtorad(direction))

    meine bewegung bleibt weiterhin:

    GML-Quellcode

    1. move_towards_point(mouse_x,mouse_y,point_distance(x,y,mouse_x,mouse_y)/8)


    aber ich bleibe immernoch hängen.
    warum?
  • Collision_event mit Wand:

    x=xprevious;
    y=yprevious;
    if(!place_meeting(x+hspeed,y,obj_wall))
    {
    x+=hspeed;
    }
    if(!place_meeting(x,y+vspeed,obj_wall))
    {
    y+=vspeed;
    }

    Sollte klappen. Bei mir tut es das.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • KingG-BlackOne schrieb:

    Mach einfach gar nix besonderes.Wenn dein Objekt mit der Wand kollidiert setz es auf die Posiition die es in dem Moment hat.
    Nein,weil wenn man die maus durch die Wand zeiht geht auch der Spieler mit ;)
    @Topic:
    MAch doch das das objeckt ein Pixel vor der Wand ist.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Mach das Kollisions Event weg und folgenden Code in's Step Event:

    GML-Quellcode

    1. // Gewünschte Richtung und Geschwindigkeit:
    2. direction = point_direction(x,y,mouse_x,mouse_y);
    3. speed = point_distance(x,y,mouse_x,mouse_y)/8;
    4. // Bewegen, bis eine Kollision auftritt:
    5. move_contact_solid(direction,speed);
    6. // Stoppen, wenn in der Richtung etwas im Weg steht:
    7. if (!place_free(x+sign(hspeed),y)) {hspeed = 0;}
    8. if (!place_free(x,y+sign(vspeed))) {vspeed = 0;}
    9. // Restdistanz ermitteln und bewegen:
    10. if (hspeed != 0) {hspeed = xprevious+lengthdir_x(speed,direction)-x;}
    11. if (vspeed != 0) {vspeed = yprevious+lengthdir_y(speed,direction)-y;}
    12. if (speed != 0) {move_contact_solid(direction,speed);}
    13. // Wir wollen nicht, dass der GM die Bewegung übernimmt:
    14. speed = 0;
    Alles anzeigen

    Ich hoffe es funktioniert wie gewollt :)
  • henrik1235 schrieb:

    KingG-BlackOne schrieb:

    Mach einfach gar nix besonderes.Wenn dein Objekt mit der Wand kollidiert setz es auf die Posiition die es in dem Moment hat.
    Nein,weil wenn man die maus durch die Wand zeiht geht auch der Spieler mit ;)
    Doch, das geht.Mal ausprobiert?Hört sich seltsam an aber funktioniert.Vielleicht habe ich mich nicht verständlich genug ausgedrückt aber ich weiß wovon ich spreche. ;)
  • Leider gibt es doch kein großes Geheimnis.Habe gerade festgestellt das das mit dem rutschen dann nicht geht.
    Ich hab vor lauter Überzeugung in meine Fähigkeiten die Frage nicht richtig gelesen. :D