Nur mit soliden Objekten kollidieren

  • GM 6
  • Nur mit soliden Objekten kollidieren

    Guten Tag,// Kollisionen

    habe folgendes Problem, und zwar nutze ich diesen Code, damit ich nicht in Wänden hängenbleibe.

    GML-Quellcode

    1. if collision_circle(x+hspeed,y,10,obKiste,true,true) {hspeed=0;x=xprevious;}
    2. if collision_circle(x,y+vspeed,10,obKiste,true,true) {vspeed=0;y=yprevious;}


    Das funktioniert auch einwandfrei. Nur habe ich unzählige Objekte dieser Art und mit dieser Eigesnchaft.
    Nun möchte ich, dass das ganze bei allen soliden Objekte passiert.

    Habe das ganze so gelöst:

    GML-Quellcode

    1. if !place_free(x,y)
    2. if collision_circle(x+hspeed,y,10,all,true,true) {hspeed=0;x=xprevious;}
    3. if !place_free(x,y)
    4. if collision_circle(x,y+vspeed,10,all,true,true) {vspeed=0;y=yprevious;}


    Der Effekt ist tatsächlich, dass nicht Solide Objekte bei dem Code außen vor gelassen werden, allerdings funktionieren nun die Kollisionen mit den Soliden Objekten nicht richtig, der Player gleitet nicht mehr an den Objekten entlag, sondern hängt drinen fest.

    Wäre halt top, wenn es irgendeinen Befehl gibt, der sich nur auf Solide Objekte bezieht, und nicht auf alle (all) oder einzelne (obWall).

    Jemand ne Idee?

    Gruß,
    Shari
    Dieser Beitrag wurde bereits 1909 mal editiert, zuletzt von »Sharivari« (Morgen, 19:89)
  • Du könntest natürlich durch alle Objekte durchgehen und ermitteln, welches solid ist.

    GML-Quellcode

    1. for (i = 0; i < instance_count; i += 1)
    2. { var ID; ID = instance_find, (all, i)
    3. if ID != noone
    4. { if ID.solid
    5. { //Tu' irgendwas. ID ist das Objekt, welches solid ist.
    6. } } }

    Oder:

    GML-Quellcode

    1. with all
    2. { if solid
    3. { //Tu' irgendwas.
    4. } }

    Ist wahrscheinlich (wie immer bei mir) unnötig kompliziert, sollte aber hoffentlich helfen.