Bei "instance_nearest(...)" sich selbst ausschliessen

  • GM 8

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

  • Bei "instance_nearest(...)" sich selbst ausschliessen

    Hallo Leute,

    wenn man die Funktion "instance_nearest(x,y,obj_beispiel)" in obj_beispiel benutzt, schliesst er die Instanz welche den Code ausführt in der Suche mit ein. Das heißt er findet immer sich selbst.

    Gibt es eine Möglichkeit das zu umgehen? Also das er nach dem nächsten Objekt sucht AUßER sich selbst?

    Wäre sehr dankbar wenn mir da jemand helfen könnte, hätte diese Funktion nämlich schon sehr oft gebrauchen können ...

    Vielen Dank im Voraus!

    LG,
    Pascal
  • Hab dir mal ein Script zusammen geschmissen:

    Spoiler anzeigen

    GML-Quellcode

    1. /*
    2. instance_nearest_ext(x, y, object, notme);
    3. Finds the nearest instance
    4. argument0 - X Position
    5. argument1 - Y Position
    6. argument2 - Object
    7. argument3 - Not me (if this is set, the instance where it is called from is ignored)
    8. Written by kebaplover
    9. */
    10. if (argument3) {
    11. var _i, _ii, _tmpii, _dist, _tmpdist;
    12. _dist = 1000000;
    13. _ii = noone;
    14. for (_i = 0; _i < instance_number(argument2); _i += 1) {
    15. _tmpii = instance_find(argument2, _i);
    16. if (_tmpii != id) {
    17. _tmpdist = point_distance(argument0, argument1, _tmpii.x, _tmpii.y);
    18. if (_tmpdist < _dist) {
    19. _dist = _tmpdist;
    20. _ii = _tmpii;
    21. }
    22. }
    23. }
    24. return _ii;
    25. }
    26. else {
    27. return instance_nearest(argument0, argument1, argument2);
    28. }
    Alles anzeigen


    Ich hoffe es hilft dir

    Edit: Die Lösung von MewX funktioniert auch (bzw müsste sogar schneller gehen). Zur volständigkeit habe ich das Script umgeschrieben auf MewX's Lösung.

    Spoiler anzeigen

    GML-Quellcode

    1. /*
    2. instance_nearest_ext(x, y, object, notme);
    3. Finds the nearest instance
    4. argument0 - X Position
    5. argument1 - Y Position
    6. argument2 - Object
    7. argument3 - Not me (if this is set, the instance where it is called from is ignored)
    8. Written by kebaplover
    9. */
    10. if (argument3) {
    11. var _tmp;
    12. instance_deactivate_object(id);
    13. _tmp = instance_nearest(argument0, argument1, argument2);
    14. instance_activate_object(id);
    15. return _tmp;
    16. }
    17. else {
    18. return instance_nearest(argument0, argument1, argument2);
    19. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von kebaplover ()

  • Das geht nur eventuell, aber versuche mal, im gleichen Script die Instanz selbst zu deaktivieren, dann zu suchen und die Instanz schließlich wieder zu aktivieren. Hängt davon ab, ob die Instanz wirklich sofort deaktiviert wird oder lediglich zur Deaktivierung markiert wird.

    Das sollte viel schneller sein als die obige Lösung.
  • Geht das nicht viel einfacher kein script zu verwenden und nur instance deaktivieren -> nearest_instance suchen -> instance aktivieren,

    einfach nur mit dem normalen Befehl?

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)