distanz zwischen zwei untereinander liegenden objekten ermitteln

  • GM 8

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

  • distanz zwischen zwei untereinander liegenden objekten ermitteln

    huhu,

    hänge grade etwas, vllt kann man da helfen ;) wie kann ich checken ob direkt unter obj_a ein obj_b ist, und dann die distanz ermitteln? ich muss dazu sagen dass sich viele obj_b unter obj_a vorbei bewegen und ich nur die distanz zu dem direkt unter obj_a liegenden obj_b benötige. am besten noch so daß es direkt innem create event ausgeführt werden kann.

    mfg
  • instance_nearest leider net, da sich die höhe der obj_b ändert, hab da was gebastelt das funzt aba nur wenn sich die obj_b nicht bewegen. diese sollen sich aba von rechts nach links bewegen.

    GML-Quellcode

    1. if collision_line(x,y,x,y+view_hview,obj_brick_1,false,false){
    2. eee = collision_line(x,y,x,y+view_hview,obj_brick_1,false,false)
    3. y = eee.y-16}


    wirkt auch iwie doppelt gemoppelt, funzt komischerweise xD

    leider halt nicht wenn sich die unten liegenden objekte bewegen. hintergrund des ganzen is dass ich ein generator habe der "gegner" aller paar sek generiert. diese sollen sich dann selber nen platz auf dem "terrain" suchen.

    aja der code wird im create event von obj_a ausgeführt. und obj_a wird durch den generator gespawnt

    mfg
  • Du könntest das ganze auch so lösen, dass du in den obj_b's abfragst, ob die im horizontalen Bereich unter einem sind.
    Die Objekte sagen dass dann obj_a und dann wird die Höhe über distance_to_object ausgerechnet:

    GML-Quellcode

    1. ​obj=-1;
    2. with(obj_b){
    3. if(other.obj==-1
    4. and other.x>=x-sprite_width/2 and other.x<=x+sprite_width/2)
    5. other.obj = id;
    6. }
    7. if(obj != -1)
    8. distance = distance_to_object(obj);
    9. else
    10. //kein Obj drunter
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Hätte eventuell doch einen Ansatz mit instance_nearest, dazu werden unpassende Instanzen vorrübergehend deaktiviert. Im Moment ist das ganze noch sehr Flexibel aber wenn nur direkt unter dem Objekt getestet werden soll kann es noch stark vereinfacht werden.

    GML-Quellcode

    1. //in obj_a
    2. var found = false;
    3. var dist = -1;
    4. while(!found) {
    5. if (instance_nuber(obj_b) > 1) {
    6. with (instance_nearest(obj_b)) {
    7. if ((y > other.y) && (abs(x-other.x) < other.sprite_width*other.image_xscale)) {
    8. found = true;
    9. dist = point_distance(x,y,other.x,other.y);
    10. }else{
    11. instance_deactivate_object(id);
    12. }
    13. }
    14. }else{
    15. break;
    16. }
    17. }
    18. instance_activate_all();
    Alles anzeigen

    noch ungetestet sollte aber klappen.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:

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