Spawnabstand eines Objektes bestimmen

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

  • Spawnabstand eines Objektes bestimmen

    Hallo ich entwickle momentan ein kleines Spiel, das Grundprinzip besteht eigentlich nur aus 2 Objekten, Maus und Käse ...


    Der Käse befindet sich Random irgentwo im Raum,

    Die Maus bewegt sich automatisch auf den Käse hinzu.

    Wenn man auf den Käse klickt, dann wird er zerstört und an einer anderen Stelle im Raum wieder erstellt.

    Ziel ist es, zu verhindern das die Maus mit dem Käse in Kontakt kommt.


    Das alles funktioniert auch und zwar mit folgendem Code:

    obj_käse

    Maus_Links_Gedrückt:

    instance _destroy

    instance_create_depth(irandom_range(46,398),irandom_range(46,398),1,obj_käse)


    An der ganzen Sache gibt es aber ein Problem:

    Manchmal wenn ich auf den Käse klicke dann spawnt er direkt unter der Maus bzw. so nah an Ihr, das man keine Chance hat zu reagieren.


    Daher meine Frage:

    Gibt es eine Möglichkeit den Käse immer im Abstand von einer bestimmten Pixelanzahl von der Maus erscheinen zu lassen?
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!
  • Denke da gibt es verschiedene Lösungsansätze.
    Einer wäre den Käse so lange neuzuspawnen, bis er einen Mindestabstand hat oder ihn aus dem Mindestabstand hinaus raus zu schieben.
    Wenn der Abstand immer konstant gleich sein soll, könnte man mittels der lengthdir_x/y()-Funktionen den Käse innerhalb eines vorgegebenen Radiuses in einer zufälligen Richtung von der Maus als Mittelpunkt spawnen lassen.
  • Am Besten fände ich es wenn man die x und y Position der Maus nimmt + eine bestimmte Anzahl an Pixeln.

    Ich weiß nicht, gibt es dafür irgentwie einen sinnvollen Code?


    Ach ja und die Maus bewegt sich mit folgenden Code:

    Step Event:

    move_towards_point(obj_käse.x,obj_käse.y,global.speed)

    Vielleicht kann man das irgentwie mit dem Käsespawncode verknüpfen?


    Also ungefähr so:

    instance_create_depth((irandom_range(46,398) && obj_maus.x + 20),(irandom_range(46,398) && obj_maus.y + 20),1,obj_käse)


    Ich weiß das der Code nicht funktioniert, aber mich würde interessieren ob es so in die Richtung geht?
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!

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

  • Hier ein Beispiel um es innerhalb eines bestimmten Radiuses spawnen zu lassen:

    GML-Quellcode

    1. dist=64+random(64);
    2. dir=random(360);
    3. instance_create_depth(obj_maus.x + lengthdir_x(dist, dir),obj_maus.y + lengthdir_y(dist, dir) ,1,obj_käse)

    In dem Beispielcode ist der Mindestabdstand 64 und Maximalabstand 128.

    Wenn du verhindern willst, dass der Käse außerhalb der Room-Grenzen spawned, wäre mein Vorschlag dies abzufragen und stattdessen innerhalb eines zufälligen Bereiches in der Raummitte zu spawnen.
  • Gut danke der Code ist schon sehr hilfreich ...

    Nur das mit dem sprengen der Room Grenze gefällt mir noch nicht.

    Gibt es da nicht ne Möglichkeit das bspw.

    if obj_käse.y < 40
    {
    direction = 270
    }
    (daselbe dann auch mit den anderen Richtungen)


    Also wen der Käse ohnehin schon extrem am Rand liegt, das er automatisch in die andere Richtung spawnt?
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!
  • Klar geht das.

    Im Createevent des Käses:

    GML-Quellcode

    1. if (x<linkerrand || x> rechterrand || y < obererrand || y > unterrand) //wenn außerhalb der Ränder
    2. {
    3. var mitte_dir=point_direction(x,y,room_width/2,room_height/2);
    4. x+=lengthdir_x(256,mitte_dir); //256px richtung Raummitte verschieben
    5. y+=lengthdir_y(256,mitte_dir);
    6. }
  • Das mit dem Rand funktioniert gut, geht nichts mehr darüber hinaus.

    Problem ist jetzt nur das dadurch der Käse manchmal wieder der Maus direkt vor die Füße fällt, also die Codes heben sich praktisch gegenseitig auf.


    Gab es nicht mal eine Funktion wo Instanzen an einer freien Stelle gespawnt werden? Mir fällt der Name der Funktion leider nicht mehr ein.

    Ich glaube die wäre hier auch ganz hilfreich...
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!
  • Ich kenne die Dimensionen des Spielfeldes und der Objekte nicht, aber in dem Fall würde ich den Käse einfach noch stärker Richtung Mitte verschieben oder falls es bereits am ursprünglichen Spawncode liegt den Mindestabstand erhöhen.
  • Ja ich habe die Werte noch ein wenig verändert, mittlerweile funktioniert es ziemlich gut, ich glaube ich kann es so lassen.

    Danke für Deine Mühe ...
    Schaut mal auf meinen Games vorbei (alle für Android):

    APPLE ISAAC

    JUGGLE JUNKIE

    SKY APE

    Freu mich über Meinungen, Verbesserungsvorschläge und gute Bewertungen!!!