Problem mit Partikel system

  • GM 8
  • Problem mit Partikel system

    hallo

    hab mal wieder ein kleines Problem.
    Ich versuche für mein Spiel ein Skript für Effekte zu machen.
    Z.B soll das dann so aussehen das ich das Skript zum Beispiel beim treffer einer Kugel ausführe.
    Die erzeugten partikel sollten ein größerer in der Mitte sein der sich nicht bewegt und weitere eins anderen Typs die sich in alle Richtungen bewegen.
    Ich werde später im Spiel viele verschiedene Typen brauchen. D.h mit verschiedenen Farben, größen Wachstumsraten und anzahl der rezeugten sekündären partikeln und will darum nicht alle typen am Anfang des Spieles initialisieren.

    Ich versuche mein Spiel sehr ressourceschonend zu machen und darum soll nur dann daer neue Typ partikel erzegt werden wenn dieser bisher nicht existiert.
    Dazu erstellt das Skript eine variable aus den Argumenten des Partickels.
    Dann wird überprüft ob es dieser partickeltyp bereits existiert. Wenn nicht wird dieser neu erzeugt.

    Das Partikel-System wird schon woanders global initialisiert.

    Hier der Skript:

    Spoiler anzeigen

    GML-Quellcode

    1. /*
    2. argument0 size of the main particle
    3. argument1 growing of it
    4. argument2 live time of it
    5. argument3 first color
    6. argument4 second color
    7. argument5 number of secondary particles
    8. argument6 size
    9. argument7 growing of secondary particles
    10. argument8 live time of it
    11. argument9 color of it
    12. */
    13. var partt, parttt, local_emit, partt2, parttt2, local_emit2;
    14. partt = 'v_'+string(argument0+argument1*100+argument2+argument3+argument4);
    15. parttt = variable_local_get(partt);
    16. if parttt = 0
    17. {
    18. variable_local_set(partt,part_type_create());
    19. parttt = variable_local_get(partt);
    20. execute_string("globalvar "+partt+";");
    21. part_type_shape(parttt,pt_shape_flare);
    22. part_type_alpha1(parttt,0.8);
    23. part_type_life(parttt,argument2-1,argument2+1);
    24. part_type_color2(parttt,argument3,argument4);
    25. part_type_size(parttt,argument0/100,argument0/100,argument1,0);
    26. }
    27. else parttt = variable_local_get(partt);
    28. local_emit = part_emitter_create(ef_part_sys);
    29. part_emitter_region(ef_part_sys,local_emit,x,x,y,y,ps_shape_line,ps_distr_linear);
    30. part_emitter_burst(ef_part_sys,local_emit,parttt,1);
    31. part_emitter_destroy(ef_part_sys,local_emit);
    32. if argument5 = 0 exit;
    33. partt2 = 'v_'+string(argument5+argument6+argument7*100+argument8+argument9);
    34. parttt2 = variable_local_get(partt2);
    35. if parttt2 = 0
    36. {
    37. variable_local_set(partt2,part_type_create());
    38. parttt2 = variable_local_get(partt2);
    39. execute_string("globalvar "+partt2+";");
    40. part_type_shape(parttt2,pt_shape_flare);
    41. part_type_alpha1(parttt2,0.7);
    42. part_type_life(parttt2,argument8-1,argument8+1);
    43. part_type_color2(parttt2,argument9,argument9);
    44. part_type_size(parttt2,argument6/30,argument6/30,argument7,0);
    45. part_type_direction(parttt2,0,360,0,0);
    46. part_type_speed(parttt2,2,3,-0.2,0);
    47. }
    48. else parttt2 = variable_local_get(partt2);
    49. local_emit2 = part_emitter_create(ef_part_sys);
    50. part_emitter_region(ef_part_sys,local_emit2,x,x,y,y,ps_shape_line,ps_distr_linear);
    51. part_emitter_burst(ef_part_sys,local_emit2,parttt2,argument5);
    52. part_emitter_destroy(ef_part_sys,local_emit2);
    Alles anzeigen



    das problem ist schwierig zu beschreiben.
    Wenn ich es richtig erkenne werden 2 mal die gleichen partikel erstellt (des ersten Typs).
    Der zweite wird garnicht erstellt.
    Glaube das problem ist folgendes:
    Der gamemaker verwendet für Partikeltypen zahlen.
    Der erste Typ ist 0.

    ich hab im spiel treat uninitialized variables as 0 eingestellt, somit wird wenn der wert aus partt2 erhalte werden soll 0 eingestellt weil die variable ja noch nicht existiert.

    Aber er ist ja schon ein partikeltyp unter der variable 0 erstellt word. Nähmlich durch den ersten partikel typ.
    Darum kommt bei part_type_exists(parttt2) true raus obwohl so ein partikel garnicht eingestellt wurde.

    Darum wird der Code der das zweite partikel einstellen sollte übersprungen und es wird zweimal das selbe partikel durch die burst-funktion erstellt.

    Was kann ich dagegen tun?

    Danke schon mal sehr im Vorraus :):)

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DragonGamer ()

  • Hab mein Problem selbst gelöst :P

    Oben ist die Korigierte Version drin.

    Hier das initialisierungs skript:

    GML-Quellcode

    1. globalvar ef_part_sys;
    2. ef_part_sys = part_system_create();
    3. part_system_depth(ef_part_sys,argument0);


    Falls es jemand braucht, man kanns benutzen..

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Benutzer online 1

    1 Besucher