Nicht ineinander laufen

  • Nicht ineinander laufen

    Ich weiss die Frage gab es schon tausendmal, aber bis jetzt hab ich keine wirkliche (gute) Lösung gefunden.
    Ich habe mehrere gleiche Objecte im Raum die sich zum Spieler bewegen.
    Doch leider überlappen die sich dann natürlich.
    Habe schon alles mögliche versucht, aber ohne Erfolg.
    Entweder sie bleiben Hängen, springen wild durch die Gegend oder stockern.

    Ich möchte halt das die Gegner sich nicht überlappen(drehen tuen sie sich mit image_angle und besitzen eine Maske)
    Hat da jemand eine gute Lösung?
  • Du kannst es ja mal so versuchen (ist wirklich ganz billig): Da die Objekte sich immer auf den Spieler zu bewegen, könntest du bei Kollisionen untereinander einfach den, der weiter vom Spieler entfernt ist, anhalten oder zumindest langsamer bewegen. Das könntest du schön smooth gestalten und dann sieht das auch nicht so ruckelig aus, wie bei der Verwendung der GM internen Pfadfindung.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Die Idee find ich gut, aber anscheiend bin ich zu dumm um diese umzusetzen.

    create event:

    GML-Quellcode

    1. move=true


    step event

    GML-Quellcode

    1. if move=true
    2. move_towards_point(objPlayer.x,objPlayer.y,1)
    3. else
    4. speed=0


    collision mit sich selber

    GML-Quellcode

    1. if distance_to_object(objPlayer) < ( oder > hab beides ausprobiert) other distance_to_object(objPlayer)
    2. move =false
    3. else
    4. move=true

    Ich weiss das der Fehler ist, dass ich die Variable move auf false setze dass sich die berührten Objecte beide nicht weiter bewegen.
    Vielleicht kann mir einer von euch dabei helfen :s
  • Oh, daran verzweifele ich auch immer :D
    Hiermit ist es wohl am einfachsten ( aber ímmernoch bugreich ) :

    GML-Quellcode

    1. move_outside_all ( 1 , 360 - point_direction ( x , y , other.x , other.y ) )

    Weiß jetzt gar nicht obs geht, habs selber lange nicht mehr gemacht ;)
    Wenn mir noch was einfällt, poste ich es natürlich :)
  • Man das, dass so viel ausmacht :O :D
    Benutz mp_.._step sonst auch, aber mit deinen anderen Code funktionierts Perfekt.fast.
    Danke :thumbsup: Du hast meinen Tag/Projekt gerettet ;D :D

    Edit: :( Funktioniert doch nicht, dass Problem ist, da die sich zum Spieler drehen, springen die jetzt doch durch die Gegend.
    Also wenn die sich nicht drehen klappts gut.
    Ich kann das Projekt sonst auch mal hochladen.

    Edit2: Mit einer runden Maske und ohne move_outside klappt es eigt ganz gut. Nur bewegen sich manchmal alle etwas langsam, aber ist schonmal ziemlich gut so ^^

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

  • Noch 'ne Idee ;) :

    GML-Quellcode

    1. if point_distance ( x , y , objPlayer.x , objPlayer.y ) >= point_distance ( other.x , other.y , objPlayer.x , objPlayer.y )
    2. {
    3. move_outside_all ( 1 , 360 - point_direction ( x , y , other.x , other.y ) )
    4. }

    Wenns nicht funktioniert - Was ich fast vermute - lads doch mal hoch ;)

    EDIT:Oh, wenns funktioniert ist ja alles Prima :3