Wenn bei allen nichts dazwischen ist

  • GM 8

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

  • Wenn bei allen nichts dazwischen ist

    Ich nerve euch mal wieder! ^^
    In einem anderen Thread habe ich gefragt wie ich abfragen kann ob etwas zwischen zwei Punkten ist,
    wenn es jezt mehrere Objekte gibt z.b 2 mal ein Kreis und ein Viereck, jezt möchte ich das er etwas macht wenn zwischen diesen beiden nichts ist also von Viereck zu Kreis1 und von Viereck zu Kreis2.

    Der Code um abzufragen ob etwas dazwischen ist:

    GML-Quellcode

    1. collision_line(x1,y1,x2,y2,obj,prec,notme)


    Mfg Rohkar
  • da macht wohl einer Nachtschicht. ;)

    Geht nicht "nicht"

    Also:

    GML-Quellcode

    1. !collision_line(x1,y1,x2,x2,obj,prec,notme) and !collision_line(x1,y1,x2,x2,obj,prec,notme)

    und dabei als bezugspunkt das viereck nehmen

    Könnte mir vorstellen, das es geht. Kann es aber gerade nicht testen.

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

  • Bin mir nicht sicher ob das jezt so funktioniert wie ich möchte, denn es sind nicht immer nur 2 Objekte sondern soviele wie ich im Raum platziert habe also könnten es auch 10 sein ich möchte das er bei allennachprüft. Wozu ist den

    GML-Quellcode

    1. all
    da? Kann man damit was machen?
  • Wenn du die Kreis-Objekte zur Laufzeit, also während das Spiel läuft, erzeugst, kannst du ihre Instance-IDs in Variablen speichern und so jederzeit auf sie zugreifen. Somit kannst du mit einer beliebigen Programmschleife jederzeit alle Kreisobjekte abfragen.

    Das geht dann etwa so:

    GML-Quellcode

    1. // Im Viereck-Objekt:
    2. // Kreisgenerierungs Blah
    3. _kreis[0]=instance_create(x,y,kreis);
    4. _kreis[1]=instance_create(x-1,y+5,kreis);
    5. _kreis[2]=instance_create(-x,-y,kreis);
    6. // Abfrage im Step-Event
    7. for (i=0;i<instance_number(kreis);i+=1){
    8. if collision_line(x,y,_kreis[i].x,_kreis[i].y,all,false,true)<0{ /*Mach dies, tu das */ }
    9. }
    Alles anzeigen


    Hoffe, du kannst die for-Schleife schon nachvollziehen, ansonsten sag Bescheid, dann erklär ich's dir. ;)


    Wenn du allerdings die Kreise per Hand in den Raum setzt, ist nicht gewährleistet, dass ihre IDs direkt aufeinander folgen - das erste Objekt könnte die ID 1000321 haben, das zweite aber plötzlich 1000405. Das hat zur Folge, dass du die Kreisobjekte nicht direkt im Viereck-Objekt ansprechen kannst, wie oben, sondern ein bisschen schummeln musst.
    So in etwa:

    GML-Quellcode

    1. // Wieder Step-Event im Viereck-Objekt (oder in einem Controllerobjekt irgendwo im Raum)
    2. if instance_exists(kreis){
    3. with kreis{
    4. if collision_line(x,y,viereck.x,viereck.y,all,false,true)<0{ /*Mach dies, tu das*/ }
    5. }
    6. }


    Statt alle Kreise nacheinander im Viereck anzusprechen, lässt du einfach alle Kreise im Raum (wenn's welche gibt) das Viereck ansprechen. Geht auch, solltest du aber in Maßen benutzen, weil unperformanter.
  • Benutzer online 1

    1 Besucher