Der Näheste/Erste von Links oder Rechts

    Der Näheste/Erste von Links oder Rechts

    Ich brauche ein paar Gedankenanstösse zum Thema: Wie finde ich die nähste oder erste Instance Links oder Rechts von mir?


    Ich habe dazu den Player in der Mitte und von links und rechts laufen Gegner entgegen und bleiben in der "attack_area" stehen damit man sie treffen kann, wenn man die linke oder rechte Pfeiltaste drückt.
    Das Problem ist aber wenn wie hier zum Beispiel im "attack_area_left" zwei oder mehrere Gegner stehe attackiert es alle instancen aufeinmal, dabei möchte ich das es den Ersten trifft der von Links kam.
    Wie kann man das korrigieren? - Und anschliessend Analog für die andere Seite ausführen?

    Die function "instance_nearest" ist mit bekannt, aber wie kann man das auf Links und Rechts fokussieren? Ich komm nicht weiter :/


    Beste Grüsse
    Brodi <3
    huhu
    Du könntest mehrmals nearest instance aufrufen und diese dann deaktivieren bis du eine links und eine rechts gefunden hast, dann wieder alle aktivieren. Das ist aber mühselig und buganfällig.

    Oder:
    alle Instances in ein array speichern und dann die koordinaten vergleichen. Das gibt die die beste möglichkeit für alle möglichen weiteren spielereien. (alle in einem radius treffen, nur die äußersten treffen etc)

    Oder:
    mit 2 collision_lines die in einer for Schleife immer länger werden, die erste getroffene instanz links und rechts herholen. So würde ich es lösen wenn du später nichts machen willst wie zB alle innerhalb eines Radiuses bestimmen usw.

    GML-Quellcode

    1. for (i = 0 ; i < maximum ; i += 8)
    2. {
    3. checkIDright = collision_line(x,y,x+i,y,obj_parent_enemy,false,true);
    4. if checkIDright != noone
    5. {
    6. //do stuff
    7. }
    8. checkIDleft = //usw
    9. }

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
    Ja, würde auch in der attack_area eine ds_list anlegen.
    Im collision event mit enemy >> wenn enemy.id nicht in liste : ds_list_add(liste,enemy.id);
    dann wenn du die pfeiltaste drückst nimmst du immer den ersten index raus.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
    Hallo allerseits

    Danke für eure Vorschläge und Ideen.
    Husi hat mir aber schnell einen Code (Funktion) zugezwitschert der phänomenal funktioniert, nicht Performanz lastig ist und einfach zu implementieren ist:

    Quellcode

    1. ///nearest_right(obj)
    2. var obj=-1, dis;
    3. with(argument0){
    4. if (x > other.x) && (obj == -1 or distance_to_object(other) < dis) {
    5. obj = id;
    6. dis = distance_to_object(other)
    7. }
    8. }
    9. return obj;


    Und schon wird gecheckt, wer am Nähsten rechts von mir ist. Ziemlich clever! Danke Husi <3
    huhu