kollisionsprüfung mit 2 objs gleichzeitig

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

  • kollisionsprüfung mit 2 objs gleichzeitig

    hi,
    ich hab grad des problem, dass mein object 2 objects gleichzeitig berührt, und daher nicht weiß, auf welches er springen soll. gibts irgendwie ne möglichkeit, dass beide objects erkannt werden? am besten wäre es, er würde nur die kollision bemerken, bei dem das object eine höhere variable besitzt(so was wie priority, bei mir is dass dann die höhe).(alle objects habm ne mask, keins is solid)


  • Hilfreich wäre natürlich zu wissen, welchen Zweck die Collision erfüllen soll, also welche Events sie zur Folge hat. Dann kann man auch eher über eine sinnvolle Lösung für dein Problem diskutieren.

    Btw: Wenn es wirklich darum geht zwei verschiedene Objekte zu unterscheiden, dann klar: Du kannst "vergleichen". Das einfachste wäre aber: Ins Collision-Event mit dem "unwichtigeren"-Objekt packst Du eine If-Abfrage, ob eine Kollision mit dem "wichtigeren" Objekt besteht und nur wenn diese nicht besteht, passiert das Folgende (aus der Collision mit dem unwichtigeren Objekt). Müsste eigentlich reichen.
  • ja so würde es natürlich gehen, aber ich brauche die kollisions prüfung sehr oft pro step.(bisher hab ich collision_ellipse verwendet(meine mask ist eine ellipse)).da ich zudem auch sehr oft die id des objects wissen muss und meistens berühren mich ja 2 instanzen des selben objekts,würde das in dem collisions-event nix nützen


  • Soweit ich weis, werden bei 2 Kollisionsevents mit dem selben Objekt gleichzeitig auch dieses Event zweimal performt. Du speicherst die aktuelle Kollisions-id in einer Variable ab und setzt die Variable jeden Step-End auf -1 oder so. Jetzt könntest bei jeder Kollision die y-Werte oder was auch immer mit denen aus der temporären Variable vergleichen, fällt der Test positiv aus, dann wird die aktuelle Kollisions-id in die Variable geschrieben.
    Bevor du dann die Variable im End Step zurücksetzt, kannst du dann deine entsprechenden Operationen durchführen.
    Is jetzt nur ein Gedankengang, weis nicht obs funktioniert oder das is, was du wolltest, hoffe, du hasts verstanden.
    "das war meine letzte flamewar PM an dich ."
  • war schon gut und würde wahrscheinlich auch funktionieren, aber ich brauche die funktion ziemlich vielfältig z.b. muss ich schaun ob die kollision an einer anderen stelle auch eintritt oder ob er mit aktueller speed und direction im näachsten step was berühren würde. oder ich brauche die kollision nicht mit ner mask, sondern mit ner ellipse oder mit einem punkt


  • dh. nicht im Kollisionsevent, verstehe...
    Würde vielleicht mit Fake Objekten, die ihren Master-Objekten bereits um die entsprechende Speed & Direction voraus sind, funktionieren..
    Ich sehe nämlich keine Möglichkeit für multiple Kollisionserkennung mit den eigebauten Objekten, du könntest die kollidierten Objekte vielleicht temporär "verschwinden" lassen und nochmal prüfen.
    "das war meine letzte flamewar PM an dich ."
  • Wie wärs, wenn du mit collision_point im Kreis ums Objekt herum abfragen lässt, ob eine Kollision stattfindet.
    Also zum Beispiel so:
    Createevent

    GML-Quellcode

    1. objekte=ds_list_create()

    Stepevent

    GML-Quellcode

    1. var obj;
    2. ds_list_clear(objekte)
    3. for(i=0;i<360;i+=45) //macht also in 8 Richtungen eine Abfrage...kann natürlich noch präziser eingestellt werden.
    4. {
    5. obj=collision_point(x+lengthdir_x(32,i),y+lengthdir_y(32,i),objekt,1,1)
    6. if obj!=noone ds_list_add(objekte,obj)
    7. }

    Nun hast du alle Objekte, mit denen eine Kollision stattfindet in der Liste gespeichtert und kannst mit den IDs weiterarbeiten.
  • Wie wärs mit ner Schleife und nem array?

    GML-Quellcode

    1. meineid[0]=-4
    2. i=0
    3. while(1)
    4. {
    5. meineid[i] = checke kollison(..)
    6. if meineid[i]= -4
    7. break;
    8. instance_deactivate_object(meineid[i])
    9. i+=1
    10. }
    11. for(j=0;j<i;j+=1){
    12. instance_activate_object(meineid[j])
    13. }
    Alles anzeigen


    oder so in der art ;)
    "das war meine letzte flamewar PM an dich ."
  • danke, das könnte sogar funktionieren. ich werds mal probiern.

    edit: wie krig ich denn aus den ganzen objects, die alle die selbe variable height haben, des raus, das den höchsten wert in der variable hat?


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

  • nimm ne Variable highest, und jedes mal überprüfst du, ob die variable meineid[i ].y grösser ist als die Variable highest, wenn ja, wird highest=meineid[i ].y
    "das war meine letzte flamewar PM an dich ."
  • Benutzer online 1

    1 Besucher