Kollision mit Nebel feststellen

  • GM 8
  • Kollision mit Nebel feststellen

    Guten Tag,
    auch das Durchstöbern mit der SuFu brachte kein unbedingtes Ergebnis. Ich möchte wissen, wie ich denn die Kollision mit einer Art Nebel feststellen kann? Der Nebel wird erzeugt durch

    GML-Quellcode

    1. effect_create_above(ef_smoke,x,y,1,c_white);

    Wie bitte kann man denn jetzt feststellen, ob ein Objekt mit diesem Nebel in Berührung kommt, wenn doch der Nebel gar kein Objekt ist....?
    Hat da jemand einen Tipp für mich?
    Danke schon mal im voraus,
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Glow Dragon schrieb:

    Also du lässt ein Objekt erstellen, dass dann den Nebel regelmäßig erstellt und führst da die Collision aus.
    Danke Euch beiden für die Hinweise. Das lässt sich aber nicht machen, denn ich habe zwar ein Objekt an der Stelle dort (sonst könnte ich ja keinen Nebel erzeugen), aber der Nebel wird sich anschließend ausbreiten und ich möchte wissen, wie ich feststellen kann, ob die Spielerfigur vom Nebel/Rauch erreicht wird oder nicht. Das geht leider nicht mit einer Collisions-Maske, denn die würde nicht nur riesig sein müssen, sondern sich auch ständig verändern (vergrößern) müssen, je nachdem, wie sich der Nebel ausbreitet.
    Archie
    Signatur? Ich überlege mir noch eine. Die besten sind ja schon alle vergeben... :para:
  • Ich würde es ja ganz anders machen. Ich würde ein Objekt erstellen (obj_nebel), das die Kollisionen übernimmt und den Nebel bewegt und zeichnet.

    GML-Quellcode

    1. // Create Event
    2. list = ds_list_create();
    3. // Step Event
    4. var i,nebel,xx,yy,hspd,vspd;
    5. for (i=0;i<ds_list_size(list);i+=1) {
    6. nebel = ds_list_find_value(list,i);
    7. xx = ds_list_find_value(nebel,0);
    8. yy = ds_list_find_value(nebel,1);
    9. hspd = ds_list_find_value(nebel,2);
    10. vspd = ds_list_find_value(nebel,3);
    11. xx += hspd;
    12. yy += vspd;
    13. ds_list_replace(nebel,0,xx);
    14. ds_list_replace(nebel,1,yy);
    15. }
    16. // Draw Event
    17. var i,nebel,xx,yy;
    18. for (i=0;i<ds_list_size(list);i+=1) {
    19. nebel = ds_list_find_value(list,i);
    20. xx = ds_list_find_value(nebel,0);
    21. yy = ds_list_find_value(nebel,1);
    22. draw_sprite(spr_nebel,0,xx,yy);
    23. }
    Alles anzeigen
    Um Nebel zu erstellen:

    GML-Quellcode

    1. // scr_nebel(x,y,hspeed,vspeed)
    2. var nebel;
    3. nebel = ds_list_create();
    4. ds_list_add(nebel,argument0);
    5. ds_list_add(nebel,argument1);
    6. ds_list_add(nebel,argument2);
    7. ds_list_add(nebel,argument3);
    8. ds_list_add(obj_nebel.list,nebel);
    Und um zu schauen ob eine Kollision da ist:

    GML-Quellcode

    1. // src_in_nebel()
    2. var width,nebel,xx,yy;
    3. width = sprite_get_width(spr_nebel);
    4. for (i=0;i<ds_list_size(obj_nebel.list);i+=1) {
    5. nebel = ds_list_find_value(obj_nebel.list,i);
    6. xx = ds_list_find_value(nebel,0);
    7. yy = ds_list_find_value(nebel,1);
    8. if (collision_circle(xx,yy,width/2,self,true,true))
    9. { return true; }
    10. } return false;

    Das lässt sich natürlich erweitern und man sollte es auch, immerhin war das nur ein kleines Beispiel :P